斯坦福大学深度学习笔记:神经网络
一、神经网络背景
神经网络的灵感来源于生物体脑结构。研究表明,在听觉、视觉等多种感知能力上都采用了统一的学习机制以完成信息处理过程。这一发现也体现了神经网络算法所追求的美好目标。
该算法在20世纪80年代至90年代期间得到了广泛应用,并于这一时期推动了计算机科学与工程学领域的快速发展。到了20世纪90年代末期,各种新兴的浅层机器学习模型相继涌现并逐渐占据主流地位。其中包括支持向量机(SVM, Support Vector Machines)、提升方法(Boosting)以及最大熵方法(如Logistic Regression等)。然而,在经历了冷寂之后逐渐淡出人们的视野后不久,该技术又因计算能力的提升而重新走俏,并重新受到了广泛关注与应用。
二、神经网络模型表达
神经网络模型与人类神经元特别相似。

逻辑回归的激活函数

最底层被称为输入层(Input Layer)。最上一层被称为输出层(Output Layer)。中间的那一个层次被称为隐藏层(Hidden Layers)。在每个层级中添加一个偏差单元(Bias Unit),其标记为X₀。
下面引入一些标记法来帮助描述模型:

代表第j层的第i个激活单元。

权重矩阵用于描述从当前一层到下一层的数据转换关系。具体而言,在神经网络模型中这一过程可被形象化地理解为信息传递机制的具体体现。该矩阵具备明确的方向性特征:每一元素都反映了特定输入与输出之间的联系强度。其中,
行数由第j层的激活单元数量决定,
而列数则由第j+1层的激活单元数量来确定。
如图所示,
这一参数配置对于模型的学习能力至关重要,
其维度是(假设)4×3,
这表明输入与输出之间的关系具有一定的复杂性。
三、正向传播
对于上面的神经网络我们可以计算第二层的值为:

计算后加上

根据第二层的值计算出第三层的值。
正向传播就是如此,从输入参数到最终结果

四、多类分类
当输出结果数量超过两个时,则应配置多个输出节点。
例如,在设计神经网络时, 若需区分行人, 汽车, 摩托车及卡车四种类型, 则应在输出层设置四个对应的标志位。

神经网络算法的结果可能为这四种之一:

五、神经网络的代价函数(cost function)
我们还记得逻辑回归中的代价函数

实际上只需要认知Cost function所代表的是预测值与真实值之间的差异就可以方便地根据具体问题来定制属于自己的Cost函数表达式在Coursera机器学习课程中将神经网络视为输出层采用逻辑回归模型的分类器则其代价函数如上所示

与逻辑回归对比只是逻辑回归的结果是一个,而是K个逻辑回归单元。
其中 :
L代表一个神经网络中的层数
Sl 代表第l层的处理单元(包括偏见单元)的个数。
SL代表最后一层中处理单元的个数。
K代表我们希望分类的类的个数,与SL相等。
六、反向传播(BACKPROPAGATION )

该算法通过逆序计算最终输出单元的误差,并逐步向前推导各中间单元的误差直至靠近输入层的最后一层。
由于输入变量并未携带初始误差信息。
首先,我们引入 符号 δ ,解释如下:

代表了第 l 层的第 j 个节点的误差。
那么,各层各节点的error计算如下:

其中,

我们获得了所有的误差表达式后,从而能够求取代价函数的导数.当λ设为0时,默认情况下未进行归一化处理

掌握上面式子上下标的具体含义至关重要:l标识目前计算的层数。j既是当前层激活单元的位置索引也是下一层输入变量对应位置的关系。i表示下一个层次上的误差源位置,并受权重矩阵对应行元素的影响。

在求出了之后,我们便可以计算代价函数的偏导数了,计算方法如下:

七、 梯度检查(Gradient Checking)
当我们处理一个较为复杂的模型时,在应用梯度下降算法的过程中可能会出现一些不易察觉的问题;即尽管总成本看似不断下降, 但最终结果可能并非最佳状态; 为了以避免这些问题, 在实现过程中我们会采用一种叫做数值梯度检验的方法(Numerical Gradient Checking)。

Octave中代码如下:
gradApprox = (J(theta + eps) – J(theta - eps)) / (2*eps)
多参数使用公式:

八、随机初始化(Random Initialization)
我们不能将参数初始化为全0或全部相同的数值。当所有初始参数都设置为零时,则计算得到的激活值a1和a2将完全相同。这意味着所有的神经元都会进行同样的计算操作,并因此无法提供多样的特征表示能力——这种现象被称为对称权重(Symmetric ways)。
我们使用随机初始化解决这种问题:
ɛ 的取值:

Θ 的初始化:

