一、生物神经网络和人工神经网络
人工神经网络靠的是正向和反向传播来更新神经元, 从而形成一个好的神经系统, 本质上, 这是一个能让计算机处理和优化的数学模型.。而生物神经网络是通过刺激, 产生新的联结, 让信号能够通过新的联结传递而形成反馈。
参考链接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-0-ANN-and-NN/
二、神经网络
下图就是一个神经网络。它有很多层组成,最开始的输入层负责接收信息,然后由中间的隐含层对其进行加工处理,最后有输出层输出计算机对输入信息的认知。
训练神经网络需要大量的数据,训练的时候输出结果有对的也有错的。错的结果会被当作经验,从输出层反向传递回去在正确的方向上对每个神经元进行一定的调整,使其在下一次训练的时候能够输出更准确的结果。
每个神经元都有对应的激活函数,见下图。
在一次训练中,部分神经元被激活,如果结果错误,那么就会让一部分神经元变得更迟钝,一部分变得更敏感。
参考链接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-1-NN/
https://www.jianshu.com/p/e112012a4b2d
三、卷积神经网络CNN
CNN一般用于图像处理,它处理的是一个区域而不仅仅是一个点,通过一个滑动窗口,对图片信息进行卷积运算,从而总结出更高层的结构。
比较流行的搭建结构见下图:
首先是输入的图片(image), 经过一层卷积层 (convolution), 然后在用池化(pooling)方式处理卷积的信息, 这里使用的是 max pooling 的方式. 然后在经过一次同样的处理, 把得到的第二次处理的信息传入两层全连接的神经层 (fully connected),这也是一般的两层神经网络层,最后在接上一个分类器(classifier)进行分类预测。
上边提到的pooling是将小邻域特征点进行整合得到新的特征,而max pooling是提取这一小邻域中值最大的那个特征作为新的特征。比如一个2×2的邻域,[1 3; 2 0],经过一次max pooling后就变为[3]。
全连接层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来。
参考链接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-2-CNN/
https://blog.csdn.net/JIEJINQUANIL/article/details/50042791
https://blog.csdn.net/l691899397/article/details/52267166
四、循环神经网络RNN
RNN一般对有序的数据进行处理,其处理流程大致如下:
每次RNN都会产生一个 S(t),用以描述当前的状态,然后再综合之前的状态得出当前的输出。比如 Y(t+1) 是 综合 S(t) 和 S(t+1) 后得到的。
参考链接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-3-RNN/
五、LSTM 循环神经网络
1. RNN的弊端
RNN学习时,如果出现误差,会反向传递误差以调整参数,每一步都会乘以一个参数W。如果W小于1,那么误差就会逐渐缩小,到最后可能会得到一个趋近于0的数,这种情况叫做梯度消失或者梯度弥散。如果W大于1,那么误差就会逐渐变大,到最后可能会得到一个无穷大的数,这种情况叫做梯度爆炸。这就是普通 RNN 没有办法回忆起久远记忆的原因(比如,无法回忆起反向传回来的误差)。
LSTM(Long Short-Term Memory 长短期记忆网络)就是为了解决这种问题诞生的。
不过LSTM只能避免RNN的梯度消失,但是不能对抗梯度爆炸问题。好在梯度膨胀不是个严重的问题,一般靠裁剪后的优化算法即可解决,比如梯度裁剪(如果梯度的范数大于某个给定值,将梯度同比收缩)。
梯度剪裁的方法一般有两种:
1.一种是当梯度的某个维度绝对值大于某个上限的时候,就剪裁为上限。
2.另一种是梯度的L2范数大于上限后,让梯度除以范数,避免过大。
那么LSTM是如何避免梯度消失的呢?
参考链接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-4-LSTM/
https://blog.csdn.net/laolu1573/article/details/77470889
https://www.jianshu.com/p/9dc9f41f0b29
六、自编码
自编码器是一种压缩解压的神经网络
前半部分可以用做编码器,如下图。编码器可以提取出数据的精髓,可以用来对其他神经网络的输入数据进行提取,减轻神经网络的负担。
自编码器的后半部分可以用作解码器,这可以作为一种生成器(GAN),比如下面这个例子。
参考链接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-5-autoencoder/
七、生成对抗网络
常见的神经网络有多种,有普通的前向传播神经网络(下图 左) , 有分析图片的 CNN 卷积神经网络(下图 中) , 有分析序列化数据, 比如语音的 RNN 循环神经网络(下图 右) , 这些神经网络都是用来输入数据, 得到想要的结果。
而生成网络则是”凭空”捏造结果,即通过一些随机数来生成结果。生成对抗网络 GAN 就是现在最流行的一种生成网络。
GAN 中有一个Generator和Discriminator。其中,Generator负责生成,Disciminator负责评价生成的结果,然后将评价结果传给Generator,使其进行一些有利的调整以生成更好的结果。实际就是Generator和Discriminator的“对抗”。
参考链接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-6-GAN/
八、神经网络的黑盒不黑
神经网络一般可以分为三层,输入层、隐含层(也就是“黑盒”)、输出层,如果我们去掉输入层,将隐含层作为输出层,我们可以得到输入数据的重要代表特征。
如果隐含层中有多层,我们还可以再次去掉隐含层中的一层,最终输出的也是一系列代表特征,这样看来,这“黑盒”也不算太“黑”。
上边的方法在迁移学习中有所应用,有时候我们只需要神经网络的理解能力,即代表特征提取能力,可以去掉它的输入层,与别的神经网络拼接到一起以完成别的任务。比如,下面就是一个图片分辨神经网络迁移到图片中物品价值预测的例子。
参考链接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-7-feature-representation/
九、神经网络:梯度下降
梯度下降是优化问题中的一个分支。优化问题大概有三种解决方法:牛顿法 (Newton’s method), 最小二乘法(Least Squares method), 梯度下降法 (Gradient Descent)。神经网络采用的就是梯度下降法来对其神经元的参数进行优化。
梯度下降就是在梯度的方向上下降,从而达到最低点(即最优点)。这里的梯度可以理解为斜率。
神经网络中的优化一般都有很多局部最优点,通常梯度下降到的都是局部最优点,虽然比不上全局最优点,但这也有足够优秀了。
十、迁移学习
参考链接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-9-transfer-learning/