1.基本概念
1.1隐藏层:
神经网络中输入与输出层之间的中间层,训练数据并没有给出这些层中的每一层所需的输出,所以叫隐藏层。
1.2模型的宽度:
网络中的每个隐藏层通常都是向量值的。这些隐藏层的维数决定了模型的宽度。 向量的每个元素都可以被视为起到类似一个神经元的作用。 除了将层想象成向量到向量的单个函数,我们也可以把层想象成由许多并行操作的单元组成,每个单元表示一个向量到标量的函数。 每个单元在某种意义上类似一个神经元,它接收的输入来源于许多其他的单元,并计算它自己的激活值。
1.3激活函数:
用于计算隐藏层值的函数,常见的有整流线性单元(分段函数max{0,f()})。
1.4常见的代价函数:
交叉熵(负的最大似然函数)
2.输出单元
2.1 线性单元
线性输出层经常被用来产生条件高斯分布的均值:
p(y∣x)=N(y;y^,I).
2.2 logistic sigmoid函数
sigmoid单元可用于Bernoulli输出分布,许多任务需要预测二值型变量y的值。 具有两个类的分类问题可以归结为这种形式。sigmoid输出单元定义为:
2.3 softmax单元
任何时候当我们想要表示一个具有
softmax函数的形式为:
3.隐藏单元
3.1整流线性单元
整流线性单元使用激活函数g(z)=max(0,z)
扩展:
a. 当zi<0时使用一个非零的斜率αi:hi=g(z,α)i=max(0,zi)+αimin(0,zi)。
b. 绝对值整流固定αi=−1来得到g(z)=|z|。 它用于图像中的对象识别{cite?},其中寻找在输入照明极性反转下不变的特征是有意义的。
c. 渗漏整流线性单元将αi固定成一个类似0.01的小值,参数化整流线性单元(PReLU)将αi作为学习的参数{cite?}。
d. maxout单元将z划分为每组具有
3.2 logistic sigmoid与双曲正切函数
在引入整流线性单元之前,大多数神经网络使用logistic sigmoid激活函数
g(z)=σ(z)
或者是双曲正切激活函数
g(z)=tanh(z)
这些激活函数紧密相关,因为tanh(z)=2σ(2z)−1。
与分段线性单元不同,sigmoid单元在其大部分定义域内都饱和——当z取绝对值很大的正值时,它们饱和到一个高值,当
当必须要使用sigmoid激活函数时,双曲正切激活函数通常要比logistic sigmoid函数表现更好。 在
4.架构设计
万能近似定理:一个前馈神经网络如果具有线性输出层和至少一层具有任何一种”挤压”性质的激活函数(例如logistic sigmoid激活函数)的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的Borel可测函数。 前馈网络的导数也可以任意好地来近似函数的导数。
在神经网络框架中,更深的神经网络远远比大模型尺寸的单层网络好得多,这说明神经网络中应该用许多简单的函数组成,而尽量不用复杂庞大的单模型。
5.反向传播
5.1链式法则
从这里我们看到,变量x的梯度可以通过~Jacobian矩阵
5.2反向传播步骤:
5.3符号到符号的导数
代数表达式和计算图都对符号或不具有特定值的变量进行操作。 这些代数或者基于图的表达式被称为符号表示。 当我们实际使用或者训练神经网络时,我们必须给这些符号赋特定的值。 我们用一个特定的数值来替代网络的符号输入x,例如
一些反向传播的方法采用计算图和一组用于图的输入的数值,然后返回在这些输入值处梯度的一组数值。 我们将这种方法称为符号到数值的微分。 这种方法用在诸如Torch和Caffe之类的库中。
另一种方法是采用计算图以及添加一些额外的节点到计算图中,这些额外的节点提供了我们所需导数的符号描述。 这是Theano和TensorFlow所采用的方法。这种方法的主要优点是导数可以使用与原始表达式相同的语言来描述。 因为导数只是另外一张计算图,我们可以再次运行反向传播,对导数再进行求导就能得到更高阶的导数。
基于符号到符号的方法的描述包含了符号到数值的方法。 符号到数值的方法可以理解为执行了与符号到符号的方法中构建图的过程中完全相同的计算。 关键的区别是符号到数值的方法不会显示出计算图。