本文为神经网络综合系列的第一篇,经过学习,你也将实现多个功能学习/深度学习算法,能看到它们为你工做,并学习如何应用/适应这些想法到新问题上。文章内容是假定您有基本的机器学习基础之上进行的(特别是熟悉的监督学习,逻辑回归,梯度降低的想法)算法
1. 关键词网络
neural networks 神经网络机器学习
activation function 激活函数函数
hyperbolic tangent 双曲正切函数学习
bias units 偏置项深度学习
activation 激活值it
forward propagation 前向传播io
feedforward neural network 前馈神经网络function
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]能够表示不一样的疾病存在与否。)
以为看完文章有所收获的朋友能够点赞+关注哦,观看主页有惊喜~