WBY's Blog - Machine Learning
type: channel
link: https://wbyblog.cn/category/ML/
items: ML | Loss function & Activation function
items: Pytorch | Transforms

ML | Loss function & Activation function
type: item
date: 2022-07-22T18:16:00+08:00
description: Loss function损失函数用来评价模型的预测值和真实值不一样的程度，损失函数越好，通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别，结构风险损失函数是指经验风险损失函数加上正则项。常见损失函数与优缺点Zero-one loss$$ L(Y,f(X))= \left\{\begin{matrix} 1,Y\neq f(X) \\ 0,Y=f(X)\end{matrix}\right. $$0-1损失函数直接对应了分类判断错误的个数，但它是非凸函数，不好优化感知机使用的即是该损失函数，但这个条件太严格，也可以放宽条件：$$ L(Y,f(X))= \left\{\begin{matrix} 1,\left| Y-f(X)\right|\geq T \\ 0,\left| Y-f(X)\right|<T \end{matrix}\right. $$绝对值损失函数$$ L(Y,f(x))=\left|Y-f(x)\right| $$log对数损失函数$$ L(Y,P(Y|X))=-logP(Y|X) $$log对数损失函数能非常好的表征概率分布，在很多场景尤其是多分类，如果需要知道结果属于每个类别的置信度，那它非常适合健壮性不强，相比于hinge loss对噪声更敏感逻辑回归的损失函数就是log对数损失函数平方损失函数$$ L(Y|f(X))=\sum_N(Y-f(X))^2 $$经常应用于回归问题Exponential loss$$ L(Y|f(X))=exp[-yf(x)] $$对离群点、噪声非常敏感，常用在AdaBoost算法（迭代算法，针对同一个训练集训练不同的分类器）中Hinge$$ L(y,f(x))=max(0,1-yf(x)) $$该式子表示，如果分类正确，那么损失为0，否则为\(1-yf(x)\)，SVM支持向量机即选用该损失函数一般\(f(x)\)是预测值，在\((-1,1)\)之间，\(y\)则是目标值，其不鼓励分类器过度自信，即\(-1<f(x)<1\)，让某个正确分类的样本距离分割线超过1不会有任何奖励，从而使分类器更加专注于整体误差健壮性较高，对异常点、噪声不敏感，无较好的概率解释Perceptron loss 感知损失$$ L(y,f(x))=max(0,-f(x)) $$是Hinge损失的变种，Hinge对判定边界附近的点惩罚力度很高，而perceptron loss只要样本的判定类别正确，它就满意，不管其判定边界的距离，其泛化能力没Hinge强Cross-entropy loss function$$ L=-\frac{1}{n}\sum_x[y\text{ln}a+(1-y)\text{ln}(1-a)] $$其中，\(x\)表示样本，\(y\)表示实际的标签，\(a\)表示预测的输出，\(n\)表示样本总数本质是一种对数似然函数，可用于二分类和多分类中（输入数据是softmax或sigmoid函数的输出）二分类中 $$ loss=-\frac{1}{n}\sum_x[y\text{ln}a+(1-y)\text{ln}(1-a)] $$多分类中 $$ loss=-\frac 1 n \sum_i y_i\text{ln}a_i $$当使用sigmoid作为激活函数时，常用交叉熵损失函数而非均方误差损失函数，因其可完美解决均方损失函数权重更新过慢的问题，具有“误差大更新快，误差小更新慢”的良好性质均方误差损失函数（MSE）$$ MSE(y,y')=\frac{\sum_{i=1}^n (y_i-y_i')^2}{n} $$Activation function激活函数（Activation Function）是一种添加到人工神经网络中的函数，旨在帮助网络学习数据中的复杂模式。类似于人类大脑中基于神经元的模型，激活函数最终决定了要发射给下一个神经元的内容。Sigmoid$$ f(x)=\frac1 {1+e^{-z}} $$输出范围在0到1之间，由此可知其对每个神经元的输出进行了归一化用在把预测概率作为输出的模型中梯度平滑，避免跳跃输出函数可微，且是明确的预测Drawbacks: 倾向于梯度消失、输出函数不以0为中心，会降低权重更新效率、执行指数运算，计算机运行速度慢Softmax$$ f(x)=\frac{e^{x_i}}{\sum_{j=1}^{K}e^{x_j}} $$Softmax 是用于多类分类问题的激活函数，在多类分类问题中，超过两个类标签则需要类成员关系。对于长度为 K 的任意实向量，Softmax 可以将其压缩为长度为 K，值在（0，1）范围内，并且向量中元素的总和为 1 的实向量。…

Pytorch | Transforms
type: item
date: 2022-04-21T11:05:00+08:00
description: Transforms的结构及用法transforms.py相当于一个工具箱，工具箱中有名为totensor，resize等工具，图片被这些工具处理之后会得到我们想要的结果。在使用工具前，需要创建具体的工具，如：tool = treansforms.ToTensor()，接着将图片输入，得到结果：tensor_img = tool(img). 主要操作流程为：输入图片，使用PIL库中的Image.open()常见的Transforms要弄清楚输入输出的数据类型，处理的方法能实现什么样的效果。