【神经网络的构成】
神经元 激活函数 层
feedforward computation前向计算:从输入开始依次计算每一层的结果。
隐层:在输入之上添加的多层通常被称为隐层。
激活函数:非线性的激活函数,拟合非线性关系,进行非线性变换。
叠加若干隐层,提升网络的表达能力。
输出层:来得到结果。线性输出层,用来解决回归问题。sigmoid输出层,将结果压到0-1之内,用来解决二分类问题。softmax输出层,用来解决多分类问题。
【如何训练】
目标:均方差越小,模型越好。Mean Squared Error。每个预测值和真实值差的平方和再求平均。将均方差定义为损失函数,也就是所谓的loss。训练的目标就是去减小这个损失函数的值。
如果是分类任务呢,目标就是最小化交叉熵Cross-entropy.
如何使损失函数最小化,采用梯度下降法,把整个优化过程拆分成一个个步骤,每一步,缩小损失函数一点点。如何调整参数,才能使损失函数逐步变小呢。这需要去求损失函数对于模型参数的梯度,梯度代表了对这个参数进行单位大小的改动,然后损失函数它变化最快的方向。我们就顺着这个方向去对模型参数做一个小的改动,就可以降低一点点损失函数。因为我们目标是使损失函数最小,所以我们要做沿着梯度的反方向去改动/走一小步。
改动/步幅的大小取决于“学习率”。
反向传播:把上游神经元层的梯度,传递到下游神经元层的梯度,从上游到下游逐层计算每层参数要进行的小变动。
随机梯度下降:以上计算梯度下降时用的是全部样本,也就是批量梯度下降法(full batch一个批次中使用全部样本),计算量大。随机梯度下降法,在使用下降法更新参数时每次只根据随机抽取一个样本进行计算,batch size=1,计算加速。mini-batch梯度下降:batch size大于1小于全部样本数,mini-batch是批量梯度下降法和随机梯度下降法的折中。
在深度学习中,用的比较多的是mini-batch梯度下降。
以下是特色神经网络介绍
【Word2Vec】词的低维度表示
有两种机制生成词的分布表示:CBOW和skip-gram
CBOW使用上下文的词同时去预测当前的词,skip-gram是用当前的词依次去预测上下文出现的词。
如果要计算所有的词,势必计算量巨大。所以,有以下提升计算效率的办法:
负采样、分层softmax、去高频词、滑动窗口有小到大(距离近的上下文影响更大)。
【RNNs】循环神经网络
顺序记忆,一个使大脑更容易识别序列模式的机制。
RNNs利用这个机制来递归地更新序列记忆,从而对序列数据进行一个很好的建模。
RNNs每个单元在计算当前隐藏层状态时,都会引用上一个时间片段/序列中上一个词的隐藏层状态。
应用:序列标注/词性标注、序列预测(例如温度曲线预测)、图片描述、文本分类(情感分析)
优势:可处理边长数据、模型大小和输入长度无关、每一步的计算会用到前面的信息。
劣势:每一步依赖前一步计算,计算变慢;后面单元,很难用到很早之前的信息,梯度消失或膨胀。
为了解决劣势,引入如下RNN变体。
【GRU】门控控制单元
重置门+更新门+新的激活函数
【LSTM】长短时记忆网络
遗忘门+输入门+输出门
【双向RNN】
一个词的预测/识别也会涉及后面的词的影响
以上循环神经网络擅长处理序列问题
【CNNs】卷积神经网络
最初用于计算机视觉领域,也可以用于NLP领域。
cnn善于提取局部和位置不变的模式,视觉领域:颜色、边角、纹理,NLP领域:短语和一些局部语法结构。
一般通过提取句子里的N元组(相邻的几个词组成的短语)来获取局部模式。
卷积层:通过滑动的卷积核从输入层提取局部特征表示。
池化层:通过对局部特征求最大/平均来获取整体特征。
【深度学习流水线】
准备数据-构建模型和训练目标-训练模型-验证模型-测试模型