1、线性分类:
将输入的图像通过函数,得到每个类别的得分向量
2、得分函数:
将32x32x3的输入图像reshepe成3072x1的向量,通过10x3072的参数矩阵,得到10x1的输出向量
计算每个类的得分:
w,x,b决定不同的直线,可将W中的每一行理解为对于不同类别的参数,不同的类别有不同的w,从而有不同的直线
3、损失函数
*衡量直线和数据的吻合度
(1)损失函数1:hinge loss/支持向量机损失
现正确类别得分为13,错误类别1,2分别为-7,11
如果计算正确类别得分和错误类别得分之差∆大于10,则说明对于这两个类别区分得很好,所以其损失值为0
如果计算正确类别得分和错误类别得分之差∆小于10,则说明对于这两个类别区分得不好,所以要加大损失值
所以,只要满足正确分类的得分和错误分类得分之差在∆,则不会加大损失
不仅要观察一个数据损失函数的大小,应观察很多个数据
*将N组数据的损失函数累加取平均
(2)损失函数2:cross-entropy交叉熵损失(softmax分类器),评估的是两个概率向量的距离
做归一化(将所有类的得分做e(用e保证概率为正值)的指数次方并累加,分子为某个类的得分),计算每个得分的概率
*为了防止e的指数次方过大,通过log变换,工程中通过系数C控制大小
(3)两种loss的理解
4、神经网络结构的理解
单个神经元能够完成与、或的功能
与:
训练得到参数为-30、20、20,将结果通过sigmoid函数得到为p=g(-30+20x1+20*x2),使p满足‘与’的功能。
从而能够通过与或的运算,完成非线性可分的问题:
*对P1,P2进行‘与’运算即为对0数据的分割
比如要区分下图的各种颜色,可通过线段对单个颜色描边,在进行与运算,即可完成分割。
无隐层,完成线性分割
添加一层隐层,可对线性分割的结果进行 ’与‘ 或者 ‘或’ 运算
双隐层,可对线性分割的结果进行两次运算
神经网络的表达力:
- 理论上说但隐层神经网络可以逼近任何连续函数(只要隐层神经元个数足够多)
- 虽然从数学上看表达能力一致,但是多隐藏层的神经网络比单隐层的神经网络工程效果好
- 对于分类数据,神经网络的层数并不是越大越好,容易过拟合
- 图像数据比较特殊,特征较多,并不容易过拟合,是一种深层次的结构化数据,深层次的卷积神经网络,能够更充分的把这些层级信息表达出来
5、激活函数
(1)Sigmoid函数:
- 以Sigmoid函数作为神经元的函数,且神经网络的层数很多时,根据链式法则,计算每一层参数对结果的影响,在x大于4或小于-4求导所得的值是接近1或0的,层层传递下来,所计算得的结果非常小,即w0对y的影响非常小,从而出现梯度消失
- 速度较慢
(2)RULE函数
- 易求导,且不会出现sigmoid的现象,解决了梯度消失的问题
- 当通过relu映射的值一直映射在左半部分时,会出现神经元挂掉的情况,loss不变
(3)tanh
某些情况下tanh激活函数会有意想不到的效果
6、BP反向传播
反向传播计算例子:(链式法则:影响层层传递)
f () =(x+y)* z
求z对f的贡献:
设‘+’为q
f=q*z
先求 ∂f/∂z = q = 3,可知z增加1,f增大3
求x或y对f的贡献:
需先算出q对f=qz的贡献 ∂f/∂q = z =-4
再算x对q=x+y的贡献 ∂f/∂x =1(y对q=x+y的贡献 ∂f/∂y =1)
计算数据对结果的贡献时,通过对一些门单元计算方法进行总结,可以发现一下规律:
加法:x+y=q,对x或y偏导时得到的结果(∂f/∂x =1、∂f/∂y =1)都是相等的
乘法:xy=q,对x或y偏导时得到的结果(∂f/∂y =x、∂f/∂x =y)是互换的
7、正则化
避免过拟合
现有数据x,通过模型w1、w2后都能够得到1,但是w1为[1,0,0,0]只关注1的部分(这样的话只能在训练集中能够得到较好的结果,而当测试集有与x数据不一样的时候,那些数据的其他部分特征不能够得到关注,从而出现过拟合),而w2关注整体的特征
L2惩罚:对w进行平方,加入损失函数中
*说明:若w关注局部特征,则对此部分特征的参数会较大,平方后得到的惩罚值也较大