最近在看深度学习时,一直很好奇,loss函数,激活函数,规范化到底是怎么弄出来的。
一直以为这个是固定不变的,然后收集了很多自恋,查看了很多博客。最后才有点眉目。
以下是个人浅见,希望各位大神,各位大大门指正。
一般而言:机器学习可以分为两大类:回归、分类:
回归:根据离散样本(xi,yi)归纳出一条平滑的曲线(或直线),并用这条曲线来预测事物的发展情况
分类:根据离散样本(xi,yi)的某些性质,将该离散样本分为几类,每类数据有不同的性质,并用分类的参数对新样本进行分类预测:新样本属于哪个类别
我们要对未知情况进行预测,就必须建立一个切合实际的模型,用这样的模型对新的数据进行预测。而要建立一个切合实际的模型,其实就是对样本(xi,yi)进行处理的相关参数集的调试。即我们需要找到能够使样本(xi,yi)进行正确分类的最佳参数集,用另一句话说,就是使分类结果(实际输出)和理想结果(我们的期望)的误差越小越好(鉴于很多模型可能没有最小值解,所以一般希望越小越好),而用来表示这个误差的函数就是我们所谓的误差函数/损失函数/成本函数
LOSS FUNCTION
一般而言,大多数神经网络采用了3类损失函数:二次代价函数(均方差函数),交叉熵函数,softmax所用的函数
1 均方差损失函数:在UFLDL中采用的就是均方差损失函数,其模型为:
其中 f( ) 是正个模型的的输出函数,具体化即为输出层的函数,y 为我们希望的输出,或者说数据带有的标签;
这样,二者之间的差值自然是越小越满足我们的要求,所以均方差损失函数可以作为代价函数。
2 交叉熵函数:熵起源于香农信息量的期望,可以参考下http://www.cnblogs.com/crackpotisback/p/6781872.html其模型为:
同样的,f( )表示输出,y表示期望的输出或者标签。
我们可以计算,当 y 很接近 f( ) 时, 即表示模型对数据的预测很接近我们的期望时,此时 y = f( ) =1,或者y = f( ) = 0,代入上式均可以得到J = 0
当 y 不等于或者远离 f( ) 时, 即表示模型对数据的预测很不符合我们的期望时,此时 y =0, f( ) =1;或者y =1, f( ) = 0,代入上式均可以得到 J 趋近于无穷
所以我们可以用交叉熵来判断模型参数是否符合我们的期望,即作为损失函数。
3 softmax分类器所用的函数: 可以参考:http://blog.csdn.net/ture_dream/article/details/54948518,softmax是一个多分类器,是有一种特殊的交叉熵方法进行判断的。
softmax是个多分类器,其输出层的函数为:
其中 j = 1,2,3,...K,表示K个类别,也就是说softmax输出层输出的是测试样本是第 j 类的概率;
此时采用的损失函数为:(下面用 i 来代替 j 了)
这样,当第 i 个样本存在的概率越大,L 值越接近于0;相反。该概率越小,其值越大,表示和我们希望不符合
以上是我收集的损失函数。
THE ACTIVATION FUNCTION
激活函数是每个节点(不含输入层)必须要有的功能,在这儿简单地对激活函数做一个介绍: 1 sigmoid函数以其导数:
2 tanh函数:
3 softplus函数:
4 softsign:http://write.blog.csdn.net/postedit
5 ReLu:
、
此外,ReLu还有其他的类型:LReLu,PReLu,RReLu三种变形。
6 softmax的输出层,如上述。
规范化:
规范化,也称为正则化:
1 L2正则化:在损失函数中加入1/2 * λω^2,L2正则化对大的权重有很高的惩罚度,以求让权重分配的更均匀一些
2 L1正则化:在损失函数中加入 λ|ω| ,L1正则化会在模型训练过程中让权重向量逐渐的稀疏化,即就是到最后只留下了对结果影响最大的一部分权重
3 最大范数约束:限制了一个上行的权重边界,然后约束每个神经元上的权重都要满足这个约束,不添加惩罚项,要求每一个神经元的权重向量必须满足:小于一给定的常数
4 dropout正则化:设置以参数p,就是在训练过程中,对每个神经元,都以概率p保持它是激活状态,1-p的概率直接关闭它
可以参考:http://blog.csdn.net/han_xiaoyang/article/details/50451460