本文为神经网络综合系列的第一篇,通过学习,你也将实现多个功能学习/深度学习算法,能看到它们为你工作,并学习如何应用/适应这些想法到新问题上。文章内容是假定您有基本的机器学习基础之上进行的(特别是熟悉的监督学习,逻辑回归,梯度下降的想法)
1. 关键词
neural networks 神经网络
activation function 激活函数
hyperbolic tangent 双曲正切函数
bias units 偏置项
activation 激活值
forward propagation 前向传播
feedforward neural network 前馈神经网络
2. 概述
以监督学习为例,假设我们有训练样本集(x[^i], y[^i]),那么神经网络算法能够提供一种复杂且非线性的假设模型h[W,b](x),他具有参数W和b,可以以此参数来拟合我们的数据。
为了描述神经网络,我们先从最简单的神经网络讲起,这个神经网络仅由一个“神经元”构成,以下即是这个“神经元”的图示:
这个“神经元”是一个以x[1], x[2], x[3]以及截距偏置项+1为输入值的运算单元,输出为:
其中函数:f:R----> R^称之为“激活函数”。本文中我选择的是sigmoid作为激活函数f(.),如下所示。
可以看出,这个单一“神经元”的输入- 输出映射关系其实就是一个逻辑回归(logisticregression)。
虽然本文采用sigmoid函数,但你也可以选择双曲正切函数(tanh),如下所示。
一下分别是sigmoid 和tanh函数的图像。
注意,tanh函数是sigmoid函数的一种变体,取值范围为[-1, 1]。
有一个等式我们以后会经常用到:
若f(z) = 1/(1 + exp(-z))
则f(z)导数为:f(z) * (1- f(z))
若f(z) = tanh(z)
则f(z)导数为1 - (f(z))^2
3. 神经网络模型
所谓神经网络就是将许多个单一“神经元”联结在一起,这样,一个“神经元”的输出就可以是另一个“神经元”的输入。例如,下图就是一个简单的神经网络:
我们使用圆圈来表示神经网络的输入,标上“+1 ”的圆圈被称为偏置节点,也就是截距项。神经网络最左边的一层叫做输入层,最右的一层叫做输出层(本例中,输出层只有一个节点)。中间所有节点组成的一层叫做隐藏层,因为我们不能在训练样本集中观测到它们的值。同时可以看到,以上神经网络的例子中有3个输入单元(偏置单元不计在内),3个隐藏单元及一个输出单元。
使用nl表示网络的层数,假设nl = 3,将第l层标记为L[l], 所以L[1]是输入层,L[2].....L[nl-1]是隐藏层,L[nl]是输出层。参数为(W, b) = {W[^1], b[^1], W[^2], b[^2]},其中W[^l][ij]是l层第j个单元与第l+1层单元之间的连接参数, b[^l][i]是第l+1层第i个单元的偏置项。因此在本例中,W[^1] <<R[^(3x3)],即3x3的矩阵,W[^2] << R[^(1x3)]。同时,使用s[l]表示第l层的节点数。
使用a[^l][i]表示第l层第i个单元的激活值,当l = 1 时, a[^1][i] = x[i],也就是第i个输入值。对于给定采纳数集合W,b,我们的神经网络就乐意按照函数h[W,b](x)来计算输出结果。具体的推导过程如下所示:
我们使用Z[^l][i]表示第l层第i个单元输入加权和(包括偏置单元),比如。
这样我们就可以得到一种更简洁的表示法。这里我们将激活函数f(.) 扩展为用向量(分量的形式)来表示,即
那么,上面的等式可以更简洁地表示为:
我们将上面的计算步骤叫作前向传播。回想一下,之前我们用a[^1] = x 表示输入层的激活值,那么给定第l层的激活值 后,第l+1 层的激活值a[^(l+1)] 就可以按照下面步骤计算得到:
将参数矩阵化,使用矩阵-向量运算方式,我们就可以利用线性代数的优势对神经网络进行快速求解。
目前为止,我们讨论了一种神经网络,我们也可以构建另一种结构的神经网络(这里结构指的是神经元之间的联接模式),也就是包含多个隐藏层的神经网络。最常见的一个例子是nl 层的神经网络,第1 层是输入层,第nl 层是输出层,中间的每个层l 与层l+1 紧密相联。这种模式下,要计算神经网络的输出结果,我们可以按照之前描述的等式,按部就班,进行前向传播,逐一计算第L2 层的所有激活值,然后是第L3 层的激活值,以此类推,直到第L[nl] 层。这是一个前馈神经网络的例子,因为这种联接图没有闭环或回路。
神经网络也可以有多个输出单元。比如,下面的神经网络有两层隐藏层: L2及L3 ,输出层L4有两个输出单元。
要求解这样的神经网络,需要样本集 (x[^i], y[^i]),其中y[^i] << R[^2] 。如果你想预测的输出是多个的,那这种神经网络很适用。(比如,在医疗诊断应用中,患者的体征指标就可以作为向量的输入值,而不同的输出值 y[i]可以表示不同的疾病存在与否。)
觉得看完文章有所收获的朋友可以点赞+关注哦,观看主页有惊喜~