神经网络

神经网络

来源: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]可以表示不同的疾病存在与否。)

本文分享自微信公众号 - 机器学习算法与Python学习(guodongwei1991)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-12-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 入门 | 关于神经网络:你需要知道这些

    神经网络(NN)几乎可以在每个领域帮助我们用创造性的方式解决问题。本文将介绍神经网络的相关知识。读后你将对神经网络有个大概了解,它是如何工作的?如何创建神经网络...

    昱良
  • 循环神经网络(RNN)

    前言: 前馈神经网络的输入和输出的维数都是固定的,不能任意改变。当处理序列数据时,前馈神经网络就无能力为了。因为序列数据是变长的。为了使得前馈神经网络能处理变长...

    昱良
  • Torch7模型训练

    Torch7搭建卷积神经网络详细教程已经详细的介绍啦Module模块,这里再次基础上再给出一些上Container、 Transfer Functions La...

    昱良
  • 吴恩达course1-神经网络与深度学习

    以预测房价来举例,在一个x轴表示房子面积,y轴表示房价的坐标图中,标示出6所房屋的信息(如图红×所示),然后通过线性拟合的方式作出一条斜线,因为房价不可能...

    caoqi95
  • 手把手 | 30行JavaScript代码,教你分分钟创建神经网络

    大数据文摘
  • Coursera吴恩达《神经网络与深度学习》课程笔记(5)-- 深层神经网络

    上节课我们主要介绍了浅层神经网络。首先介绍神经网络的基本结构,包括输入层,隐藏层和输出层。然后以简单的2 layer NN为例,详细推导了其正向传播过程和反向传...

    红色石头
  • 推荐一个神经网络原理可视化的平台

    神经网络具有很强的学习能力和自适应自组织能力,而且随着隐含层的数量增大学习能力也将变得更强,因此目前很多场景都使用神经网络,比如深度学习,我们更熟悉的就是阿法狗...

    double
  • 深度学习基础+网络模型

    文中的链接请点击网址:http://yerevann.com/a-guide-to-deep-learning/ 预备知识 ? 你必须有大学数学知识。你可以在深...

    IT派
  • 中文简短的《神经网络与深度学习》极佳入门书-出自量子物理学家

    用户1908973
  • 科学家利用光信息实现神经网络计算

    美国加州大学洛杉矶分校的科学家利用光信息实现了神经网络计算,相较传统电子器件,其处理速度接近光速,但准确性有所降低。

    人工智能快报

扫码关注云+社区

领取腾讯云代金券