绿小蕤

好逸恶劳,贪生怕死

  • 主页
  • 简介
  • 相册
所有文章 友链 学习履历

绿小蕤

好逸恶劳,贪生怕死

  • 主页
  • 简介
  • 相册

Deep Learning 吴恩达 课程笔记大纲

2018-06-27 2018-06-27 view 62 times

PS:Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization和Neural Networks and Deep Learning 两门课的课程笔记大纲梳理,我用我觉得的理解进行归类,方面以后查找 ~

神经网络基础


一、以神经网络的结构看逻辑回归

  1. sigmoid函数
  2. loss function 损失函数和 cost funcrion 代价函数
  3. Gradient Descent 梯度下降法


二、向量化(Vectorization)(对应到硬件就是并行计算)


三、广播(broadcasting)



浅层神经网络


一、计算神经网络的输出 (数学角度)


二、向量化实现 (代码实现)


三、激活函数


四、神经网络的反向梯度下降(数学和代码)


五、参数随机初始化



深层神经网络

一、使用深层表示的原因


二、搭建深层神经网络块


三、矩阵的维度




优化(一) — 过拟合


一、数据划分:训练 / 验证 / 测试集(训练之前)



二、模型估计:偏差 / 方差(训练之后,对训练结果的评估)


1.高偏差的解决:

(1)扩大网络规模,如添加隐藏层或隐藏单元数目
(2)寻找合适的网络架构,使用更大的 NN 结构
(3)花费更长时间训练,增加迭代次数


2.高方差的解决:

(1)获取更多的数据
(2)正则化(regularization),防止过拟合
(3)寻找更合适的网络结构



三、解决高方差的方法:正则化(regularization),防止过拟合(对于训练结果不理想的解决方法)


1. L2

加入的正则化项,衰减了W的权重


2. dropout

神经元不会特别依赖于任何一个输入特征。反向随机失活(Inverted dropout)是实现 dropout 的方法。


3.数据扩增(Data Augmentation)


4.早停止法(Early Stopping)



优化(二)— 加快学习的算法


一、对于训练集的处理


Mini-Batch

每次处理训练集的一部分进行梯度下降,避免了遍历完整个训练集才完成一次参数更新



二、初始化参数W、b


在参数W,b初始化时就进行优化,应对反向传播时会出现的梯度消失和梯度爆炸(vanishing/exploding gradient)问题

1.He Initialization

激活函数使用 ReLU 时,Var(wi)=2/n[l-1] He Initialization


2.Xavier initialization

激活函数使用 tanh 时,Var(wi)=1/n[l-1] Xavier initialization



三、反向传播加速梯度下降的过程

1.Momentum

将前几次梯度下降的指数平均作为梯度值来更新参数(避免震荡)


2.RMS Prop

使波动大的维度参数更新慢,波动小的维度参数更新快


3.Adam

将Momentum 和 RMS Prop相结合



四、改变学习率加速收敛

学习率衰减:初期学习率大,梯度下降快,后期学习步长小,有助于收敛至最优解



五、标准化、归一化 Normalization


1.标准化输入(Normalization)

对于输入特征标准化,加快学习速度


2.Batch Normalization

  1. 通过对隐藏层各神经元的输入标准化,提高神经网络训练速度

  2. 减小不同的样本分布(Covariate Shift )对后面几层网络的影响。样本分布改变,使得前面层的权重变化后,输出Z发生很大变化,但是在Batch Normalization作用下,归一化后的Z分布相比于前一次迭代的归一化的Z,并没有发生很大变化,所以作为这一层的输出,并不会对后面一层的输入的分布产生很大影响,从而减少各层 W、b 之间的耦合性,增强鲁棒性(robust)

    (这里表扬一下自己,感觉自己太厉害了,竟然在厕所里想通了Covariate Shift 的意思,哈哈哈~)

  3. Batch Normalization 也起到微弱的正则化(regularization)效果


PS:我老是把Normalization和Regularization弄混淆 ~



超参数调试


1.超参数重要程度排序

  • 最重要:

    学习率 α

  • 其次重要:

    β:动量衰减参数,常设置为 0.9

    hidden units:各隐藏层神经元个数

    mini-batch 的大小

  • 再次重要:

    β1,β2,ϵ:Adam 优化算法的超参数,常设为 0.9、0.999、10−810−8

    layers:神经网络层数

    decay_rate:学习衰减率


2.调参技巧

随机选择点进行调试


3.为超参数选择合适调试范围



优化会遇到的问题

一、判断梯度计算是否正确

由于微分分析计算梯度容易出错 ,实际操作时常常将分析梯度法的结果和数值梯度法的结果作比较,以此来检查其实现的正确性

注意:只适用于debug,判断梯度计算是否正确,且不能和dropout同时使用


二、高维度优化遇到的问题

1.低维度:局部最优会阻碍找到全局最优的解

2.高维度:不存在局部最优的阻碍,但是鞍点会降低学习速度,通过Adama算法加速提高效率

  • 深度学习

扫一扫,分享到微信

微信分享二维码
Deep-Learning-吴恩达-作业(七)
Deep-Learning-吴恩达-作业(六)
  1. 1. 神经网络基础
    1. 1.1. 一、以神经网络的结构看逻辑回归
    2. 1.2. 二、向量化(Vectorization)(对应到硬件就是并行计算)
    3. 1.3. 三、广播(broadcasting)
  2. 2. 浅层神经网络
    1. 2.1. 一、计算神经网络的输出 (数学角度)
    2. 2.2. 二、向量化实现 (代码实现)
    3. 2.3. 三、激活函数
    4. 2.4. 四、神经网络的反向梯度下降(数学和代码)
    5. 2.5. 五、参数随机初始化
  3. 3. 深层神经网络
    1. 3.1. 一、使用深层表示的原因
    2. 3.2. 二、搭建深层神经网络块
    3. 3.3. 三、矩阵的维度
  4. 4. 优化(一) — 过拟合
    1. 4.1. 一、数据划分:训练 / 验证 / 测试集(训练之前)
    2. 4.2. 二、模型估计:偏差 / 方差(训练之后,对训练结果的评估)
      1. 4.2.1. 1.高偏差的解决:
      2. 4.2.2. 2.高方差的解决:
    3. 4.3. 三、解决高方差的方法:正则化(regularization),防止过拟合(对于训练结果不理想的解决方法)
      1. 4.3.1. 1. L2
      2. 4.3.2. 2. dropout
      3. 4.3.3. 3.数据扩增(Data Augmentation)
      4. 4.3.4. 4.早停止法(Early Stopping)
  5. 5. 优化(二)— 加快学习的算法
    1. 5.1. 一、对于训练集的处理
      1. 5.1.1. Mini-Batch
    2. 5.2. 二、初始化参数W、b
      1. 5.2.1. 1.He Initialization
      2. 5.2.2. 2.Xavier initialization
    3. 5.3. 三、反向传播加速梯度下降的过程
      1. 5.3.1. 1.Momentum
      2. 5.3.2. 2.RMS Prop
      3. 5.3.3. 3.Adam
    4. 5.4. 四、改变学习率加速收敛
    5. 5.5. 五、标准化、归一化 Normalization
      1. 5.5.1. 1.标准化输入(Normalization)
      2. 5.5.2. 2.Batch Normalization
  6. 6. 超参数调试
    1. 6.0.1. 1.超参数重要程度排序
    2. 6.0.2. 2.调参技巧
    3. 6.0.3. 3.为超参数选择合适调试范围
  • 7. 优化会遇到的问题
    1. 7.1. 一、判断梯度计算是否正确
    2. 7.2. 二、高维度优化遇到的问题
  • © 绿小蕤
    访问量:45415次| 访客数:38914人次
    版权属于绿小蕤
    本喵出生 2602 天 22 小时 56 分
    • 所有文章
    • 友链
    • 学习履历

    tag:

    • Advanced Technology
    • C++
    • cmake
    • Linux
    • 硬件
    • opencv
    • 区块链
    • 深度学习
    • python
    • 机器学习
    • Hexo
    • Git
    • 纪念第一篇文章
    • 计算机网络
    • tensorflow
    • 编译
    • 配置
    • 数据结构
    • caffe
    • cs144
    • cs231n
    • ubuntu
    • hexo
    • 计算机网络、密码学
    • 操作系统
    • 算法
    • 软件
    • 云

      缺失模块。
      1、请确保node版本大于6.2
      2、在博客根目录(注意不是yilia根目录)执行以下命令:
      npm i hexo-generator-json-content --save

      3、在根目录_config.yml里添加配置:

        jsonContent:
          meta: false
          pages: false
          posts:
            title: true
            date: true
            path: true
            text: false
            raw: false
            content: false
            slug: false
            updated: false
            comments: false
            link: false
            permalink: false
            excerpt: false
            categories: false
            tags: true
      

    • vim使用说明

      2019-10-07

      #Linux

    • 区块链

      2019-01-15

      #区块链

    • 密码学

      2019-01-15

      #计算机网络、密码学

    • caffe(九)——配置文件

      2019-01-10

      #caffe

    • caffe(八)——layer

      2019-01-10

      #caffe

    • caffe(七)——blob

      2019-01-10

      #caffe

    • TCP/IP HTTP Soket

      2019-01-08

      #计算机网络

    • 网页生成

      2019-01-07

      #计算机网络

    • yilia主题的相册搭建

      2019-01-07

      #hexo

    • 算法(二)——递归、迭代、回溯

      2019-01-06

      #算法

    • 算法(一)——时间复杂度

      2019-01-06

    • caffe(六)——可视化网络工具Netscope

      2019-01-04

      #caffe

    • caffe(五)——windows下输出log日志和画出accuracy和loss曲线

      2019-01-03

      #caffe

    • caffe(四)——finetune

      2019-01-03

      #caffe

    • caffe(三)——模型和数据集

      2019-01-02

      #caffe

    • 图神经网络

      2019-01-02

      #Advanced Technology#深度学习

    • caffe(二)——训练和测试MNIST

      2018-12-27

      #caffe

    • caffe(一)——windows下环境配置

      2018-12-27

      #caffe

    • Christmas Gift——pygame、pyinstaller

      2018-12-25

    • 机器学习(五)——KNN

      2018-12-25

      #机器学习

    • 机器学习(四)——XGBoost

      2018-12-25

      #机器学习

    • 机器学习(三)——PCA

      2018-12-24

      #机器学习

    • 机器学习(二)——贝叶斯算法

      2018-12-24

      #机器学习

    • 机器学习(一)——决策树、随机森林

      2018-12-24

      #机器学习

    • 编译和链接(四)——重定义

      2018-12-19

      #编译

    • 编译和链接(三)——头文件与库

      2018-12-19

      #编译

    • 编译和链接(二)——静态链接和动态链接

      2018-12-19

      #编译

    • 编译和链接(一)——预处理、编译、链接

      2018-12-19

      #编译

    • Linux(六)——进程调度

      2018-12-17

      #Linux

    • Debug、Release版本下 多线程问题

      2018-11-28

    • Dlib中imglab生成失败的解决方法

      2018-11-19

    • C++学习:多线程

      2018-11-08

      #C++

    • cs144:1-1

      2018-10-29

      #计算机网络#cs144

    • [置顶]目录检索

      2018-10-25

    • [置顶]分享

      2018-10-25

    • win10+VS2013+Dlib 安装配置

      2018-10-22

      #配置

    • C++学习:强制类型转换

      2018-10-21

      #C++

    • C++学习:const、static、extern

      2018-10-20

      #C++

    • C++学习:指针和引用

      2018-10-20

      #C++

    • C++学习:内存管理

      2018-10-19

      #C++

    • C++学习:C和C++的I/O库区别

      2018-10-19

      #C++

    • C++学习:内存对齐

      2018-10-19

      #C++

    • C++学习:类

      2018-10-19

      #C++

    • C++学习:标准库和标准模板库

      2018-10-19

      #C++

    • 操作系统启动过程

      2018-10-18

      #操作系统

    • 处理器

      2018-10-18

      #硬件

    • 远程登陆

      2018-10-17

    • 文本文件和二进制文件

      2018-09-20

    • CUDA和OpenCL

      2018-09-17

      #硬件

    • 2018-09-15

    • Linux(五)—— .o、.a、.so

      2018-09-13

      #Linux

    • CMake(三)—— Linux下使用CMake

      2018-09-13

      #cmake#Linux

    • ubuntu(三)—— opencv、cheese安装

      2018-09-13

      #Linux#ubuntu

    • ubuntu(二)—— sublime的python环境搭建

      2018-09-13

      #Linux#ubuntu

    • ubuntu(一)—— VM虚拟机上安装ubuntu

      2018-09-13

      #Linux#ubuntu

    • Linux(四)—— 文件

      2018-09-10

      #Linux

    • CMake(二)—— Windows下使用CMake

      2018-09-10

      #cmake

    • CMake(一)—— make和cmake

      2018-09-10

      #cmake

    • Linux(三)—— 环境变量

      2018-09-09

      #Linux

    • Linux(二)—— 系统目录结构

      2018-09-09

      #Linux

    • Linux(一)—— 为什么要用Linux做开发

      2018-09-09

      #Linux

    • DLL的创建与使用

      2018-09-04

    • 剑指offer(一)

      2018-08-22

      #C++

    • 编译器、编辑器、IDE

      2018-08-22

      #软件

    • VS+opencv的配置

      2018-08-19

      #编译#配置

    • opencv(六)——图像坐标系和宽高

      2018-08-15

      #opencv

    • opencv(五)——图像读取

      2018-08-15

      #opencv

    • opencv(四)——AdaBoost

      2018-08-14

      #opencv

    • opencv(三)——绘图

      2018-08-14

      #opencv

    • opencv(二)——imgproc

      2018-08-14

      #opencv

    • opencv(一)——HighGUI

      2018-08-14

      #opencv

    • cs231n笔记(十一)——生成式对抗网络

      2018-08-14

      #深度学习#cs231n

    • cs231n笔记(十)——反卷积与特征可视化

      2018-08-14

      #深度学习#cs231n

    • cs231n笔记(九)——分类、检测、分割、跟踪

      2018-08-13

      #深度学习#cs231n

    • 嵌入式与各种板子

      2018-08-05

      #硬件

    • Tensorboard 总结

      2018-08-05

      #python#tensorflow

    • TensorFlow 总结

      2018-08-05

      #python#tensorflow

    • cs231n笔记(八)——CNN经典网络

      2018-08-05

      #深度学习#cs231n

    • cs231n笔记(七)——深度学习框架

      2018-08-03

      #深度学习#cs231n

    • cs231n笔记(六)——循环神经网络

      2018-08-02

      #深度学习#cs231n

    • TensorFlow(四)——RNN实现MNIST的分类

      2018-08-02

      #python#tensorflow

    • NLP——word2vec

      2018-08-01

      #深度学习

    • TensorFlow(三)——两层CNN神经网络实现MNIST的分类

      2018-07-31

      #python#tensorflow

    • Ipython 与 Jupyter Notebook

      2018-07-29

      #python

    • TensorFlow(二)——单层神经网络实现MNIST的分类

      2018-07-26

      #python#tensorflow

    • TensorFlow(一)——两层神经网络预测线性回归

      2018-07-26

      #python#tensorflow

    • cs231n笔记(二)——最优化

      2018-07-26

      #深度学习#cs231n

    • 进程和线程

      2018-07-26

      #硬件

    • cs231n笔记(五)——卷积神经网络

      2018-07-25

      #深度学习#cs231n

    • cs231n笔记(四)——神经网络

      2018-07-18

      #深度学习#cs231n

    • cs231n笔记(三)——分段式反向传播求梯度

      2018-07-16

      #深度学习#cs231n

    • cs231n笔记(一)——线性回归、逻辑回归、多分类

      2018-07-15

      #深度学习#cs231n

    • 2018-07-15

    • 程序是怎样跑起来的

      2018-07-14

      #硬件

    • 解决pip安装慢的问题

      2018-06-28

      #python

    • Deep-Learning-吴恩达-作业(七)

      2018-06-28

      #深度学习#python

    • Deep Learning 吴恩达 课程笔记大纲

      2018-06-27

      #深度学习

    • Deep-Learning-吴恩达-作业(六)

      2018-06-25

      #深度学习#python

    • Deep-Learning-吴恩达-作业(五)

      2018-06-25

      #深度学习#python

    • Deep-Learning-吴恩达-作业——关于plot_decision_boundary()函数的理解

      2018-06-25

      #python#机器学习

    • Deep-Learning-吴恩达-作业(四)

      2018-06-24

      #深度学习#python

    • 深度学习和强化学习

      2018-06-21

      #机器学习

    • Deep-Learning-吴恩达-作业(三)

      2018-06-20

      #深度学习#python

    • Deep Learning 吴恩达 作业(二)

      2018-06-20

      #深度学习#python

    • Deep Learning 吴恩达 作业(一)

      2018-06-15

      #深度学习#python

    • anaconda,conda,pip的关系

      2018-06-13

      #python

    • 正则表达式

      2018-06-11

    • 机器学习算法回顾目录

      2018-06-05

      #机器学习

    • Cygwin 安装

      2018-06-01

      #Linux

    • Git 学习

      2018-06-01

      #Git

    • CryptoKitties

      2018-05-28

      #区块链

    • 2050大会——关于图像处理的收获

      2018-05-28

      #Advanced Technology

    • 虚拟机和云(特别简陋的认识)

      2018-05-18

      #云

    • 啥叫运营商

      2018-05-18

    • XML、YAML、JSON

      2018-05-14

      #数据结构

    • 傅里叶变换和图像处理

      2018-05-14

      #opencv

    • 机器学习算法大总结

      2018-05-11

      #机器学习

    • python入门编程

      2018-05-09

      #python

    • CommandLineParse类

      2018-05-08

      #opencv

    • argc和argv

      2018-05-08

      #C++

    • Hexo主题的优化

      2018-05-08

      #Hexo

    • ImageWatch

      2018-05-07

      #opencv

    • 天池比赛入门

      2018-05-07

      #机器学习

    • 编译器和解释器

      2018-05-04

      #编译

    • GitHub+Hexo 搭建自己的博客

      2018-05-04

      #Hexo

    • Hello GitHub

      2018-05-03

      #Hexo#纪念第一篇文章

    • 师兄的Blog
    JZY

    研究生:东南大学电子学院
    本科:南京理工大学电光学院