当前课程知识点:R语言数据分析 >  下部:博术 >  第12章 既是世间法、自当有分别 >  12.9 人工神经网络(I)

返回《R语言数据分析》慕课在线视频课程列表

12.9 人工神经网络(I)在线视频

下一节:12.10 人工神经网络(II)

返回《R语言数据分析》慕课在线视频列表

12.9 人工神经网络(I)课程教案、知识点、字幕

大家好

欢迎来到《R语言数据分析》课程

今天咱们一起交流一下

人工神经网络的相关内容

还是回到我们这个算法地图

咱们这个课程里面会讲近邻法

决策树

随机森林

朴素贝叶斯

逻辑斯蒂回归

人工神经网络

以及支持向量机等等

这么几种模型

在前面讲完这个逻辑斯蒂回归之后

我们就扩充一下

就开始讲我们的人工神经网络了

也就今天的主题

在讲逻辑斯蒂回归的时候

其实我们可以将它视为一个计算单元

什么意思

它这边其实就是有

X1 X2 有Xn有好多个输入

对这个输入进行加权

然后再加上这个偏置bias之后进行什么求和

这个作为一个输入

一个input

一个I

然后有了这个输入之后怎么样

我对这个进行一个非线性转换

就是一个sigmoid的函数

进行非线性转换

也就这个

1/1+e^-I

然后形成一个输出

也就是说其实我们的逻辑斯蒂回归

它本质上可以视为一个计算单元

有这个X的输入

然后进行一个转换

再输出

这么一个过程

我们今天要讲的这个人工神经网络

它其实是对这个计算单元进行了扩充

什么意思

大家看一下

这就是我们这个图里面

就是我们一个人工神经网络的图

它包含一个输入层

一个输出层

还有两个隐藏层

其实这里面除了输入层之外

其他的所有的节点都是计算节点

其实可以和我们前面的这个

逻辑斯蒂回归里面这个计算节点

可以是一样的

具体什么意思

比如说我们这个第四个节点

它其实是什么

有好多个输入

有好多个X给它进行相连

这边相应的也有相应的W

相应的权值

然后加上这个偏置之后

这就是进行了

线性求和之后怎么样

这里面作为一个input

作为一个input

而它相应的输出是

就是经过这个激活函数

比如说我们可以选用这个Sigmoid

或者其他的

进行转换之后就变成一个

进行一个输出

这里面其实就是一个计算单元

同样这个计算单元

再连到下一层的不同的

计算单元上面去

比如说他连到这个第八个计算单元的话

怎么连的

第八个计算单元

又有好多这个具体的连线输入对不对

有第四个的输出

第五个的输出

第六个的输出

第七个的输出

都作为它的一个输入的部分

就是W48乘以O4

W58乘以O5

这样一直相加

相加再加上W0作为

它这个第八个单元的input

然后这个input之后也经过一个激活函数

经过一个转换

变成output

最终怎么样

最终连到我这个输出层来

也有一个output也就我们预测的结果

这个网络其实什么

其实就是一个多个计算节点所组成的一个网络

当然我们可以将它视为一个

超级复杂的复合函数

因为我们的每个计算节点其实都是一个函数

都是一个函数

对不对

都是一个函数

然后这个所谓的不同的层级的话

其实也就是函数在不断的嵌套

不断地嵌套

所以我们用通过这边网络的方式

把它组合起来而已

我们所谓人工神经网络

其实要学习到了就是这么一个网

就这么一个网络

那其实我们可以这样考虑这个问题

一旦我们这个网络的结构确定了

比如说它究竟有几个层级

每一个层上面有多少个节点

并且它相应的激活函数确定了

那其实我这个网络要学习的话

他学习到了什么

学到就是这里面不同的W对吧

当我在W不一样的时候

那我最后网络的输出是不一样的

当这个W不一样的时候

后面的输出的结果

和实际结果的偏差是不一样的

那好

其实我所谓的训练这个网络

就是把这么多的W

这么多的权值

怎么样

给学习到

给拟合到

这就是我们所谓的机器学习

在人工神经网络这个模型里面

一个最主要的任务

我要学习到这个不同的W

我们说了它其实是一个超级复杂的函数

就是一个函数的过程

这个f

y=f(X)这个f是相对比较复杂一点

但它再怎么复杂

他其实要训练出这个W的话

其实和我们前面这个逻辑斯蒂回归

可以采用同样的思路是什么

我要么通过

这个所谓的偏差最小这么一个策略

来不断地通过类似于这种梯度下降的方法

不断地迭代 不断地寻优

也是先随机选若干个

赋若干个W

给每一个连线都赋上相应W

然后怎么样

我朝着梯度下降的最快的方向

梯度是我们这个上升最快的方向

然后反方向

然后下降最快

直到找到

我这个整个偏差最小

那相应的一个W的组合

这也就完成了我们所谓

神经网络的一个训练的过程

咱们来看一看具体的这个学习算法

我们学习的策略

可以是这个最小化误差的平方和

我这个target和我这个output

和我这个就是实际的值

也相当于这个y的取值

实际这个target

和我这个网络输出的值

它的偏差要

要尽量小

要尽量小

那好

我们学习函数

我们的学习过程

假如我们采用这个梯度下降方法的话

可以和我前面讲的逻辑斯蒂回归一致

也可以有这么一个

就是不同的W

和我这个偏差函数

这个代价函数

所组成一个像山峰一样的

这么一个曲面

我真正要做的事情是

我就是要找到这个谷底

因为这个谷底是什么

是我偏差最小的

也就符合我这个学习策略了

但具体过程也是一样

它还是 千里之行 始于随机

我刚开始先随便找一点

然后我就像这个瞎子爬山一样

到这个应该是属于瞎子下山了

怎么办

我先随机找一点之后

找到一个下降最快的方向

最快的方向一直走一直走一直走

直到走到谷底

走到谷底之后

其实也就实现了我这个

我这W的一个估算

实现这个W估算之后

其实我整个这个网络也就训练出来了

也就可以用作预测

可以用于做分类

这是一个总体的思路

当然和我们前面讲的逻辑斯蒂回归是一致的

这里面其实要找这个

有一个随机的点之后

有个随机起点之后

下一步要走的话

其实这个方向是

下降最快的方向就是梯度的反方向

所以它关键还是要求这个梯度

这里面我们引一个引入一个方法

叫什么

叫误差反向传播方法

咱们来看一看具体的思路

就是误差它的最陡的方向就是梯度

那好 其实真正梯度下降方法

这个训练过程其实就是

不断的迭代这个W

不断的更新这个W

直接往下走一直往下走一直往下走

直到走到谷底

比如说两次迭代

这个差已经小于某个阈值了

就相当于没什么变化了

我就不用再走了

或者说我的迭代次数

已经超过我事先预定设定的最大的次数

我也不再走

在这个做这个权值

或者在计算这个梯度的时候

用到一个非常重要的概念是

就是误差反向传播

当然这概念听起来比较高大上

或者是听起来比较陌生比较抽象

但其实它

本质上就是链式法则

我们看看如何来求这个相应的这个梯度

也就是说看一看这个误差反向传播

它一个具体的原理

还是以咱们刚才这个网络为例

比如说我现在要对这个W8,12进行更新的话

也就是连接到这个输出层的相应的这个线上

它这上面的权值要进行迭代进行更新的话

怎么做

毫无疑问

我这个权值更新的量是什么

就是我这个学习率乘以后面这个

这个方向

这个梯度对不对

乘以这个梯度

乘以我这个偏导数对不对

就乘以这个偏导数

那好 因为它是那个反方向下走往下走

所以它加一个负号

这个时候其实是误差的话

它毫无疑问既有这个O12和这个T12的偏差

也有O13和T13的偏差

大家注意了

无论我们这个W是多少

我们在哪个层级

求这个W

求梯度的时候

求它的偏导的时候

其实都要看

我都要视最初的这个网

最终这个网络的输出

和我实际的Y的一个取值的偏差

而不是说我某个计算单元上面

它的output的和它的什么实际取值的偏差

实际上在我们这个某个单元上面

它只有output的

并没有它实际的取值

我们正在看这个网络训练的时候

就要看最终这一层这个output和target

这个目标这个取值

也就说实际取值它就你看他偏差多少

也就说我们可以把这个E

用后面这个1/2的T12减O12括符平方

然后T13减O13

括符平方对吧

毫无疑问

这一部分其实是跟

我们这个W8,12没什么关系的

他并不是W8,12这个相应函数

对不对

所以这部分我们可以直接剔除掉它

只剩下前面这一部分

前面这一部分的话

毫无疑问我们要对这个

对这个函数要对这个w8,12求偏导的话

怎么求

还是像剥洋葱一样

从外往里剥

对不对

从外往里剥

先看这外面这一层

二分之一的T12减O12括符平方

这一部分求偏导的话就是二乘以这一部分

对吧

就T12减O12 是不是 就这部分

然后再进一步的T12减O12再对

W8,12求偏导

这个时候毫无疑问

T12属于常量

那不用管它

那个负的O12

加一个负号

然后进一步的

对 O12

对 W8,12求偏导

那这个问题我们又往下传递了

往下传递了

这个O12对这个W8,12怎么求偏导

中间再加一层这个洋葱

就是O12先对I12求偏导

I12在对W8,12求偏导

毫无疑问这个O12对I12这个求偏导的话

又用到我们这个Sigmoid函数本身的

偏导这个性质

是什么

我要求这个偏导对它进行偏导的话

其实就是

因为这个O12其实就是做了一个

对I12进行了一个挤压

1加e的-I分之一

他的求偏导的话因为

就是O12*(1-O12)

这么一部分

那后面这个更加容易求了

这个I12对这个W8,12求偏导的话

因为我们说了

这个第12个单元的input包含好多部分

W0加上W8,12乘以O8

W9,12乘以O9

类似这样的

那毫无疑问对这个w8,12求偏导的话

它只剩下这个O8是不是

剩下O8

我们将那个位置稍微调换一下

因为我们是对这个W8,12

计算它的权值的增量

所以我们

它是λ乘以O8

在我们将前面这一部分

就定义为δ12

δ12放在这个位置

δ12

其实我这里面这个点

这条线是连接

连接第8个和第12个的这么一个连线

它上面的那个权重

所以它这条线的话8,12

这个编号为8,12的这个权值应该怎么更新

就是O8乘以δ12

实际上后面的我们所有的连线

都是这么一个更新的规则

比如说要W4,8他要更新什么

就是O4乘以δ8

δ8

对不对

就这么一个过程

咱们再看看

这个是属于那个连接到最后面这个输出层的

这个权值更新的过程

咱们再往前看看

这个W4,8是如何更新

这个毫无疑问它的权值更新过程也是一样

也是学习率乘以后面这个偏导

这个偏导同样也是

也是这个E的话

也是要计算这个T12减O12

在T13减O13

但这个时候我们一看

W4,8的话它既跟

既对这个O12有影响也对O13有影响

所以这两部分里面都要进行一个分别进行计算

我们也采用这个剥洋葱的方法

从外往里剥

就是我们在求这个偏导的时候就从外往里剥

这部分我们直接求出来

它的偏导是两倍的T12减O12

再T12-O12对W4,8求偏导

前面这部分常量去掉

然后负号移出来

然后改成什么

就进一步的变成了这个O12对W4,8求偏导

下面的这个O13也是一样的

咱们再看看

O12对W4,8求偏导的话

我们需要在里面这个洋葱在一层层往里剥了

再往里剥

什么意思

我O12要对W4,8求偏导的话

我怎么传递的

O12先对I12进行偏导

求偏导

取完偏导之后

I12再对O8求偏导

O8在对I8求偏导

I8在对W4,8求偏导

大家看一下

这里面其实这个过程看起来比较复杂

但其实它有一个最基本的规则是

都是O-I-O-I-O-I

注意到没有

最后都是I对W4,8求偏导

这么一个过程

我们可以进一步再往下看

这个O12对I12求偏导

再乘以T12减O12

毫无疑问这是多少

δ12

这前面我们定义了

然后这个I12对O8求偏导

I12就这个

12对O8求偏导

我们也刚才看了

就是这个W8,12对不对

W8,12

然后O8对I8求偏导

这个O8对这个I8求偏导

这个I8就是我们刚才这里面所有的

W

W0加上这个W4,8乘以O4

W5,8乘以O5

W6,8乘O6等等

它对I求偏导的时候

这个也是一样

也是这个Sigmoid函数本身的性质

就是多少

O8 * (1 - O8)

O8 * (1 - O8)

再往下的话

这个I8对这个W4,8求偏导

这个就好办了

I8对W4,8求偏导的话

这个input这个input对不对

因为这个input的I8的话

就是刚才我们说了就是这个几个的线性求和

那毫无疑问那剩下多少

只剩下这个O4了

我们再用不同的颜色做了一个对应关系

方便大家看一下

用不同颜色做的对应

那这个时候我们同样还是什么

还是把它继续往下合并

这个时候我们将这个

这一部分将这一部分

我们看一下这一部分

我们重新定义一下

用这个颜色表达

这部分定义为δ8

我们看一下

将这个O4往前移

将这一部分定义为 δ8

我们可以看得出来一个最基本的规律了

这个δ8是怎么得到的

它其实基于这个δ12和δ13

δ8是基于这个δ12和δ13什么意思呢

就我这一层

它的这个δ这个值

这个δ值它是基于下一层

它所联系到的δ12 和δ13的一个取值

然后分别乘以相应的这个系数

注意到没有

分别乘相应的系数

这一条原理其实再往前走的话

比如说δ4

它同样是多少

跟这个δ8 δ9 δ10 δ11有关系

怎么样

分别乘以它相应的系数

当然前面还乘以多少

就是

对这个δ8来讲是乘以这个

O8 * (1 - O8)

然后对这个δ4来讲就多少

就是O4 * (1 - O4)

也就是说我们这个δ的时候

它其实除了最

输出层的话

再往前的每一层这个δ都怎么样

都要基于下一层的

下一层相应的δ才能算得出来

对不对

所以我们整个这个计算过程应该是

反着来求的

先求后面的最输出的层

然后再往前逐层往前求

这个过程其实就所谓误差的反向传播

咱们来稍微总结一下

稍微总结一下这个过程

所谓权值更新公式就是

在原来上一轮基础之上有一个权值的增量

所有权值的增量我们发现了

W第i个单元和第j个计算单元

进行连接的时候

连接第i个和第j个计算单元的

这个W的增量是多少

就这个学习率

乘以这个Oi

注意是Oi前面这个

再乘以δj后面这个

这就是我们权值的一个增量的公式

然后这个δ的话我们刚才讲了

它是这么一个

每一个δ

它和下一层的K个元素相连的话

K个计算单元相连的话

那好

他就δk基于后面的k个δ

分别什么

计算它相应的相应的权值

乘以相应的那个权值

然后前面再乘一个Oj(1-Oj)

这就是我们整个权值更新的过程

我们看完这个权值更新过程之后

其实基本上也就将这个误差反向传播

原理里面最核心的部分讲清楚了

其实他什么

本质上用到数学知识都是链式法则

就是剥洋葱

一层一层往里剥

整个这个过程其实就是O-I-O-I的过程

以上就是我们这个BP神经网络

这么一种最基本的原理

就是误差反向传播一个最基本原理

咱们看看通过算法语言怎么实现它

怎么描述它的

这个算法里面

它的输入是有这个训练元组

以及相应的X相应的y对吧

还有一个学习率

就是它的那个步长

另外要设定我整个这个网络的结构

它包含多少个节点

有多少层

每一层有多少个节点

包括每个节点他的激活函数是什么

就这个神经网络结构需要设定

输出是训练后它的那个网络

所谓训练后形成的网络

其实就是将相应的W进行相应的一个优选了

哪些W是最好的

咱们看看具体的步骤

首先是初始化

这个网络里面所有的权值和偏置

就是这个W的随机赋值

这里面其实也没有一个理论上一个绝对的一个

好的方法

就是先随机赋一个值

然后进行迭代

就是我先在这个误差这个山上面先找一个点

然后再通过迭代不断走不断走走到谷底

咱们看具体是如何迭代的

它一般来讲分成两个部分

分成两个部分

首先是向前传播输入

这什么意思

比如对这个输入层来讲

这个输入层其实X本身

因为咱们这个网络里面

只有输入层不是计算单元

其他的每一个节点都是计算单元

输入层的话

它这个output就是它的input

就是他input

那对这个隐藏层和输出层来讲它怎么样

它有一个input一个output

input就是将这个前面的和它相连的

前一层的所有的output

都作为进行一个求和加上偏置

然后output

output就是经过一个激活函数

比如咱们这选用的是这个Sigmoid函数

就是1加e的负I分之一

这就是向前传播一个输入的过程

从前往后逐层传

逐层传

因为你们后面每一层的计算节点的input

都是基于前一层的output的

所以是从前往后的一个过程

然后第二个阶段是什么

向后传播

或者说反向传播这个误差

这个时候我先算输出层的每个单元的这个δ

这个δ

它就是O

比如说对于第j个计算单元来讲就是

就是Oj * (1 - Oj) * (Tj - Oj)

这就是那个输出层的计算单元这个δ

然后我对于输出层

再往前的每一个隐藏层都怎么算

假如我这个编号也是j的话

它也是Oj乘(1-Oj)然后再乘以

后面的我们刚才讲了

它基于后面它相连的下一层的每一个δ

再乘以相应的权值系数

我这边是第j个那边是第k的话

那就Wj,k再乘相应δ

这个时候就相当于所有的从后往前

前面每一层的δ都要基于

基于后面它相连这个计算单元的那个δ的取值

所以它应该是从后往前的一个过程

从后往前的过程

这个计算完之后

我来进行权值的更新

我们权值更新说了

比如说对于这个

连接Di和Dj个计算单元的这个W来讲

它权值更新多少就λ

这个学习率乘以Oi乘以δj

连接第i个和第j个Ij

大家注意这个序号

Oi乘以δj

当然这个偏置

其实也可以通过相应的方法来求

也是进行更新

学习率乘以这个δ

δj

其实我们这边讲

是将这个output的视为1的话

视为1的话

其实和前面这个公式形式上是一致的

然后如此每一轮一轮一轮进行迭代

就是从前往后

从后往前

这么两个阶段

不断进行迭代

直到满足这个终止条件

我们说这个梯度下降方法终止条件是

比如有两可选的

一个是每一次进行迭代完之后

这两次

这两次它已经没有什么偏差了

就发现已经走不动了

这个时候就不再走了

还有一种情况是

就我已经走了我太多次数了

迭代次数已经达到我预先设定的最大的阈值

这时候相当于我走了好多好多步

也不再走

前面我们讲了一下神经网络它的最基本的概念

以及它一个学习的过程

通过这个误差反向传播

如何来训练这个网络

训练出相应的W出来

具体在R里面如何实现

咱们下一次课再讲

本次课到此结束

谢谢大家

R语言数据分析课程列表:

上部:问道

-第1章 气象万千、数以等观

--第1章 气象万千、数以等观

--第1章 作业

-第2章 所谓学习、归类而已

--2.1 所谓学习、归类而已(I)

--2.2 所谓学习、归类而已(II)

--2.3 所谓学习、归类而已(III)

--2.4 所谓学习、归类而已(IV)

--第2章 作业

-第3章 格言联璧话学习

--第3章 格言联璧话学习

--第3章 作业

-第4章 源于数学、归于工程

--第4章 源于数学、归于工程

--第4章 作业

-讨论题

--如何发挥人工智能的头雁效应

中部:执具

-第5章 工欲善其事、必先利其器

--第5章 工欲善其事、必先利其器

--第5章 作业

-第6章 基础编程——用别人的包和函数讲述自己的故事

--6.1 编程环境

--6.2Mini案例

--6.3 站在巨人的肩膀上

--6.4 控制流

--6.5 函数(I)

--6.6 函数(II)

--第6章 作业

-第7章 数据对象——面向数据对象学习R语言

--7.1 向量与因子(I)

--7.2 向量与因子(II)

--7.3 矩阵与数组(I)

--7.4 矩阵与数组(II)

--7.5 列表与数据框(I)

--7.6 列表与数据框(II)

--第7章 作业

-第8章 人人都爱tidyverse

--第8章 人人都爱tidyverse

--第8章 作业

-第9章 最美不过数据框

--第9章 最美不过数据框

--第9章 作业

下部:博术

-第10章 观数以形

--10.1 一维数据空间(I)

--10.2 一维数据空间(II)

--10.3 二维数据空间

--10.4 高维数据空间

--第10章 作业

-第11章 相随相伴、谓之关联

--11.1 导引

--11.2 关联规则(I)

--11.3 关联规则(II)

--11.4 关联规则(III)

--第11章 作业

-第12章 既是世间法、自当有分别

--12.1 导引

--12.2 近邻法(I)

--12.3 近邻法(II)

--12.4 决策树(I)

--12.5 决策树(II)

--12.6 随机森林

--12.7 朴素贝叶斯

--12.8 逻辑斯蒂回归

--12.9 人工神经网络(I)

--12.10 人工神经网络(II)

--12.11 支持向量机

--第12章 作业

-第13章 方以类聚、物以群分

--13.1 导引

--13.2 划分方法

--13.3 层次方法

--第13章 作业

-第14章 庐山烟雨浙江潮

--第14章 庐山烟雨浙江潮

--第14章 作业

12.9 人工神经网络(I)笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。