本文是个人在观看完cs231n课程视频及讲义后对其内容的一些归纳总结,留在此处加深影响,也算用另一种方式加深自己对其的理解。
何为计算机视觉
简而言之,教计算机能够像人或者超过人的能力完成某些工作,例如自动驾驶、图像分类等。简化人们工作。
计算机视觉遇到的挑战
为什么需要引入Loss function这一个概念
loss function意为损失函数,即表示输入数据在经过一个网络训练后,将得到的输出结果的优劣进行量化,从而帮助我们优化网络结构
为什么需要引入Weight Regularization
这样做的目的主要是增大输出结果对输入数据的依赖。即输出结果应该要与输入数据强相关。例如下面的例子
虽说两个权重(w1和w2)与输入数据的预算结果一致,但是w2会均匀考虑数据的每一位的影响,所以这将对最终的结果起到一种保护作用,不至于最终的结果带有偏向性,即只考虑到一部分因素就得出结果
如何才能做到Optimization
optimization意为找到一个有效的方案来使loss function最小化。
- 首先最容易想到的就是随机搜索,直到找到最小值。但是这个办法过于盲目且效率不高的情况下得到的结果也不一定是最好
- 随后你可能想到如果损失能够按照一定梯度进行变化,这样就有据可循,也就是如下图所示的导数
所以如果我有如下图所示的参数,我需要计算他的梯度,那么我将有两种方式
1.对参数中的每一个值都利用导数公式进行求解,称之numerical gradient,如下图所示
好处:容易想到,便于编程
坏处:我首先需要求出每一次参数更新后的loss function,才能求解梯度,一方面这样误差会比较大(因为需要计算一次更新参数后的loss function),另一方面速度非常慢,尤其当需要计算的参数量大的时候,计算效率会更低。
这样做虽然能够得出最终的结果,但是有不小的缺点,所以引出第二种解决方案
2.第二种即为解析梯度(Analytic gradient),即引入微积分,一次性求出所有维度(参数中所有值)得梯度。
好处:结果准确、求解速度快
坏处:由于引入复杂数学计算,容易出错。解决方案:梯度检测(gradient check),使用numerical gradient检测Analytic gradient的准确性 - 由于我们需要使loss function达到最小,所以使用gradient求解loss function时称为Gradient Descent(这个解决了为什么需要引入Gradient Descent这一概念 ps:个人理解)
未完待续…