深度学习
神经元:
神经网络中的基本单元,张量+函数组成。张量是n维数组,可以是一维数组,二维数组(矩阵),三维数组,函数一般有加权和(图中w1,w2为权重参数,a1,a2,a3是矩阵的数据)
函数一般有loss函数,激活函数,优化函数。
深度学习是对矩阵为运算对象,对矩阵进行加,减,乘,除等各种运算。
多个神经元组成神经网络:
这是3层全连接神经网络,有输入层,中间2层为隐藏层,输出层。
- 前向计算: 程序运行时,给w赋初值,从输入矩阵,经m次函数运算,得到输出, 这一过程称为前向计算。
- 反向传播: 输出结果同时得到loss, 梯度,计算w值更新幅度,更新w值。 前向计算 + 反向传播,经过n次循环,直到梯度为0, 这时的结果为最优结果。
- 优化函数:影响参数的调整方向以及量级,影响梯度的收敛速率。如:## Adagrad,RMSprop,Adam
- 激活函数:把输出归一化到(0,1)或者(-1,1)如: softmax函数,sigmod函数,TanH函数,LeRU函数。
- 损失函数:神经网络学习中,用某个指标来表示当前数据的状态,这个指标称为损失函数,如均方误差,交叉熵误差。
均方误差: loss = sum(Math.pow((y-y1),2))
梯度 = dloss / dy
- 梯度下降:梯度是某一个点斜率,修改w1,w2,w3这些参数值,直至斜率为0. 举个常见的例子:你站在山上某处,想要尽快下山,于是决定走一步算一步,也就是每走到一个位置时,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走.
以下是神经网络的通用流程:
- 准备数据
- 选择网络模型(DNN,CNN,RNN)
- 选择loss函数,激活函数,更新w权重参数。
- 循环 2。3。 直到梯度下降为0.
- 输出结果 w1,w2,w3这些参数值。
在程序设计中,通常运行100~200 次来更新 权重w 参数。
DNN:深度神经网络
又称全连接神经网络,如上面介绍的,是基本的神经网络。
CNN:卷积神经网络
在DNN中,由于上一层的所有值都参与了下一层的计算,w参数很多。CNN减少了参与下一层值, 缩减了w参数规模。 引入卷积的概念,形成卷积神经网络
- 卷积核:width * height ,step, padding
- 池化:扩大观察野。 step == 卷积核大小,有max pooling,average pooling. average pooling能更好的保留信息的背景,如高斯模糊, max pooling能更好的提取图片的纹理信息。
卷积神经网络发展历史:
最早出现LeNet ,后面AlexNet应来爆发期,后面分出两个研究方向,一个是加深网络层数,VGG,另一个增加卷积功能,如GoogleNet,Inception v3
ResNet结合了两个研究方向。
- LeNet:有卷积层,池化层,全连接层,
- ResNet: 残差网络,ResNet 解决数据跨越式流动,保留了原始的特征信息. 主要贡献: 网络层数超过百层,引入残差结构解决退化问题
- 残差网络与普通网络对比图
RNN:循环神经网络
语言的顺序会影响语义的表达, RNN添加了对序列信息处理。 DNN, CNN不关心信息的顺序问题.
我爱你
你爱我 表达的意思不同.
- RNN 基本处理单元:
如图中 xt是t时刻输入,st为t时刻隐藏层输出,st-1为t-1时刻隐藏层输出,ot为t时刻输出。,st取值取决于xt和st-1。
这多了一个W 循环,所以叫循环神经网络。 常用算法有:
- LSTM:长短期记忆网络。 添加了对长期记忆的处理,通过遗忘门(ft),输入门(it),输出门(ot)来控制长期记忆的影响。 门是开关的意思. 计算中用0,1 表示。图中 X 号表示开关。
C 表示长期记忆,h表示短期记忆,x是当前时刻输入. ft 控制是否把 前一时刻 C 加入当前计算。 it 控制是否把当前时刻输入加入 长期记忆。 ot 控制是否把长期记忆 加入 h 的计算。
- GRU:门控循环单元, LSTM的变种,将LSTM 中的三个门减化成2个门。它包括更新门(rt), 重置⻔(zt)。减少了结果中w参数个数。
Transformer
使用encoder-decoder 结构。它没有使用CNN,RNN。而是使用Attention。
- Multi-head Self Attention 在对句子取信息时,它取位置embedding, 语法 embedding, 语义embedding, 计算a1,1时, 用q1 乘以 k1 再softmax , 再乘以V1
a1,2, a1,3 以上循环计算。
b1 是 x1 的输出,等于a1,i 求和。
Self Attention 自注意力机制, 是可微分的,可以算出loss, 梯度,可以通过调整参数来调整结果的。