简 介: 对于人工智能以及相关的领域学习,一个重要的经验就是能够通过实际动手编程和对实际数据进行处理,才能够很好的理解深度学习背后的数学原理以及该工具的性能。还是让我们把“纸上得来终觉浅,绝知此事要躬行”这句话始终记在心头吧。

关键词深度学习可视化CNN

#mermaid-svg-u9UjnnX8qVEKi69E {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-u9UjnnX8qVEKi69E .error-icon{fill:#552222;}#mermaid-svg-u9UjnnX8qVEKi69E .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-u9UjnnX8qVEKi69E .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-u9UjnnX8qVEKi69E .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-u9UjnnX8qVEKi69E .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-u9UjnnX8qVEKi69E .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-u9UjnnX8qVEKi69E .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-u9UjnnX8qVEKi69E .marker{fill:#333333;stroke:#333333;}#mermaid-svg-u9UjnnX8qVEKi69E .marker.cross{stroke:#333333;}#mermaid-svg-u9UjnnX8qVEKi69E svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-u9UjnnX8qVEKi69E .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-u9UjnnX8qVEKi69E .cluster-label text{fill:#333;}#mermaid-svg-u9UjnnX8qVEKi69E .cluster-label span{color:#333;}#mermaid-svg-u9UjnnX8qVEKi69E .label text,#mermaid-svg-u9UjnnX8qVEKi69E span{fill:#333;color:#333;}#mermaid-svg-u9UjnnX8qVEKi69E .node rect,#mermaid-svg-u9UjnnX8qVEKi69E .node circle,#mermaid-svg-u9UjnnX8qVEKi69E .node ellipse,#mermaid-svg-u9UjnnX8qVEKi69E .node polygon,#mermaid-svg-u9UjnnX8qVEKi69E .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-u9UjnnX8qVEKi69E .node .label{text-align:center;}#mermaid-svg-u9UjnnX8qVEKi69E .node.clickable{cursor:pointer;}#mermaid-svg-u9UjnnX8qVEKi69E .arrowheadPath{fill:#333333;}#mermaid-svg-u9UjnnX8qVEKi69E .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-u9UjnnX8qVEKi69E .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-u9UjnnX8qVEKi69E .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-u9UjnnX8qVEKi69E .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-u9UjnnX8qVEKi69E .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-u9UjnnX8qVEKi69E .cluster text{fill:#333;}#mermaid-svg-u9UjnnX8qVEKi69E .cluster span{color:#333;}#mermaid-svg-u9UjnnX8qVEKi69E div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-u9UjnnX8qVEKi69E :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

背景介绍
目 录
Contents
前言
动图展示
几篇博文中的动图
卷积神经网络
中数学原理
总 结

§01 背景介绍


  这是一篇在Github上 SkalskiP 写的一篇博文,介绍他深度学习的一些体会 ,原文可以在下面链接看到。

  • ILearnDeepLearning.py : https://github.com/SkalskiP/ILearnDeepLearning.py

  下面是对原文的介绍。

1.1 前言

  俗话说,纸上得来终觉浅,绝知此事要躬行(Nothing develops and teaches you like getting your hands dirty。)这个Github仓库中包含了一些与深度学习、数据科学相关的小程序,大部分与在 Medium 中发布的文章有关系,主要是对其中文章进行说明和补充。对我来说,习惯于将自己的学习的过程记录下来,也可以帮助其他人理解人工神经网络相关问题。我希望这个Github仓库的内容被人们发现是有趣和有用的。建议你在阅读这些文章同时也动手体验给出的代码的效果。

▲ 图1.1.1 ILearningDeepLearning.py

1.1.1 建立运行环境

# clone repository
git clone https://github.com/SkalskiP/ILearnDeepLearning.py.git# navigate to main directory
cd ILearnDeepLearning.py# set up and activate python environment
apt-get install python3-venv
python3 -m venv .env
source .env/bin/activate# install all required packages
pip install -r requirements.txt

评论: 通过他这篇博文,可以看到作者 SkalSkiP不仅仅是一个研究人员,更适合做一个教学老师。

§02 动图展示


2.1 几篇博文中的动图

2.1.1 深度学习中的数学原理

  如果你对于深度学习背后的机理感兴趣,可以看看这篇博文: Deep Dive into Math Behind Deep Networks 。文中将于学习过程中的梯度下降、激活函数以及分类边界进行了视觉化展示。通过这些精美的动图可以对文章中讲述的问题进行很好的补充。下面展示一些可视化的动图。

▲ 图2.1.1 在Keras模型中每次迭代之后对应的分类器的分类边界,将这些边界变化合成一个动图

▲ 图2.1.2 将梯度下降进行可视化

2.1.2 使用NumPy进行可视化

  在 Let’s code a Neural Network in plain NumPy 中介绍了人工神经网络理论之后,展示了如何使用NumPy工具来实现神经网络实际工作模型。在Notebook文件中包含了一些代码,是对Keras平台建立的网络模型的NumPy完整的实现代码,文中大量的注释也可以让你对相关文章中网络功能实现有着清晰的理解。

▲ 图2.2.1 使用简单的NumPy编写的分类模型的分类边界演化动图

2.1.3 防止网络过学习

  Preventing Deep Neural Network from Overfitting 文中 阐述了网络训练过程中的过学习(Overfit)现象以及预防的方法。作者对不同的正则化阐述进行了仿真,分析了对权系数矩阵的影响。文中给出结果的可视化动图。

▲ 图2.1.4 使用线性回归、人工神经网络以及带有正则化条件的神经网络创建的分类边界
▲ 图2.1.5 神经网络训练过程中的训练精度和验证精度的变化曲线

2.1.4 如何利用优化其加速网络训练?

  作者的这篇文章中 How to train Neural Network faster with optimizers? 介绍了作者纯粹使用Numpy来建立自己的人工神经网络,这当然是一个有挑战性的工作,但使得作者对神经网络背后的工作机制有了更深入和广泛的理解。这使得他对于影响网络性能的很多参数的作用有了更充分的理解,比如如何进行网络结构选择、调整训练超参、正确的网络的初始化等等。对于影响网络学习速度的关键因素-选择合理的优化策略,是本文的重点。

▲ 图2.1.6 展示初始化位置是如何影响网络训练的
▲ 图2.1.7 不同优化器的效果对比

2.1.5 创建动图的简单方法

  Simple Method of Creating Animated Graphs 给出了作者在自己的文章和工程中是如何制作这些有趣的动图方法,这使得他可以更有效的表达自己的思想。文中介绍了利用MatPlitLib制作动图的简单方法。

▲ 图2.1.8 使用Matplotlib中的API制作的Lorenz混沌吸引子动图

2.2 卷积神经网络中数学原理

  在 Gentle Dive into Math Behind Convolutional Neural Networks 中作者讨论了卷积神经网络相关的理论问题,这也是对一个小的工程项目的准备。作者计划使用卷积神经网络创建自己的简易实现版本。因此,文中的动图主要集中在选择滤波器进行卷积的过程。

  下面是图像卷积的数学表达式:

G[m,n]=(f∗h)[m,n]=∑j∑kh[j,k]f[m−j,n−k]G\left[ {m,n} \right] = \left( {f * h} \right)\left[ {m,n} \right] = \sum\limits_j^{} {\sum\limits_k^{} {h\left[ {j,k} \right]f\left[ {m - j,n - k} \right]} }G[m,n]=(f∗h)[m,n]=j∑​k∑​h[j,k]f[m−j,n−k]

  对应的像素操作可以使用如下动图表示:

▲ 图2.2.1 卷积核的例子

  位于图像不同位置(中心、边缘、角落)是如何影响卷积结果的。从而产生了有效卷积和“相同卷积”的概念。

▲ 图2.2.2 像素位置如何影响卷积结果的

  不同的卷积移动步幅(Stride) 会影响结果的大小。

▲ 图2.2.3 卷积步幅对于结果尺寸的影响

  为了使得输出结果边长与输入相同,则需要在数据边缘填充一定的数据。

p=f−12p = {{f - 1} \over 2}p=2f−1​

公式中:
p:填充宽度
f:卷积核尺寸

  如果已知输入尺寸(ninn_{in}nin​)、填充宽度(ppp)、卷积核尺寸(fff)以及移动步幅(sss),那么输出图像的边长为:

nout=[nin+2p−fs+1]n_{out} = \left[ {{{n_{in} + 2p - f} \over s} + 1} \right]nout​=[snin​+2p−f​+1]

  文中作者还讨论了卷积从二维到三维转换,以及卷积是如何实现参数共享的过程。

▲ 图2.2.4 连接裁剪和参数共享

  对于卷积运算的误差反向传播过程一直是所有人工神经网络教学中的难点。借助于“全卷积矩阵”的概念,可以将卷积反向误差传播过程也等效成一个卷积过程。

▲ 图2.2.5 卷积的反向传播过程
▲ 图2.2.6 MaxPooling 过程

  利用掩码技术可以实现对MaxPooling过程的反向梯度传播。

▲ 图2.2.7 对于MaxPooling层中的反向传播过程的展示

※ 总  结 ※


  对于人工智能以及相关的领域学习,一个重要的经验就是能够通过实际动手编程和对实际数据进行处理,才能够很好的理解深度学习背后的数学原理以及该工具的性能。还是让我们把“纸上得来终觉浅,绝知此事要躬行”这句话始终记在心头吧。

▲ 图3.1 今年信标灯的触发无需再使用磁铁触发


■ 相关文献链接:

  • SkalskiP 写的一篇博文,介绍他深度学习的一些体会
  • Medium
  • Deep Dive into Math Behind Deep Networks
  • Let’s code a Neural Network in plain NumPy
  • Preventing Deep Neural Network from Overfitting
  • How to train Neural Network faster with optimizers?
  • Simple Method of Creating Animated Graphs
  • Gentle Dive into Math Behind Convolutional Neural Networks

● 相关图表链接:

  • 图1.1.1 ILearningDeepLearning.py
  • 图2.1.1 在Keras模型中每次迭代之后对应的分类器的分类边界,将这些边界变化合成一个动图
  • 图2.1.2 将梯度下降进行可视化
  • 图2.2.1 使用简单的NumPy编写的分类模型的分类边界演化动图
  • 图2.1.4 使用线性回归、人工神经网络以及带有正则化条件的神经网络创建的分类边界
  • 图2.1.5 神经网络训练过程中的训练精度和验证精度的变化曲线
  • 图2.1.6 展示初始化位置是如何影响网络训练的
  • 图2.1.7 不同优化器的效果对比
  • 图2.1.8 使用Matplotlib中的API制作的Lorenz混沌吸引子动图
  • 图2.2.1 卷积核的例子
  • 图2.2.2 像素位置如何影响卷积结果的
  • 图2.2.3 卷积步幅对于结果尺寸的影响
  • 图2.2.4 连接裁剪和参数共享
  • 图2.2.5 卷积的反向传播过程
  • 图2.2.6 MaxPooling 过程
  • 图2.2.7 对于MaxPooling层中的反向传播过程的展示
  • 图3.1 今年信标灯的触发无需再使用磁铁触发

学习深度网络需要直观的感知相关推荐

  1. 【火炉炼AI】深度学习001-神经网络的基本单元-感知器

    [火炉炼AI]深度学习001-神经网络的基本单元-感知器 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotl ...

  2. 深度学习概述:从感知机到深度网络(找到一篇大牛的文章快围观)

    https://www.toutiao.com/i6652554938519912968/ 2019-01-31 15:10:48 前言 别说我不宠粉,分享一篇大佬的文章,没办法书读得少不知道怎么去形 ...

  3. 深度学习概述:从感知机到深度网络

    (注:本文译自一篇博客,作者行文较随意,我尽量按原意翻译,但作者所介绍的知识还是非常好的,包括例子的选择.理论的介绍都很到位,由浅入深,源文地址) 近些年来,人工智能领域又活跃起来,除了传统了学术圈外 ...

  4. 【1】深度学习之饮水思源:从感知机到深度网络

    Java语言实现一:https://github.com/ivan-vasilev/neuralnetworks Java语言实现二:http://deeplearning4j.org/zh-abou ...

  5. 将深度学习技术应用于基于情境感知的情绪识别

    目录 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:903290195 延世大学和洛桑联邦理工学院(EPFL)的研究团队最近开发了一种新的技术,可以通过分析图像中的人脸和上下 ...

  6. 深度网络学习调研报告

     深度网络学习调研报告 目录 1.前言...............................................3 1.1课题研究的背景及意义................. ...

  7. 深度学习入门系列1:多层感知器概述

    本人正在学习<deep learning with python>–Jason Brownlee,有兴趣的可以一起学习. 仅供学习参考,不做商用! 大家好,我技术人Howzit,这是深度学 ...

  8. 《深度学习》(美)Ian Goodfellow 花书简要笔记(第二部分:深度网络)

    本部分是目前应用比较成熟的深度学习基础方法.推荐李飞飞老师的CS231n课程(网易云课堂有全部视频和课件,建议把编程作业刷了)配合学习~ 第六章 深度前馈网络 1.我们最好将前馈神经网络想成是为了实现 ...

  9. 深度学习深度前馈网络_深度学习前馈网络中的讲义第1部分

    深度学习深度前馈网络 FAU深度学习讲义 (FAU Lecture Notes in Deep Learning) These are the lecture notes for FAU's YouT ...

最新文章

  1. sqlserver安装和简单的使用
  2. java xml文件内容替换_java读取xml文件并转换成对象,并进行修改
  3. python3.7扩展库是什么_Python3.4以后的版本中,____________库用于安装管理Python扩展包,________________库用于发布Python包。_学小易找答案...
  4. HttpPost测试工具类,传递xml型文档
  5. 论文推荐 | 2019中国卫星导航年会论文集
  6. 单链表遍历_单链表及其遍历实现的基本操作
  7. 此电脑怎么放在桌面上_window10桌面美化,真的是美爆了,高效整理电脑桌面
  8. 在周二正式发售前 新款MacBook Pro已开始向客户发货
  9. IE6不支持hover赋予css样式的解决方法 如div:hover li:hover支持
  10. SQL 取空格右边的字符_从零学会SQL,第2关
  11. UC伯克利超酷研究:舞痴和舞王之间,只差一个神经网络
  12. jquery 上下无缝滚动
  13. 双边滤波及其matlab代码
  14. Enumerator yielder.yield 与 Proc.yield 区别
  15. java age_这些Java9 超牛的新特性,你竟然还没用过?
  16. matlab自定义颜色代码,自定义颜色为matlab表面图
  17. PSNR-峰值信噪比
  18. 平流式隔油池计算_隔油池设计方案计算.doc
  19. 计算机u盘被禁用怎么办,u盘禁用了怎么恢复,u盘一启用马上就被禁用
  20. 幼儿园计算机网络教室工作计划,幼儿园2017-2018学年游戏教学工作计划

热门文章

  1. 数组的遍历你都会用了,那Promise版本的呢
  2. 在Windows中配置Rsync同步
  3. linux c 链接详解4-共享库
  4. phpcms V9利用num++实现多样形式列表标签调用
  5. [C++基础]001_iostream和iostream.h的区别
  6. 硬盘为何会丢失数据?
  7. HDOJ/HDU 2565 放大的X(分段思考~)
  8. 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例
  9. 思科无线AP胖瘦互转
  10. python错误找回_致命的Python错误:无法从堆栈溢出中恢复。洪水期间Fi