第一章 特征工程
1. 特征归一化
7. 图像数据不足时的处理方法
在图像分类任务中, 训练数据不足会带来什么问题, 如何缓解数据量不足带来的问题?
一个模型的信息来源主要有两个方面:
- 训练数据中蕴含的信息
- 模型形成过程中(包括构造, 学习, 推理等), 人们提供的先验信息
当训练数据不足时, 说明模型从原始数据中获取的信息比较少, 这种情况下要想保证模型的效果, 就需要更多的先验信息
- 先验信息可以作用在模型上, 例如让模型采用特定的内在结构, 条件假设或添加其他一些约束条件
- 先验信息也可以直接施加在数据集上, 让其展现处更多的,更有用的信息, 以利于后续模型的训练和学习.
具体到图像分类任务上训练数据不足带来的问题主要表现在过拟合方面. 所以, 对应的处理方法大致分为两类:
- 基于模型的方法: 采用降低过拟合风险的措施,包括简化模型(如将非线性简化成线性), 添加约束项以缩小假设空间(如L1和L2正则化), 集成学习, Dropout超参数等.
- 基于数据的方法, 主要通过数据扩充(Data Augmentation), 即根据一些先验知识, 在保持特定信息的前提下, 对原始数据进行适合变换以达到扩充数据集的效果.
在图像分类任务中,在保持图像类别不变的前提下,可以对训练集中的每幅图像进行以下变换:
- 观察角度:一定程度内的随机旋转、平移、缩放、裁剪、填充、左右翻转等
- 噪声扰动:椒盐噪声、高斯白噪声
- 颜色变换:在RGB颜色空间上进行主成分分析
- 其他:亮度、清晰度、对比度、锐度
其他扩充数据方法:特征提取, 在图像的特征空间内进行变换:数据扩充or上采样技术,如SMOTE(Synthetic Minority Over-sampling Technique)。
最后,迁移学习或者用GAN合成一些新样本也可帮助解决数据不足问题。
第三章 经典算法
1. 支持向量机
知识点: SVM模型推导, 核函数, SMO(Sequential Minimal Optimizaiton)算法
问题1: 在空间上线性可分的两类点, 分别向SVM分类的超平面上做投降, 这些点在超平面上的投影仍然是线性可分的吗
首先明确下题目概念: 当前的空间已经是线性可分的空间,有可能是样本空间,也有可能是映射后的特征空间. 题目问的是将当前空间中的点全部投影都当前的分类超平面上, 提问在分类超平面上投影的点是否仍然线性可分.
先说结论: 对于任意线性可分的两组点, 它们在SVM分类的超平面上的投影都是线性不可分的
解释一(反证法直观推导):
首先根据拉格朗日对偶优化问题的公式和KKT条件要求,可以知道, SVM的分类结果仅仅依赖于支持向量, 那么此时我们假设存在一个SVM分类超平面使所有支持向量在该超平面上的投影依然线性可分, 那么根据初等几何只是我们可以知道, 两个类别中距离最近的两个点, 它们连线的中垂线所组成的新的超平面是相较于当前超平面更优的解. 这与我们的假设相矛盾, 故线性可分的两组点, 投影到超平面上以后是线性不可分的.(具体可画图或看p53)
解释二(超平面分离定理,Separatin Hyperplane Theorem, SHT):
STH定理描述: 对于不想交的两个凸集, 存在一个超平面, 将两个凸集分离. 对于二维的情况, 两个凸集间的距离最短两点连线的中垂线就是一个将它们分离的超平面
根据此定理, 我们先对线性可分的这两组点求格子的凸包, 而SVM求得的超平面就是这两个凸包上距离最短的两点连线的中垂线,根据凸包的性质容易知道, 凸包上的点要么是样本点, 要么是两个样本点之间连线上的点, 那么, 两个凸包之间距离最短的两个点可以分为三个情况: 1)两边都是样本点, 2)两边都不是样本点, 3)一边是一边不是. 不论对于哪种情况, 当对中垂线(超平面)投影后, 两类点都是线性不可分的(具体可画图或者看p54)
问题2: 是否存在一组参数使SVM训练误差为0?
问题详细描述: 一个使用高斯核( $K(x,z) = e^{-| x- z|^2/\gamma^2})$ 训练的SVM中, 试证明若给定训练集中 不存在两个点在同一个位置 (如果在同一个位置,则这两个点不可分), 则存在一组参数 $\vec \alpha$ 和参数 $\gamma$, 使得SVM的训练误差为0.
结论:存在(可想象成是过拟合)
公式证明:
TODO
以上推导证明可以看出, 对于任意样本的预测结果 $f(\vec x^{(i)})$, 与样本真实标签 $y^{(i)}$ 的距离都小于1 , 因此, 当训练样本为正例时, 由于 $y^{(i)}=1$, 则必有 $f(\vec x^{(i)}) >0 $, 样本被预测为正例. 负例也是同理. 因此所有样本的类别都被正确预测, 训练误差为0.
问题3: 训练误差为0的SVM分类器一定存在吗
问题详细描述: 虽然在问题2中找到了一组参数使得SVM的训练误差为0, 但是这组参数不一定是满足SVM条件的一个解, 在实际训练一个 不加入松弛变量 的SVM模型时, 是否能保证得到的SVM分类器满足训练误差为0呢?
结论: 存在
上一题找到了一组参数使得SVM的分类器训练误差为0, 但是训练误差为0的参数并不一定是SVM模型的一个解, 它还需要满足限制条件 $y^{(i)} f(x^{(i)}) \geq 1$ .
因为SVM模型中解的限制条件为 $y^{(i)} f(x^{(i)}) \geq 1$ (等号为支持向量样本点) , 而上题我们只得到了 $y^{(i)} f(x^{(i)}) > 0$, 因此需要找到另一组参数满足更强的条件
TODO公式推导
根据以上推导过程, 可以找到一个SVM的解, 同时一定使模型分类误差为0
问题4: 加入松弛变量的SVM的训练误差可以为0吗
结论: 不一定能得到训练误差为0的模型(但不是一定不能, 具体看问题)
这是由于加入松弛变量后, 优化目标变成了 $\min_{\vec w, b, x_i^{(i)}} \frac{1}{2} |\vec w |^2_2 + C \sum_{i=1}^{m} x_i^{(i)}$ ,并不再是仅仅使训练误差最小, 同时还会考虑后面的惩罚项, 而当C的取值较小时, 一个带有训练误差, 但参数项较小的点将会称为更优的结果.
2. 逻辑回归
逻辑回归通常用来解决二分类问题(也可以解决多分类问题), 我通过 Logistic 函数将拟合函数的输出值归一化到 (0, 1) 之间, 我们可以将其认为是分类为 1 类的预测概率. Logistic 函数公式(和 Sigmoid 函数形式形式相同)如下:
Logistic(Sigmoid) 函数的求导公式有一个特性: $g’(z) = g(z)(1 - g(z))$.
逻辑回归本质上还是线性回归, 只是在特征到结果的映射中加入了一层函数映射, 即先把特征线性求和, 然后使用函数 $g(z)$ 将连续结果值映射到 (0, 1) 之间, 我们将线性回归模型的表达式代入到 Logistic(Sigmoid) 函数之中, 就得到了逻辑回归的表达式:
问题1: 逻辑回归相比于线性回归, 有何异同?
最本质区别: 逻辑回归处理的是分类问题, 线性回归处理的是回归问题. 在逻辑回归中, 因变量的取值是一个 二元分布(不是二项分布). 而线性回归中实际上求解的是对真实函数关系的一个近似拟合.
实际上, 我们将逻辑回归的公式整理一下, 就可以得到 $log\frac{p}{1-p} = \theta^T x$, 其中, $p = P(y=1 | x)$, 也就是将给定输入 $x$ 预测为正样本的概率. 那也就是说, 逻辑回归实际上也可以看做是对 $log\frac{p}{1-p}$ 的线性回归. 但是在关于逻辑回归的讨论中, 我们均认为 $y$ 是因变量, 而不是 $\frac{p}{1-p}$, 这便引出逻辑回归与线性回归最大的区别, 即 逻辑回归中的因变量是离散的, 而 线性回归中的因变量是连续的. 并且在自变量 $x$ 和超参数 $\theta$ 确定的情况下, 逻辑回归可以看做是广义线性模型在因变量 $y$ 服从二元分布时的一个特殊情况, 而使用最小二乘法求解线性回归时, 我们认为因变量 $y$ 服从正态分布.
当使用逻辑回归处理多标签的分类问题时, 有哪些常见做法, 分别应用于哪些场景, 它们之间又有怎样的关系?
使用哪一种办法处理多分类取决于具体问题的定义.
如果一个样本只对应于一个标签
此时, 我们可以假设每个样本属于不同标签的概率服从于几何分布, 即使用多项逻辑回归(Softmax Regression)来进行分类
上式中, $\theta_1, \theta_2, …, \theta_k \in \mathbb{R}^n$ 为模型的参数, 而 $\frac{1}{\sum^k_{j=1} e^{e^T_j x}}$ 可以看做是对概率的归一化. 当只有两类时, 我们可以利用参数冗余的特点消除掉一个参数, 这样, 就可以得到和逻辑回归一直的公式, 因此, 多项逻辑回归实际上是二分类逻辑回归在多分类标签下的一种扩展.
当存在一个样本属于多个标签的情况
此时, 我们可以训练 $k$ 个二分类的逻辑回归分类器, 第 $i$ 个分类器用以区分每个样本是否可以归为第 $i$ 类, 训练该分类器时, 需要把标签重新整理为”第 $i$ 类标签”与”其他类标签两类”. 这也是 SVM 在处理多分类问题时的方法.
第八章 采样
1. 采样的作用
第九章 前向神经网络
1. 多层感知机与布尔函数
问题1: 多层感知机表示异或逻辑时最少需要几个隐含层(仅考虑二元输入)?
考虑零个隐藏层的情况(等同于逻辑回归):
逻辑回归公式如下:
具体的真值表为:
// TODO表格
接着考虑下面的情况:
//TODO
由上可知, 采用逻辑回归(即不带隐藏层的感知机)无法精确学习出一个输出为异或的模型表示
考虑具有一个隐藏层的情况:
如下图, 假设有两个隐藏单元,
//TODO
问题2: 如果只使用一个隐层, 需要多少隐节点能够实现包含n元输入的任意布尔函数?
//TODO 完善
结论: 在最差情况下, n元布尔函数的析取范式最多包含 $2^{(n-1)}$ 个不可规约的合取范式(异或), 因此对于单隐层的感知机, 需要 $2^{(n-1)}$ 个隐层节点实现
问题3: 考虑多隐层的情况, 实现包含n元输入的任意布尔函数最少需要多少个网络节点和网络层?
// TODO
2. 深度神经网络中的激活函数
为什么要使用激活函数: 在现实世界里, 往往会遇到线性不可分问题(如XOR异或函数), 需要非线性变换对数据的分布进行重新映射. 对于深度神经网络, 我们在每一层线性变换后叠加一个非线性激活函数, 以避免多层网络等效于单层线性函数, 从而获得更强大的学习和拟合能力
问题1: 写出常用激活函数及其导数
激活函数 | 形式 | 导数形式 |
---|---|---|
Sigmoid | $f(x) =\frac{1}{1+e^{-x}}$ | $f’(x) = f(x)(1-f(x))$ |
Tanh | $f(x) = tanh(x)= \frac{e^x-e^{-x}}{e^x+e^{-x}}$ | $f’(x) = 1-(f(z))^2$ |
ReLU | $f(x)=max(0,x)=\begin{cases} 0 & x \leq 0 \\ x & x>0 \end{cases}$ | $f’(x)=\begin{cases} 0 & x\leq 0 \\ 1 & x>0 \end{cases}$ |
Leaky ReLU | $f(x)=max(\alpha x,x)=\begin{cases} \alpha x & x \leq 0 \\ x & x>0 \end{cases} \alpha 通常为0.1$ | $f(x)=max(\alpha x,x)=\begin{cases} \alpha & x \leq 0 \\ 1 & x>0 \end{cases}$ |
Maxout | $f(x) = max(w_1^T x + b_1, w_2^T x + b_2)$ | $f(x) = max(w_1, w_2)$ |
ELU | $f(x) = \begin{cases} x & x \geq 0 \\ \alpha(e^x - 1) & x<0 \end{cases}$ | $f(x) = \begin{cases} 1 & x \geq 0 \\ \alpha e^x & x<0 \end{cases}$ |
更多关于激活函数的讨论见[这里]
问题2: 为什么Sigmoid和Tanh激活函数会导致梯度消失的现象
主要原因是它们在输入值过大或过小时都具有神经元饱和问题, 也就是说当输入很小或很大时, 其导数趋近于0, 又因为神经网络训练时依赖的是梯度下降法, 而根据链式法则的特点, 导数在趋近于0时就会出现梯度消失现象,导致浅层网络权重更新停滞
问题3: ReLU系列的激活函数相对于Sigmoid和Tanh激活函数的有点是什么,它们有什么局限性?
优点:
- 计算上,ReLU只需要一个阈值, 复杂度低
- ReLU在正无穷范围内, 都具有非饱和性, 可以提供相对宽的激活边界, 缓解梯度消失问题
- ReLU的负无穷总是输出0, 通过单侧抑制提供了网络的稀疏表达能力, 经过ReLU激活的神经元输出中会有很多的0, 形成了稀疏矩阵, 通过实验发现, 这样的稀疏矩阵可以提高网络的性能.
局限性: 主要在于其训练过程中会导致神经元死亡.
这是由于ReLU在遇到负梯度时会将其置为0, 且在之后也不被任何数据激活,即流经该神经元的梯度永远为0, 不对任何数据产生相应. 在实际训练中, 如果学习率设置较大, 会导致超过一定比例的神经元不可逆死亡, 进而参数梯度无法更新, 整个训练过程失败
解决方法: Leaky ReLU.
Leaky ReLU的参数 $\alpha$ 通常是一个很小的值, 也就是说可以实现一定程度上的单侧抑制,保证了网络的稀疏表达能力. 同时, 在输入为负时, 保留了部分信息, 避免了神经元死亡问题
但是LeakyReLU的缺点就是参数 $\alpha$ 的选择需要大量实验和先验知识, 这无疑给训练带来的麻烦, 基于此, PReLU选择将 $\alpha$ 作为网络中一个可学习的参数, 进行反向传播训练. 还有一个就是RReLU, 它令 $\alpha$的选择服从一定的分布, 并进行随机采样, 这在一定程度上能起到正则化的作用
3. 多层感知机的反向传播算法
在网络训练中, 前向传播最终产生一个标量损失函数, 反向传播算法(Back Propagation)则将损失函数的信息沿网络层向后传播用以计算梯度, 打到优化网络参数的目的
问题1: 写出多层感知机的平方误差和交叉熵损失函数
问题2: 根据问题1中定义的损失函数, 推导各层参数更新的梯度计算公式
问题3: 平方误差损失函数和交叉熵损失函数分别适合什么场景?
一般来说, 平方损失更适合输出为连续, 并且最后一层不含Sigmoid或者Softmax激活函数的神经网络; 而交叉熵则更适合二分类或多分类的场景.
为何平方损失函数不适合最后一层含有Sigmoid或Softmax激活函数的神经网络?
回顾平方损失函数相对于输出层的导数:
最后一项为激活函数的导数, 当激活函数为Sigmoid或者Softmax时, 其梯度很容易趋于饱和, 使得基于梯度的学习速度非常缓慢. 而交叉熵损失函数相对于输出层的导数是线性的, 因此不会存在学习速度过慢的问题
扩展问题: 多分类为什么选用交叉熵做损失函数, 而不用平方损失?
Golik P, Doetsch P, Ney H. Cross-Entropy vs. Squared Error Training: a Theoretical and Experimental Comparison
https://blog.csdn.net/u014313009/article/details/51043064
https://www.cnblogs.com/daniel-D/p/7931835.html#header-n1247
4. 神经网络训练技巧
避免过拟合的办法: 数据增强, 正则化, 模型融合(其中dropout是模型融合方法中最高效和常用的技巧)
其他更多提升训练效果的还有如: 学习率, 权重衰减系数, dropout比例, 初始化等等
问题1: 神经网络训练时是否可以将全部参数初始化为0?
首先, 在神经网络中, 每一层中的任意神经元都是同构的, 它们拥有相同的输入, 如果再将参数全部初始化为同样的值(如0), 那么输出也就是相同的, 反过来它们的梯度也都是相同的. 那么无论是前向传播还是反向传播的取值都是完全相同的, 那么每一个神经元都是基于input做相同的事情, 这样一来, 不同的神经元根本无法学到不同的特征, 这样就失去网络学习特征的意义了
不仅是初始化为0, 只要是初始化为同一个常数, 就会有这样的问题, 如果是常数, 虽然层与层之间的输出不一致 ,但是每一层内部的所有神经元结果一致, 仍然不是我们希望的那样#
https://zhuanlan.zhihu.com/p/27190255
问题2: 为什么Dropout可以抑制过拟合? 它的工作原理和实现?
Dropout是指在深度网络的训练中, 以一定的概率随机的”临时丢弃”一部分神经元节点. 具体来讲, Dropout作用于每份小批量训练数据, 由于其随机丢弃部分神经元的机制, 相当于每次迭代都在训练不同结构的神经网络, 可以被认为是一种实用的大规模深度神经网络的模型继承算法.
对于包含 $N$ 个神经元节点的网络, 在Dropout的作用下可以看作为 $2^N$ 个模型的集成, 这 $2^N$ 个模型可认为是原始网络的子网络, 它们共享部分权值, 并且拥有相同的网络层数, 而模型整个的参数数目不变, 大大简化了运算.
对于任意神经元来说, 每次训练中都与一组随机挑选的不同的神经元集合共同进行优化, 这个过程会减弱全体神经元之间的联合适应性, 减少过拟合的风险, 增强泛化能力.
工作原理和实现:
应用Dropout包括训练和预测两个阶段, 在训练阶段中, 每个神经元节点需要增加一个概率系数, 在前向传播时, 会以这个概率选择是否丢弃当前的神经元
在测试阶段的前向传播计算时, 每个神经元的参数都会预先乘以概率系数p, 以恢复在训练中该神经元只有p的概率被用于整个神经网络的前向传播计算
问题3: 批量归一化的基本动机与原理是什么? 在卷积网络中如何使用?
动机:
神经网络训练过程的本质是学习数据分布, 如果训练数据与测试数据的分布不同将大大降低网络的繁华能力, 因此需要在训练开始前对所有输入数据进行归一化处理. 然后随着网络训练的进行, 每个隐层的参数变化使得后一层的输入发生变化, 从而每一批训练数据的分布也随之改变, 致使网络在每次迭代中都需要拟合不同的数据分布, 增大训练的复杂度以及过拟合的风险.
原理:
批量归一化方法是针对每一批数据, 在网络的每一层输入之前增加归一化处理(均值为0, 标准差为1), 将所有批数据都强制统一到特定的分布下, 这样可以看作是在每一层输入和上一层输出之间加入了新的计算层, 对数据的分布进行了额外的约束,也就是隐含的增加了正则项, 从而增强模型的泛化能力.
但如果仅仅是这样, 同时也会降低模型的拟合能力, 归一化后的输入分布被强制为0均值和1标准差, 这在一定程度上掩盖了数据本身具有的一些特征, 因此, 为了恢复这些特征, 对归一化后的数据进行线性变换, 引入了两个新的参数 $\gamma$ 和 $\beta$ ,对于每一个卷积核都具有不同的 $\gamma$ 和 $\beta$, 在一定程度了可以保留原始数据中更多的信息, 从而更加有利于优化的过程, 提高模型的泛化能力
使用时需要注意的问题:
在卷积网络中应用时, 需要注意卷积神经网络的参数共享机制, 每一个卷积核的参数在不同的位置的神经元当中是共享的, 因此也应该一起被归一化, 如果有 $f$ 个卷积核, 就对应 $f$ 个特征图和 $f$ 组不同的BN参数.
5. 深度卷积神经网络
卷积神经网络的特点是每层的神经元节点只响应前一层局部区域范围内的神经元(全连接会响应前一层的全部节点). 相较于其他网络模型, 卷积操作的参数共享特性使得需要优化的参数数目大大缩减, 提高了模型的训练效率以及可扩展性.
问题1: 卷积操作的本质特性包括稀疏交互和参数共享, 具体解释这两种特性及其作用
稀疏交互(Sparse Interaction):
对于全连接网络来说, 任意一个神经元都会与之前层的所有神经元产生交互, 形成稠密的连接结构, 而在卷积神经网络中, 卷积核尺寸远远小于输入数据的维度, 卷积核会在输入数据上进行类型窗口滑动似的扫描, 然后依次计算出输出神经元的值, 这样每个输出神经元仅仅与前一层特定局部区域内的神经元存在连接, 这种特性就成为稀疏交互.
稀疏交互的作用:
首先第一个很直观的作用就是大大降低了需要优化的参数数目, 是模型更加精简. 另外, 稀疏交互的实际意义还在于, 对于普通的图像, 文本, 语音等数据, 它们都具有较为明显的局部特征结构, 这样, 我们可以先让神经网络学习局部的特征, 再将局部的特征组合起来形成更复杂和抽象的特征, 进而达到识别目标的目的.
参数共享(Parameter Sharing):
参数共享是指在同一个模型的不同模块中使用相同的参数, 它是卷积运算的固有属性. 在卷积神经网络中, 卷积核中的每一个元素将作用于所有局部输入的特定位置上, 根据参数共享的思想, 我们队每个卷积核, 只需要学习一组参数, 而不需要针对不同的输入对每个局部位置的参数都进行优化, 这大大降低了模型的存储需求.
参数共享的作用:
参数共享的实际意义在于可以使得卷积层具有平移不变性. 对于图片来说, 不管图片中的物体出现在图片的哪个位置, 卷积层由于参数共享的作用, 它都会将这个物体看做是同一类, 也就是说, 对图片上的某个物体先进行卷积, 然后在将输出平移, 与先将图片中的物体平移, 再对平移后的物体进行卷积, 其输出结果是相等的
问题2: 常用的池化操作有哪些? 池化的作用是什么?
常用的池化操作主要针对非重叠区域(即stride的值设置成大于等于pooling窗口的size), 包括均值池化(mean pooling), 最大池化(max pooling)等.
均值池化: 能够抑制由于邻域大小受限造成估计值方差增大的现象, 特点是对背景的保留效果更好
最大池化: 能够抑制网络参数误差造成估计值偏移的现象, 特点是更好地提取纹理信息
其他特殊的池化方式:
- 相邻重叠区域的池化: 采用比窗口宽度更小的步长, 使得窗口在每次滑动时存在重叠区域
- 空间金字塔池化: 主要考虑了多尺度信息的描述, 例如同时计算1×1, 2×2, 4×4 的矩阵池化, 并将结果拼接在一起作为一下网络层的输入
池化的本质是降采样. 除了能显著降低参数数量外, 还能保持对平移, 伸缩, 旋转操作的不变性.
- 平移不变性: 输入为(1,3,5) 和(5,1,3)时, 最大池化都将取值5
- 伸缩(尺度)不变性: 如果原先神经元在最大池化操作之后输出5, 那么经过伸缩(尺度变换)后, 最大池化操作的输出很大概率仍然是5(主要最大值不变)
- 旋转不变性: 对于任意角度的输入, 都会有对应的过滤器与之匹配并最终使神经元的输出引起大的激活, 无论哪个神经元获得了激活, 在经过最大池化操作后, 对于此局部特征, 输出都会具有大的激活
综上, 池化主要有以下作用:
- 降维, 减少模型参数, 防止过拟合, 提高模型泛化能力
- 实现非线性
- 扩大感受野
- 实现平移, 伸缩, 旋转不变性
下面的图与降采样有异曲同工之处, 可以帮助理解(https://www.zhihu.com/question/36686900):
问题3: 卷积神经网络如何用于文本分类任务?
卷积神经网络的核心思想是捕捉局部特征, 对于文本数据来说, 局部特征就是由若干单词组成的滑动窗口, 类似于 N-gram. 下面分别从输入层, 卷积层, 池化层和输出层来说一下如何将卷积神经网络应用于文本数据.
输入层:
输入层通常是一个 $N\times K$ 的矩阵, 其中 $N$ 为单词总数, $K$ 是每个单词对应向量的维度. 每个单词的 $K$ 维向量可以是预先在其他语料库中训练好的, 也可以作为未知的参数由网络训练得到. 这两种方法各有优势.
- 预训练的词嵌入: 可以利用其它语料库得到更多的先验知识
- 作为未知参数训练: 能够更好的抓住与当前任务相关联的特征
卷积层:
在输入的 $N\times K$ 维的矩阵上, 我们定义不同大小的滑动窗口进行卷积操作:
其中 $x_{i:i+h-1}$ 代表由输入矩阵的第 $i$ 行到第 $i+h-1$ 行所组成的一个大小为 $h\times K$ 的滑动窗口, 假设 $h$ 为2, 则每次在 $2\times K$ 的滑动窗口上进行卷积, 并得到 $N-2$ 个结果, 再将这 $N-2$ 个结果拼接起来得到 $N-2$ 维的特征向量, 这样, 通过定义不同的滑动窗口, 就可以提取出不同的特征向量, 构成卷积层的输出.
池化层:
池化层阶段从每个不同的特征向量筛选出 $K’$ (为了与上文的 $K$ 区分, 此处用 $K’$)个最大的特征, 成为 K-MAX 池化(也可以使用平均池化, 将每个特征向量平均), 最终达到的效果是将不同长度的句子通过池化得到一个定长的向量表示(长度为滑动窗口的个数)
输出层:
得到文本的向量表示后, 根据具体任务定义输出层的网络结构, 对于分类任务, 通常是用全连接层和Softmax激活函数输出每个类别的概率.
6. 深度残差网络
问题: ResNet的提出背景和核心理论是什么?
提出背景:
解决或缓解深层的神经网络训练中的梯度消失问题.
ResNet中的一个重要假设:
假设有一个L层的深度神经网络, 如果我们在上面加入一层, 直观来讲得到的L+1层深度神经网络的效果应该至少不会比L层的差. 因为可以简单的设最后一层为前一层的拷贝(相当于恒等映射), 并且其它层参数设置不变.
但是最终实验发现: 层数更深的神经网络反而会具有更大的训练误差, 因此, 作者认为深层网络效果差的原因很大程度上也许不在于过拟合, 而在于梯度消失问题. ( 关于梯度消失问题的讨论可见这里)
解决办法:
根据梯度消失问题的根本原因所在(链式法则连乘), ResNet通过调整网络结构来解决上述问题.
ResNet的结构设计思想为: 既然离输入近的神经网络层较难训练, 那么我们可以将它短接到更靠近输出的层
首先考虑两层神经网络的简单叠加, 在反向传播时,
有关ResNet更详细的讨论可以看这里