博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
神经网络——构建非线性映射
阅读量:5966 次
发布时间:2019-06-19

本文共 2209 字,大约阅读时间需要 7 分钟。

hot3.png

        本文为神经网络综合系列的第一篇,通过学习,你也将实现多个功能学习/深度学习算法,能看到它们为你工作,并学习如何应用/适应这些想法到新问题上。文章内容是假定您有基本的机器学习基础之上进行的(特别是熟悉的监督学习,逻辑回归,梯度下降的想法)

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,可以以此参数来拟合我们的数据。

为了描述神经网络,我们先从最简单的神经网络讲起,这个神经网络仅由一个“神经元”构成,以下即是这个“神经元”的图示:

1240

这个“神经元”是一个以x[1], x[2], x[3]以及截距偏置项+1为输入值的运算单元,输出为:

1240

其中函数:f:R----> R^称之为“激活函数”。本文中我选择的是sigmoid作为激活函数f(.),如下所示。

1240

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

虽然本文采用sigmoid函数,但你也可以选择双曲正切函数(tanh),如下所示。

1240

一下分别是sigmoid 和tanh函数的图像。

1240

1240

注意,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. 神经网络模型

所谓神经网络就是将许多个单一“神经元”联结在一起,这样,一个“神经元”的输出就可以是另一个“神经元”的输入。例如,下图就是一个简单的神经网络:

1240

我们使用圆圈来表示神经网络的输入,标上“+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)来计算输出结果。具体的推导过程如下所示:

1240

我们使用Z[^l][i]表示第l层第i个单元输入加权和(包括偏置单元),比如。

1240

这样我们就可以得到一种更简洁的表示法。这里我们将激活函数f(.) 扩展为用向量(分量的形式)来表示,即

1240

那么,上面的等式可以更简洁地表示为:

1240

我们将上面的计算步骤叫作前向传播。回想一下,之前我们用a[^1] = x 表示输入层的激活值,那么给定第l层的激活值 后,第l+1 层的激活值a[^(l+1)] 就可以按照下面步骤计算得到:

1240

将参数矩阵化,使用矩阵-向量运算方式,我们就可以利用线性代数的优势对神经网络进行快速求解。

目前为止,我们讨论了一种神经网络,我们也可以构建另一种结构的神经网络(这里结构指的是神经元之间的联接模式),也就是包含多个隐藏层的神经网络。最常见的一个例子是nl 层的神经网络,第1 层是输入层,第nl 层是输出层,中间的每个层l 与层l+1 紧密相联。这种模式下,要计算神经网络的输出结果,我们可以按照之前描述的等式,按部就班,进行前向传播,逐一计算第L2 层的所有激活值,然后是第L3 层的激活值,以此类推,直到第L[nl] 层。这是一个前馈神经网络的例子,因为这种联接图没有闭环或回路。

神经网络也可以有多个输出单元。比如,下面的神经网络有两层隐藏层: L2及L3 ,输出层L4有两个输出单元。

1240

要求解这样的神经网络,需要样本集 (x[^i], y[^i]),其中y[^i] << R[^2] 。如果你想预测的输出是多个的,那这种神经网络很适用。(比如,在医疗诊断应用中,患者的体征指标就可以作为向量的输入值,而不同的输出值 y[i]可以表示不同的疾病存在与否。)

觉得看完文章有所收获的朋友可以点赞+关注哦,观看主页有惊喜~

转载于:https://my.oschina.net/u/3994209/blog/2996451

你可能感兴趣的文章
[Linux][Redis][05]Benchmark
查看>>
第一次作业-准备篇
查看>>
HDU1848 Fibonacci again and again
查看>>
HTML思维导图
查看>>
git改密码出现授权问题
查看>>
Hadoop IO 特性详解(2)
查看>>
ORA-02266: 表中的唯一/主键被启用的外键引用
查看>>
Django的POST请求时因为开启防止csrf,报403错误,及四种解决方法
查看>>
Apache common-fileupload用户指南
查看>>
day-6 and day-7:面向对象
查看>>
IE维护(IEM)策略不再适用于IE10及后续IE版本
查看>>
Java7中的ForkJoin并发框架初探(下)—— ForkJoin的应用
查看>>
java中的重量级与轻量级概念
查看>>
Linux设备驱动工程师之路——硬件访问及混杂设备LED驱动
查看>>
进程和线程<一>
查看>>
远程算数程序——版本v1.0
查看>>
Mysql常见四种索引的使用
查看>>
说说Android桌面(Launcher应用)背后的故事(一)——揭开她神秘的面纱
查看>>
第一篇:zc706 开箱及开发环境搭建
查看>>
python-冒泡排序
查看>>