比如上述分类,你只知道他做的不好,但是如何知道他做的有多差呢?而是具体一个数值。
神经网络是既能做分类也能做回归,能做的事情比较多,唯一的区别就是损失函数你是如何定义的。做不同的任务就是损失函数不同而已。
上图中,是其他错误类别分类得分,是正确类别的真实得分,加1相当于加一个,相当于容忍程度(加1表示我这个正确类别至少要比你这个错误类别高1以上,才是没损失的)。最后求0和max之间的最大值。
上图中损失函数小于0,表示没有损失,意味着正确类别要比错误类别得分值高。
----------------------------------------------------
有了损失函数之后,我们还要把它这个损失函数做一个改进,不光有W,还要有正则化。
下图中虽然结果都一样,但是模型A只考虑局部,模型B考虑全局。 在训练的时候我们希望使用的是全局的模型B。模型A的话会产生变异,过拟合。
在模型训练当中还要关注你的模型参数会不会产生一些过拟合,所以在构建损失函数过程中,我们还要加上一点,正则化惩罚项。
前一部分叫做data_loss叫做数据在你当前损失函数当中得到的一个损失;后边正则化惩罚项表示当前这组模型由于他的权重损失参数带来的损失,他跟你的数据项没有任何关系,他只考虑你的权重参数。是惩罚项的系数,正常情况下,值越大,你不希望过拟合,如果你不希望过拟合,你要把惩罚项系数大一些,抑制住变异,正常情况下正则化项使用平方项就行。
1、首先有得分函数,获得得分值。
2、有了得分值和真实标签值计算损失,并加上正则化惩罚项,得到当前损失。
PS:现在得到的还是得分,跟分类任务还有一点差别,因为分类任务一般说我属于这个猫的概率值,一个可能性。
下图理解:
首先指数函数图像: 对数函数图像:
归一化也可以得到概率值:
一组数据a\b\c,归一化就是:
计算损失值使用的是log函数:(前边添加负号,是因为0到1之间的log值是负数)
概率值越接近于1,损失越小。越接近于0,损失越大。
输入一个数据,先得到得分值,然后进行一个计算,为了拉开差距(看图像),看的更明显一些,做一个映射,做完映射之后进行一个归一化(得到概率值),之后使用一个对数函数求他的一个损失(将概率值输入对数函数中)。
-------------------------------神经网络流程-----------------------
前向传播(计算损失)
反向传播(损失太高模型不好,更新w)------要从后往前逐层一步一步的求解,使用链式法则
PS:整体理解神经网络:要理解从前向后我对x做了什么;从后向前我对权重w又做了什么;