IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 李宏毅机器学习13、14-深度学习和反向传播 -> 正文阅读

[人工智能]李宏毅机器学习13、14-深度学习和反向传播

李宏毅机器学习13、14-深度学习和反向传播

深度学习的步骤

  • Step1:神经网络(Neural network)
  • Step2:模型评估(Goodness of function)
  • Step3:选择最优函数(Pick best function)

Step1:神经网络(Neural network)

神经元之间的连接方式

全连接前馈神经网络

神经网络可以有很多不同的连接方式,会产生不同的结构(structure)。全连接前馈神经网络是其中的一种。

全链接和前馈的理解

前馈(feedforward)也可以称为前向,从信号流向来理解就是输入信号进入网络后,信号流动是单向的,即信号从前一层流向后一层,一直到输出层,其中任意两层之间的连接并没有反馈(feedback),亦即信号没有从后一层又返回到前一层。

  • 全链接Fully Connect:layer1与layer2之间两两都有连接;
  • 前馈Feedforward:传递的方向是由前往后传。
全连接前馈神经网络结构
  • 输入层(Input Layer):1层
  • 隐藏层(Hidden Layer):N层
  • 输出层(Output Layer):1层 img

深度Deep

Deep = Many hidden layer。(留下一个疑问为什么deep好(相对少的神经元多层)而不是fat(单层超多神经元)好?)

矩阵运算加速

img

本质:隐藏层-特征提取器

把隐藏层通过特征提取来替代原来的特征工程,最后一个隐藏层输出的就是一组新的特征(相当于黑箱操作)。而对于输出层,其实是把前面的隐藏层的输出当做输入(经过特征提取得到的一组最好的特征)然后通过一个多分类器(可以是softmax函数)得到最后的输出 y y yimg

问题

  1. 多少层? 每层有多少神经元?

    用尝试加上直觉的方法来进行调试。对于有些机器学习相关的问题,我们一般用特征工程来提取特征,但是对于深度学习,我们只需要设计神经网络模型的结构。

  2. 结构可以自动确定吗?

    有方法可以让机器自动找到神经网络的结构的,比如进化人工神经网络(Evolutionary Artificial Neural Networks) 。

  3. 可以设计网络结构吗?

    可以的,比如 CNN卷积神经网络(Convolutional Neural Network )。

在这里插入图片描述

Step2:模型评估(Goodness of function)

一般采用损失函数来反应模型的好差,比如对于用于分类的神经网络来说,我们采用交叉熵(cross entropy)函数来对 y y y y ^ \hat{y} y^?的损失进行计算,调整参数,让交叉熵越小越好。

img

总体损失

不单单要计算一笔数据的,而是要计算整体所有训练数据的损失加起来,得到一个总体损失 L L L。然后在function set里面找到一组函数能最小化这个总体损失 L L L,或者说找一组神经网络的参数 θ \theta θ,来最小化总体损失 L L Limg

Step3:选择最优函数(Pick best function)

用梯度下降的方式找到最优的函数和最好的一组参数

具体流程:

  1. θ \theta θ是一组包含权重和偏差的参数集合,随机找一个初始值;
  2. 计算一下每个参数对应偏微分,得到的一个偏微分的集合 ? L \nabla{L} ?L(梯度);
  3. 利用这些偏微分,不断更新梯度得到新的参数,这样不断反复进行;
  4. 最终能得到一组最好的参数使得损失函数的值最小。

img

反向传播Backpropagation

反向传播Backpropagation是一个有效率的梯度下降算法。

链式法则

  • 连锁影响(可以看出x会影响y,y会影响z)
  • BP主要用到了chain rule

img

取出一个Neuron进行分析

在这里插入图片描述

可以把计算梯度分成两个部分:

  • 计算 ? z ? w \frac{\partial z}{\partial w} ?w?z?(Forward pass的部分)
  • 计算 ? l ? z \frac{\partial l}{\partial z} ?z?l?( Backward pass的部分 )

如下图所示,我们的目标是要计算 ? z ? w \frac{\partial z}{\partial w} ?w?z?(Forward pass的部分)和计算 ? l ? z \frac{\partial l}{\partial z} ?z?l? ( Backward pass的部分 ),然后把 ? z ? w \frac{\partial z}{\partial w} ?w?z? ? l ? z \frac{\partial l}{\partial z} ?z?l?相乘,得到 ? l ? w \frac{\partial l}{\partial w} ?w?l?。然后就可以得到神经网络中所有的参数,用梯度下降不断更新,得到损失最小的函数 。

img

forward pass-计算 ? z ? w \frac{\partial z}{\partial w} ?w?z?

根据求微分原理,forward pass的运算规律就是:
? z ? w 1 = x 1 ? z ? w 2 = x 2 \frac{\partial z}{\partial w_1} = x_1 \\ \frac{\partial z}{\partial w_2} = x_2 ?w1??z?=x1??w2??z?=x2?
所以计算得到的 x 1 x_1 x1? x 2 x_2 x2?恰好就是输入的 x 1 x_1 x1? x 2 x_2 x2?

img

也就是说,对于每一层的 ? z ? w \frac{\partial z}{\partial w} ?w?z?都是其输入:

在这里插入图片描述

backward pass-计算 ? l ? z \frac{\partial l}{\partial z} ?z?l?

计算所有激活函数的偏微分,激活函数有很多,这里使用Sigmoid函数为例:

img

使用链式法则(Chain Rule)的case1,可以把 ? l ? z \frac{\partial l}{\partial z} ?z?l?拆分为:
? l ? z = ? a ? z ? l ? a \frac{\partial l}{\partial z} = \frac{\partial a}{\partial z}\frac{\partial l}{\partial a} ?z?l?=?z?a??a?l?
进一步根据链式法则case2计算过程如下:
? l ? z = ? a ? z ? l ? a ? σ ′ ( z ) ? l ? a = ? z ′ ? a ? l ? z ′ + ? z ′ ′ ? a ? l ? z ′ ′ \frac{\partial l}{\partial z} = \frac{\partial a}{\partial z}\frac{\partial l}{\partial a} \Rightarrow {\sigma}'(z) \frac{\partial l}{\partial a} = \frac{\partial z'}{\partial a}\frac{\partial l}{\partial z'} +\frac{\partial z''}{\partial a}\frac{\partial l}{\partial z''} ?z?l?=?z?a??a?l??σ(z)?a?l?=?a?z??z?l?+?a?z??z?l?
根据forward pass的结论得到:

? l ? z \frac{\partial l}{\partial z} ?z?l?式子为:

img

观察这个式子,我们可以反向看待一下:

img

如何求 ? l ? z ′ \frac{\partial l}{\partial z'} ?z?l? ? l ? z ′ ′ \frac{\partial l}{\partial z''} ?z?l?呢?
  1. case1 该层后直接接到output layer

    假设 ? l ? z ′ \frac{\partial l}{\partial z'} ?z?l? ? l ? z ′ ′ \frac{\partial l}{\partial z''} ?z?l?是最后一层的隐藏层,那么y1与y2是输出值,可以根据损失函数直接计算得出结果 :在这里插入图片描述

  2. case2 该层后还有隐藏层,而不是output layer

    但是如果不是最后一层,计算 ? l ? z ′ \frac{\partial l}{\partial z'} ?z?l? ? l ? z ′ ′ \frac{\partial l}{\partial z''} ?z?l?需要继续往后一直通过链式法则算下去。继续乘 w 5 w_5 w5? w 6 w_6 w6?得到 ? l ? z ′ \frac{\partial l}{\partial z'} ?z?l?,如果 ? l ? z a \frac{\partial l}{\partial z_a} ?za??l? ? l ? z b \frac{\partial l}{\partial z_b} ?zb??l?仍然不知道,那么就继续往后面层计算,一直到碰到输出值(case1),得到输出值之后再反向往输入方向传。

    img

    img 对上图,可以从最后一个 ? l ? z 5 \frac{\partial l}{\partial z_5} ?z5??l? ? l ? z 6 \frac{\partial l}{\partial z_6} ?z6??l?看,因为 ? l ? z 5 \frac{\partial l}{\partial z_5} ?z5??l? ? l ? z 6 \frac{\partial l}{\partial z_6} ?z6??l?可以通过output求出来,然后继续往前(反向的前)求 ? l ? z 3 \frac{\partial l}{\partial z_3} ?z3??l? ? l ? z 4 \frac{\partial l}{\partial z_4} ?z4??l?,再继续求 ? l ? z 1 \frac{\partial l}{\partial z_1} ?z1??l? ? l ? z 2 \frac{\partial l}{\partial z_2} ?z2??l?,最后我们就得到下图的结果 :img

    如此,实际上进行backward pass时候和向前传播的计算量差不多。

参考资料

李宏毅机器学习笔记

李宏毅机器学习视频2019春季

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 15:47:40  更:2021-09-20 15:48:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 14:52:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码