刚刚接触深度学习,简单的笔记,截图均来自51CTO,供自己简单梳理思路。
超参数和交叉验证
将训练集标号为1、2、3、4、5,每次都在这五个中选取一个作为验证集,能够有效防止某一数据集和训练集恰好。。
| 训练集 | 验证集 |
|---|---|
| 1、2、3、4 | 5 |
| 1、5、3、4 | 2 |
| 1、2、5、4 | 3 |
| 1、2、3、5 | 4 |
| 5、2、3、4 | 1 |
得分函数
x=[32323]=3072 输入的这个小猫有3072个像素点,可以把x转换成30721的矩阵,如果想得到一个101的得分矩阵,则需要w为10*3072的矩阵。
现在得到了三个类别的
SVM
图片属于哪个类别的得分值已经算出
cat损失值=max(0,2.1-3.2+1)+max(0,-1.7-3.2+1)=2.9
max(0,错误类得分-正确类的得分+1)
所以损失函数为
正则化惩罚项
其中假设两个模型分别为权重值w1=[1,0,0,0] w2=[0.25,0.25,0.25,0.25] x=[1,1,1,1]
w1xT=1 w2xT=1,虽然两个权重值和x的转置相乘都为1,但是w1其实只用到了x第一个像素点,w2比较均匀,将原始数据集都用到了。所以可得出来第一个模型只关注于部分,容易造成过拟合;第二个模型关注整体,更好一些
W1的惩罚项:W12=1
W2的惩罚项:W22=(1/4)2(1/4)2(1/4)2(1/4)2=1/4
显然对于第二个模型惩罚的比较小,我们对第二个比较认可。
ps:不同的权重值有可能得到相同的得分函数,然后得到相同的损失函数,但加上正则化惩罚项之后就损失函数就不一样了。
损失函数最终版(加上正则化惩罚项)
softmax分类器
sigmoid函数可以将得分函数映射到sigmoid函数上,得到概率,再通过概率进行分类 。
- 第一列得分值:蓝色框中是根据得分函数算出属于每个类的得分值
- 第二列e的次幂:红色框中求得e3.2、 e5.1 、e-1.7,这样会把得分值进行一个明显的区分,会把稍大一点的映射为更大的数,会把小的得分值映射的相对较小
- 第三列归一化:例如:有一个样本 1,,2,3 把他们映射成概率,分别为1/6,2/6,3/6。
因此将第二步进行归一化得出属于每个类别的概率值:
24.5/24.5+164.0+0.18=0.129849…,
164/24.5+164.0+0.18=0.86919…,
0.18/24.5+164.0+0.18=0.00009… - 计算正确类别的损失函数
损失函数规律和log函数很符合(这里的y值指的是距离想轴的距离):x值越接近于1,y值越小等同于正确的概率值越接近于1,损失值就越小;x值越接近于0,y值越大等同于正确的概率值越接近于0,损失值就越大。
ps:log(0.13)映射出来是负值,所以在公式加上负号。通过损失函数计算的损失值(损失值只计算正确类别的):
-log(0.13)=0.89
SVM和softmax对比
10,9,9 其中10为正确类别的得分值
SVM:(0,9-10+1)+(0,9-10+1)=0
softmax:e10 e9 e9 然后归一化,再通过-log计算