1. softmax的基本概念
- 直接使用输出层的两个问题:
a. 一方面,由于输出层的输出值的范围不确定,我们难以直观上判断这些值的意义。例如,刚才举的例子中的输出值10表示“很置信”图像类别为猫,因为该输出值是其他两类的输出值的100倍。但如果o1=o3=103,那么输出值10却又表示图像类别为猫的概率很低。
b. 由于真实标签是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。
softmax运算符(softmax operator)解决了以上两个问题。它通过下式将输出值变换成值为正且和为1的概率分布:
y1,y2,y^3=softmax(o1,o2,o3)
其中
容易看出y1+y2+y^3=1
且0≤y1,y2,y3≤1,因此y1,y2,y3是一个合法的概率分布。这时候,如果y2=0.8,不管y1和y^3
的值是多少,我们都知道图像类别为猫的概率是80%。此外,我们注意到
argmaxioi=argmaxiy^i
因此softmax运算不改变预测类别输出。
2. 交叉熵损失函数
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200214143850752.png
3. 多层感知机
- ReLU函数: ReLU(x) = max(x, 0)
- Sigmoid函数: sigmoid(x) = 1/(exp(-x)+1)
- tanh函数: tanh(x) = 1-exp(-2x) / 1+exp(-2x)
4.激活函数的选择:
a. ReLU函数是一个通用的激活函数,目前在大多数情况下使用。但是,ReLU函数只能在隐藏层中使用
b. 用于分类器时,sigmoid函数及其组合通常效果更好。由于梯度消失问题,有时避免使用sigmoid和tanh函数
c. 在神经网络层数较多时,最好使用ReLU函数,该函数比较简单计算量少,sigmoid和tanh函数计算量大很多
d. 在选择激活函数时可以先选择ReLU函数,如果效果不好可以尝试其他激活函数
4. 多层感知机就是含有至少一个隐藏层由全连接组成的神经网络,且每个隐藏层的输出通过激活函数今昔你个变换。多层感知机的层数和各隐藏层中隐藏单元个数都是超参数
4. 文本预处理
文本是一类序列数据,一篇文章可以看作是字符或单词的序列。常见预处理通常包括:
- 读入文本
- 分词:队每个句子及逆行分词,也就是将一个句子划分成若干个词(token),转化为一个词的序列。
- 建立字典,将每个词映射到一个唯一的索引。为了方便模型处理,需要将字符串转化为数字。因此需要先构建一个字典,将每个词银蛇到一个唯一的索引编号。
- 将文本从词的序列转化为索引的序列,方便输入模型。使用字典,我们可以将原文中的句子从单词序列转化为索引序列。
1 现有工具进行分词的缺点:
a. 标点符号通常可以提供语义信息,但我们的方法直接将其丢弃了
b. 类似“should’n’t”,"doesn’t"这样的词会被错误的处理
c. 类似“Mr.”,"Dr."这样的词会被错误的处理
2. 建议使用spaCy和NLTK进行分词
5. 语言模型
- n元语法:序列长度增加,计算和存储多个词出现的概率的复杂度会呈指数级增加。n元语法通过马尔可夫假设简化模型
- 时序数据的采样:在训练中我们需要每次随机读取小批量样本和标签。时序数据的一个样本通常包含连续的字符
- 随机采样:每个样本是原始序列上任意截取的一段序列,相邻的两个随机小批量在原始序列上的位置不一定相毗邻
- 相邻采样:相邻的两个随机小批量在原始序列上的位置相毗邻
6. 循环神经网络
- 裁剪梯度:循环神经网络中容易出现梯度衰减或梯度爆炸,这回导致网络几乎无法训练。梯度裁剪是一种硬度梯度爆炸的方法。假设我们把所有模型参数的梯度拼成一个向量g,并设裁剪的阈值是θ。裁剪后的梯度是 min(θ/||g||, 1)g的L2范数不超过θ。
- 困惑度:通常使用困惑都来评价语言模型的好坏。困惑都是对交叉熵损失函数做指数运算后的得到的值
- 最佳情况下,模型总是吧标签类别的概率预测为1.此时困惑都为1
- 最坏情况下,模型总是把标签类别的概率月初为0,此时困惑都为正无穷
- 基线情况下,模型总是预测所有类别的概率预测都相同,此时困惑都为类别个数。
7. 循环神经网络进阶
- GRU:RNN存在的问题:梯度容易出现衰减或爆炸;门控循环神经网络:捕捉时间序列中时间步距离较大的依赖关系
a. 重置门:有助于捕捉时间序列里短期的依赖关系;
b. 更新门:有助于捕捉时间序列里长期的依赖关系 - LSTM(长短期记忆)
a. 遗忘门:控制上一时间步的记忆细胞输入门:控制当前时间步的输入
b. 输出门:控制记忆细胞到隐藏状态
c. 记忆细胞:一种特殊的隐藏状态的信息的流动