30
神经网络 介绍与研讨 自动化钱 71 ·吴思源 [email protected] December 18, 2019

神经网络 介绍与研讨Table of contents 1 神经网络简介 MNIST 数据集 神经元模型Neuron 多层感知机 2 训练网络 梯度向下 反向传播 深度学习框架

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

  • 神经网络介绍与研讨自动化钱 71 ·吴思源

    [email protected] 18, 2019

    mailto:[email protected]

  • Table of contents

    1 神经网络简介MNIST 数据集神经元模型 Neuron多层感知机

    2 训练网络梯度向下反向传播深度学习框架

    3 学习资源

  • 问题介绍

    为了用计算机解决手写字体识别问题,收集了如下数据库,包含10 个阿拉伯数字。一共 70000 张图片,每张图片大小为 28×28 像素

  • 将这个数据集中的 7 万张图片随机分成两组,60000 张用来训练我们的模型,然后用剩下的 10000 张做测试。

    每张图片大小为 28×28像素,意味有每张图片储存了 28行 28 列的矩阵,每个元素存储 0 至 255 的灰度数据。0 对应着黑色,255 对应着白色。用 0 至 255 之间的数字代表灰度,越接近 255 越亮。

  • 神经元模型 Neuron

    神经元的特性若干个树突:接收来自其他神经元的信号,并将信号传递给细胞体。

    细胞体:把各个树突传递过来的信号加总起来,得到一个总的刺激信号。

    轴突:细胞体内的刺激信号超过一定阈值之后,神经元的轴突会对外发送信号。

    突触:向其他神经元或人体内的其他组织传递。

    11https://blog.csdn.net/weixin_39844018/article/details/82886354

  • 用线性模型∑3

    i=1 wixi 模拟树突和细胞体用激活函数 f(z) 模拟轴突

    output ={

    0 if∑

    i wixi ⩽ threshold1, if

    ∑i wixi > threshold

    2

    2https://blog.csdn.net/weixin_39844018/article/details/82886354

  • 用线性模型∑3

    i=1 wixi 模拟树突和细胞体用激活函数 f(z) 模拟轴突(这个激活函数又叫 ReLU 整流线性单元)神经元的输出为

    output = f(3∑

    i=1wixi + b)

    3

    3https://blog.csdn.net/weixin_39844018/article/details/82886354

  • output = f(3∑

    i=1wixi + b)

    写成矩阵形式

    output = f

    [ w1 w2 w3 ] x1x2

    x3

    + b

    44https://blog.csdn.net/weixin_39844018/article/details/82886354

  • 多层感知机

    将很多个上面介绍的神经元连接就成了多层感知机,这是一个简化的神经网络模型

  • 把多层感知机写成矩阵形式

    y = f (W3 · f (W2 · f (W1 · x + b1) + b2) + b3)

    x =[

    x1 x2 x3 . . . xm]T

    y =[

    y1 y2 y3 . . . yn]T

    输入层神经网络有 m 个神经元,对应着 m 维向量输入输出层神经网络有 n 个神经元,对应着 n 维向量输出权重值 W3 W2 W1 决定了如何把输入 x 变成输出 y后面会提到如何设置这样神奇的权重

  • 激活函数

    为什么每一层都要加入激活函数?

    因为如果不加入激活函数 f(x),可以推出

    y = W3 · (W2 · (W1 · x + b1) + b2) + b3= W3 ·W2 ·W1 · x + W3 ·W2 · b1 + W3 · b2 + b3

  • MNIST 网络

    用多层感知机来解决最开始提到的手写字体识别问题,多层感知机的输入应该包括一张图片上的所有像素,需要将 28 行 28 列的矩阵展开成 784 维向量。输入层神经元个数为 784.输出层应该分别代表 10个数据,因此输出层的神经元个数为 10。

  • 期待输出的是一个 one-not 矩阵,也就是说,如果识别到 9,9 对应的输出神经元应该输出为 1,而 8 对应的神经元输出为 0。实际上输出的值并不会如此规整,有时候需要做 归一化 normalize或者 取最大者 argmax期待的:[

    0.00 0.00 0.00 0.00 0.00 0 0 0 0.00 1.00]

    实际上:[0.01 0.35 0.55 0.99 0.33 0 0 0 0.01 2.2

    ]归一化之后:[

    0.00 0.07 0.12 0.23 0.07 0 0 0 0.00 0.49]

  • 构建如下多层感知机模型

  • 训练

    人工设置权值等参数过于麻烦采用梯度向下算法通过数据训练出网络的参数

    训练方法• 输入一张图片• 通过神经网络得到输出• 然后与真实值比较,算出误差(数量)• 将误差反传到网络中• 使用每个权值的误差更新网络权值

  • 梯度向下

    损失函数:衡量网络预测值与真实值的差距常用的有 L2loss ,即欧式距离,平方误差损失

    1

    2

    m∑i=1

    (ypredicti − ytruthi )2

    可以使用梯度向下方法更新神经网络,达到损失函数极小损失函数极小时网络就能够实现较好的预测,对输入的图片能够预测的较为准确

  • 对于一个数量函数 L(x) = w · x,沿着梯度方向进行多次迭代搜索可以找到函数值的最小值

    沿着梯度方向进行参数更新

    x(k+1)i ← xki − λ∇L(x(k)i )

  • 利用雅可比矩阵定义 y = f(x) 的梯度a

    定义梯度为

    ∇f(x) = J =

    ∂y1∂x∂y2∂x. . .∂ym∂x

    =

    ∂y1∂x1

    ∂y1∂x2 . . .

    ∂y1∂xn

    ∂y2∂x1

    ∂y2∂x2 . . .

    ∂y2∂xn

    . . . . . . . . . . . .∂ym∂x1

    ∂ym∂x2 . . .

    ∂ym∂xn

    a注意这里 x 和 y 均为向量

  • 梯度表征了某个数量函数下降最快的方向上页中 x 与 y 均为向量,雅可比矩阵的每一行都代表这一行所对应的梯度如第一行代表数量 y1 的梯度梯度是数量函数上升(下降)最快的方向

  • 反向传播

    反向传播利用的是高数中讲过的复合函数求导的链式求导法则,将对最后一层权值的求导反向传到前层神经元上

    数学推导较为繁琐。可以参考https://zhuanlan.zhihu.com/p/79657669https://zhuanlan.zhihu.com/p/25496760这一部分推导建议自己复现一下

    https://zhuanlan.zhihu.com/p/79657669https://zhuanlan.zhihu.com/p/25496760

  • 训练部分总结

    用到的数学知识有• 偏微分和偏导数• 方向导数与梯度• 矩阵求导• 链式法则这部分数学知识会在高数上册、下册与线性代数中涉及,难度不高但是十分繁琐

  • 深度学习框架 将主流的神经网络和其它数据处理算法包装起来,并且提供了方便调用的接口。内置自动求导和反向传播,方便训练神经网络。将矩阵运算转化为张量运算放到 GPU 上运行,加速神经网络的训练。

    https://tensorflow.google.cn/

    谷歌开发的端到端的开源机器学习平台多用于工业界,历史悠久、大厂代言、适配多种平台

    https://pytorch.org/

    PyTorch 是 Facebook 开发的深度学习框架多用于学术界,灵活轻便

    https://tensorflow.google.cn/https://pytorch.org/

  • 基础知识

    • 线性代数• 微积分• 概率论• Python 编程

  • Python 编程需要掌握的内容• 文件读写• 基本数据结构• Numpy 矩阵运算• Scipy 科学运算• Matplotlib Matlab 风格绘图• OpenCV 图像处理库• gym 强化学习模拟环境,包含各种强化学习任务• PyTorch & TensorFlow & TensorFlow 2.0

  • 此外,还需要熟悉 Python 各种库的安装办法为了方便起见,建议大家使用 Anaconda 提供的包管理环境。不需要安装 Python,只需要安装 Anaconda 即可。建议尽快尝试安装 PyTorch 或者 Tensorflow 深度学习框架(坑很多)

  • Online Resources

    深度学习相关的出版书籍• 深度学习 ·Ian Goodfellow (花书)• 机器学习 ·周志华著 西瓜书• 统计学习方法 ·李航著

    • Deep Learning Ian Goodfellow• Pattern Recognition and Machine Learning

    Bishop prml.github.io• The Elements of Statistical Learning (ESL)• Reinforcement Learning Richard Sutton

    http://www.deeplearningbook.org/https://github.com/PRMLhttps://prml.github.io/https://web.stanford.edu/~hastie/Papers/ESLII.pdfhttps://web.stanford.edu/class/psych209/Readings/SuttonBartoIPRLBook2ndEd.pdf

  • Video & MOOC• https:

    //www.3blue1brown.com/neural-networks• CS231n CNN for Visual Recognition• RL ·David Silver

    https://www.3blue1brown.com/neural-networkshttps://www.3blue1brown.com/neural-networkshttps://www.youtube.com/playlist?list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYvhttps://www.youtube.com/watch?v=2pWv7GOvuf0&list=PLqYmG7hTraZDM-OYHWgPebj2MfCFzFObQ

  • 中文资源

    • 花书 dlbook-chinese• 深度学习 500 问 DeepLearning-500-questions• 台大李宏毅机器学习、深度学习、强化学习公开课 https://www.bilibili.com/video/av46561029/• 吴恩达机器学习 https:

    //study.163.com/instructor/1029176012.htm• 知乎• 新智元、机器之心等公众号这个领域发展太快,研究者国际化程度非常高,因此中文资料很少所以同学们需要习惯英文教材英文视频和英文文献

    https://github.com/exacity/deeplearningbook-chinesehttps://github.com/scutan90/DeepLearning-500-questionshttps://www.bilibili.com/video/av46561029/https://study.163.com/instructor/1029176012.htmhttps://study.163.com/instructor/1029176012.htm

  • 此外,由于该方向更偏向科研,因此大多数科研资料均已开源。可以在 Github 上找到完整的开源代码,并且按照作者提供的源码进行实验复现。由于行业迭代速度非常快,大多数论文并不直接发表的IEEE 的期刊杂志上,更多的工作会发表到专业领域对应的国际会议中。文章发表前后作者会将论文放到预印本网站 arxiv 中,故希望寻找论文可以访问 arxiv 或直接找对应会议的 OpenAccess

    https://arxiv.org/

  • 由于本人水平有限,因此难免出错有问题请与本人邮件联系[email protected]

    mailto:[email protected]

    神经网络简介MNIST 数据集神经元模型 Neuron多层感知机

    训练网络梯度向下反向传播深度学习框架

    学习资源