前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >神经网络

神经网络

作者头像
昱良
发布2018-04-08 14:22:12
8690
发布2018-04-08 14:22:12
举报

神经网络

来源:UFLDL教程

本文为神经网络综合系列的第一篇,通过学习,你也将实现多个功能学习/深度学习算法,能看到它们为你工作,并学习如何应用/适应这些想法到新问题上。文章内容是假定您有基本的机器学习基础之上进行的(特别是熟悉的监督学习,逻辑回归,梯度下降的想法),如果你不熟悉这些想法,我们建议你去这里机器学习课程http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course= Machine Learning,并先完成第II,III,IV章(到逻辑回归)。

目录

  1. 关键词
  2. 概述
  3. 神经网络模型

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(.),如下所示。

可以看出,这个单一“神经元”的输入- 输出映射关系其实就是一个逻辑回归(logistic regression)。

虽然本文采用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]可以表示不同的疾病存在与否。)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习算法与Python学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档