转载请注明:http://blog.csdn.net/c602273091/article/details/54234535
Standford的cs231n这门课,我觉得真的是太棒了。把CNN的各个部分、以及目前的发展都做了详细的介绍。同时通过作业,对CNN有了更加深入地理解。
介绍
这一块主要说的是计算机视觉的一个历史进程,以及目前的使用情况。
既然是李飞飞讲的课,自然就少不了imageNet这个数据集了。
然后是CV领域比较火的神经网络模型。
还有就是图片的语义分析,用语言来描述一幅图片。
图片的风格提取:
挑战
拍摄的图片从不同视角进行,illumination,变形,occulusion,与背景混合,同一类物体间差别也可能很大。
所以在进行识别的时候,没有什么特别的方法。常用的就是data-Driving的方法。这种方法就是收集训练集和标签、然后训练分类器、然后根据测试集的效果选择合适的分类器进行分类。
方法
1、KNN:计算不同类别到所需测试的图片的距离,根据距离进行排序。
课上讲的是纯粹用像素的方法进行计算,但是实际上做这些的时候可以先用k-means计算出visual word,然后再用visual word表示已经标好的图片。测试的时候,提取测试图片的visual word,然后使用KNN计算距离。
在计算hyper parameter的时候,就是K。这里可以使用常用的n折交叉验证。计算n个结果,取平均的结果。
2、线性分类器:
在上面的基础上,我们需要明白的是怎么对误差进行量化,以及如何进行优化。
误差的量化就是采用了一种称之为loss function的东西。然后优化就是采用了梯度下降的方法,梯度下降这里采用的就是链式求导这样一个东西。
Loss function
1、muilt-class SVM:
比如下面这个识别三个物体的分类器的例子。
计算出它们的score之后,计算loss。
然后计算平均的loss。
L = (2.9 + 0 + 10.9)/3 = 4.6
用公式表示loss为:
以上表示loss的方法有bug,就是在loss为0的时候,所求的模型唯一么?为了解决这个问题就提出了regularization,增加了regularization。
2、Softmax Classifier (Multinomial Logistic Regression)
3、比较SVM和SM。
softmax收敛慢,但是计算loss的精确度高。SVM收敛更快,但是计算loss的精确度稍低一些。
Optimization
1、随机生产:随机生成模型,哪个好就用哪个。这种方法精确度比较低。
2、梯度下降。
计算梯度的方法有完全计算:(Numerical gradient)
这种方法非常慢。
所以一般使用微积分来计算,学过高数的都知道链式求导。
这里对权重进行更新的算法叫做BP。(Analytic gradient)
然后在梯度更新的时候有一个学习率,学习率高下降得快,但是容易震荡。学习率低,收敛慢。
3、链式求导例子1
链式求导通过下图就可以非常清楚地了解:
在计算链式求导的时候,有一个技巧:把对x求导的值可以在前向的时候计算出来并存储。所以在进行后向权值更新的时候只需要计算后面的导数然后进行相乘得到链式导数。
4、链式求导2
计算得到:
在计算幂次方的时候,这里的sigmoid函数可以进行简化。
5、计算前向:
6、激活函数:
一般来说现在用的激活函数是ReLU。
以上截图来自于cs231n课程的ppt。
该课程的课程主页是: http://cs231n.stanford.edu/syllabus.html
课程的视频在: https://www.youtube.com/watch?v=g-PvXUjD6qg&list=PLlJy-eBtNFt6EuMxFYRiNRS07MCWN5UIA