判断预测结果
神经网络自己怎么判断预测结果是否准确?
损失函数!就是干这个的。
回顾下逻辑回归+激活函数
i角标指代某一个训练样本。例是对于训练样本
的预测结果,用什么损失函数判断预测的精准度高不高?
用下面这个公式作为损失函数,预测结果y^与实际结果y的差的平方乘1/2。但在实践中人们通常不用它,具体原因后面会说
实践中用的损失函数是这个:
上面是对单个训练样本定义的损失函数。下面的公式是衡量算法对整个训练集的预测精度,即对每个样本的“损失”累加然后求平均值。这种针对整个训练集的损失函数称为成本函数。值越大=成本越大=预测越不准
损失函数运算结果越大,预测与实际结果偏差越大,即预测精度越低。
努力使损失函数值越小,即努力让预测结果越准确。
损失函数可以很好的反映模型与实际数据差距,理解损失函数能更好的对后续优化工具(梯度下降等)进行分析与理解。很多时候遇到复杂问题,最难得是如何写出合适的损失函数。
学习or训练神经网络
结合前面的学习,了解了输入、预测、判断是否准确。
那么不准确,要想办法让预测变得准确,这个努力让预测变准确的过程就是学习。
回顾逻辑回归,预测是否准确是有w和b决定的,即权重和阈值。所以神经网络学习的目的就是找到合适的w和b。通过梯度下降算法可以达到这个目的。
梯度下降(gradient descent)算法会逐步改变w和b的值,新的w和b会使损失函数的输出结果更小=预测更准确
上图公式熟悉吧,逻辑回归+激活函数,损失函数
因为x输入和结果y是固定的,所以损失函数是一个w和b的函数。
“学习”或“训练神经网络”,是找到一组w和b,使损失函数最小。
损失函数J的形状如图,训练的目的就是找到在漏斗底部的一组w和b。
这种漏斗状的函数被称为凸函数,向下凸。选择J为损失函数的原因也是因为J是凸函数
如图示,梯度下降会逐步更新w和b,使损失函数一步一步变小,最终找到最小或接近最小。
梯度下降算法如何来更新w和b呢?
假设损失函数J只有参数w(先忽略b),并假设w是一个实数(实际w是一个向量,一组实数),如下图,梯度下降算法逐步改变w的值,尽可能移到红点位置,使损失函数结果越来越小
通过这个公式改变w的值,w'就是新的w,r是学习率(learning rate),偏导数dw
所以这个公式即:新w=旧w-学习率*偏导数
(什么是学习率?什么是偏导数?好问题,后面说明)
r表示学习步进,即控制w的变化步进的参数。看下边的示例:
假设w=10,dw=1,r=4
那么第一次梯度下降后,w'=10-4*1=6
假设w=10,dw=1,r=2
那么第一次梯度下降后,w'=10-2*1=8
10变8比起10变6,变化没那么大,因为变化率r比较小
dw是参数w关于损失函数J的偏导数。偏导数即斜率,斜率即变化比例,即当w改变一点点后J会相应的改变多少。
举个栗子:
w初始值(假设是6)位置的偏导数(斜率、变化比例)就是小三角的高除以底边(即J的变化除以w的变化),也就是当w=6时J函数的变化与w的变化之比
曲线越陡,三角形越陡,高越长,底边越短,斜率越大(因为分子大,分母小了)。所以第一个小三角形位置,当w值改变一点,J的改变越大(因为曲线陡)。
同理,第二个小三角形位置,因为曲线不那么陡,所以w值改变一点,J的改变就没有那么大了。
这个斜率dw就是J的变化与w的变化的比例。
注意这里左半边点的斜率是负数哦,可以看下怎么算斜率~
通过这样的方式找到J最小时w的值是多少。但这里也要注意度,如果每次让w变太多,可能错过J哦~