摘要
笔者涉及深度学习不到一年时间,入手的时候直接从几大经典的卷积神经网络入手,AlexNet,GoogLeNet,FCN入手,有点空中造楼阁的意味。很是不结实,建议从读者们不要像我这样,基本的知识是需要搞清楚的。
趁着最近有点时间,抓紧补了补之前的知识,在未来的几章中均是参考github上一个大神之作,浅显易懂。如果有能阅读数学公式的插件,可以直接阅读大神的文章。
这篇博客是我总结完关于深度学习之后才加的一篇,目的在于做个总结,这样知识才能变成自己的东西。
思路
关于深度学习,首先想到的一定是神经网络模型,按照难易程度来分,可以分为线性和非线性;按照功能来分,可以分类拟合/回归问题和分类问题;
但是不管按照什么划分,有神经网络,就一定会有前向计算,损失函数,后向传播(梯度下降);
当然在数据处理上也会有一些技巧,比如标签归一化,特征值归一化等
其中**反向传播(梯度下降)**是神经网络能够预测的灵魂
所以先从反向传播说起:
反向传播,是求 w w w和 b b b的梯度,其实就是变化率,通过损失函数(回归用均方差,分类用交叉熵)计算出预测值和标签之间的差距或者误差时,这个值就是变化值,将这个值与 w w w的变化率(偏导)做运算,就能够找到梯度下降了多少,从而更新 w w w的值,这就是反向传播,那么线性反向传播就是说偏导是个常数,或者说是线性的,通过一层神经元就能够解决线性问题。非线性反向传播的偏导不是一个常数,因此不是线性变化,需要至少两层神经网络才能够完成非线性的问题,另外非线性问题的出现是因为在隐藏层的输出之后的添加有激活函数,将其做了一次非线性映射,否则单纯的 w w w和 b b b是无法完成非线性任务的。
注意:在反向传播中用到的梯度下降不是严格的数学解析解,适合于网络模型的迭代变化,简单的线性回归其实可以通过严密的计算公式得到回归方程,如正规方程
当然,神经网络可以还可以做非线性的拟合,如果通过数学上的公式计算可能会很复杂,而神经网络只需要搭建一个至少两层的网络模型,通过不断迭代就能够拟合出一条非线性曲线。
不过,神经网络做的最多的一般是分类问题,线性二分类,线性多分类,非线性二分类,非线性多分类,
针对线性分类,其实不需要激活函数,且仅一层网络就能够实现问题,二分类需要对输出进行sigmoid处理,多分类则进行softmax处理
非线性问题则需要激活函数的帮助,损失函数采用交叉熵,结合实际情况,如果二分类,结合sigmoid,多分类结合softmax。另外激活函数仅仅出现在隐藏层,输出层是需要分类函数的,sigmoid即使激活函数又是分类函数,因此会出现在输出层。
最后,卷积神经网路的出现,大大降低了变量的数量,是目前比较常见的神经网络模型。
总结
以上所有内容均可在github上找到相关对应,只不过笔者在这里按照自己的理解做了一次梳理。
参考
https://github.com/microsoft/ai-edu/tree/master/B-教学案例与实践/B6-神经网络基本原理简明教程