吴恩达老师深度学习专项学习笔记

文章目录

    • (一)神经网络与深度学习
      • 一、概论
      • 二、神经网络基础
      • 三、浅层神经网络
      • 四、深层神经网络
    • (二)改善深层神经网络
      • 一、深度学习的实用层面
      • 二、优化算法:
      • 三、超参数调试
    • (三)机构化机器学习项目
      • 一、ML策略(一)
      • 二、ML策略(二)

(一)神经网络与深度学习

一、概论

  1. 神经网络:
    神经元:◯表示非线性函数
    神经网络:像乐高积木一样堆叠神经元
  2. 用神经网络进行监督学习(目前神经网络的落地方向比较成熟)
    结构化数据(海量数据, 广告,赚钱)
    非结构化数据(图片、语音)
  3. 为什么兴起
    数据变多,计算机,算法
    吴恩达老师深度学习专项学习笔记_第1张图片

二、神经网络基础

  1. 符号标记

    吴恩达老师深度学习专项学习笔记_第2张图片

  2. logistic 回归

    回顾之前学习内容:参考线性回归:
    h θ ( x ) = g ( θ T x ) s i g m o i d 函 数 : g ( z ) = 1 1 + e − z h_\theta(x)=g(\theta^Tx)\\sigmoid函数:g(z)=\frac{1}{1+e^{-z}} hθ(x)=g(θTx)sigmoidg(z)=1+ez1

  3. 逻辑回归可以看作很小的神经网路哦吴恩达老师深度学习专项学习笔记_第3张图片
    吴恩达老师深度学习专项学习笔记_第4张图片
    吴恩达老师深度学习专项学习笔记_第5张图片
    吴恩达老师深度学习专项学习笔记_第6张图片

  4. 梯度下降法
    w : = w − α d w b : = b − α d b w := w - \alpha dw\\b := b - \alpha db w:=wαdwb:=bαdb

  5. 反向传播:

    image-20210111095721696

  6. 整体过程(使用两个for循环)
    吴恩达老师深度学习专项学习笔记_第7张图片

  7. 整体过程向量化(利用CPU和GPU的单指令流)

    吴恩达老师深度学习专项学习笔记_第8张图片

    吴恩达老师深度学习专项学习笔记_第9张图片
    吴恩达老师深度学习专项学习笔记_第10张图片
    吴恩达老师深度学习专项学习笔记_第11张图片

  8. python的broadcasting机制
    coding小技巧:reshape()来检验你的矩阵是否正确,有用而且几乎不费运行时间
    吴恩达老师深度学习专项学习笔记_第12张图片

    但是用不好很容易出现bug,一些编程小技巧:

    1. 不要使用秩为1的矩阵(5,),因为这种数据结构既不是行向量也不是列向量,转置是一个行向量,所以np.random.randn(5),np.random.rand(5,1)差别很大

    2. 如果不确定一个矩阵的大小,使用

      assert(a.shape == (5,1))
      
    3. np.multiply :数组和矩阵对应位置相乘,输出与相乘数组/矩阵的大小一致
      np.dot():对于秩为1的数组,执行对应位置相乘,然后再相加;
      对于秩不为1的二维数组,执行矩阵乘法运算;超过二维的可以参考numpy库介绍。
      星号(*)乘法运算:对数组执行对应位置相乘
      对矩阵执行矩阵乘法运算
      

三、浅层神经网络

  1. 网络结构图概览:
    吴恩达老师深度学习专项学习笔记_第13张图片

  2. 神经网络各个参数的表示:

    吴恩达老师深度学习专项学习笔记_第14张图片
    吴恩达老师深度学习专项学习笔记_第15张图片
    吴恩达老师深度学习专项学习笔记_第16张图片
    吴恩达老师深度学习专项学习笔记_第17张图片

  3. 激活函数的选择(自己尝试一下哎,怎么测试好坏呢,交叉验证集???)

    1. sigmoid函数
      σ ( z ) = 1 1 + e ( − z ) 导 数 : σ ( z ) ( 1 − σ ( z ) ) \sigma(z) = \frac{1}{1 + e^{(-z)}}\\导数:\sigma(z)(1 - \sigma(z)) σ(z)=1+e(z)1σ(z)(1σ(z))

    2. tanh函数==(是sigmoid的平移,但几乎在任何场合都比它优越,但在在二元分类输出层还是使用sigmoid,使其结果在0到1)==
      t a n h ( z ) = e z − e − z e z + e − z ( 在 − 1 和 1 之 间 取 值 ) 导 数 : 1 − ( t a n h ( z ) ) 2 tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}} (在-1和1之间取值)\\导数:1-(tanh(z))^2 tanh(z)=ez+ezezez111(tanh(z))2

    3. relu函数–线性修正单元(解决1 2 的z很大时斜率接近于零问题,它的斜率为0到1)
      r e l u ( z ) = m a x { 0 , z } relu(z) = max\{0,z\} relu(z)=max{0,z}

    4. leaky relu,很少用(z为负的时候斜率很小但不为0)

  4. 为什么要使用激活函数?(引入非线性)

  5. 反向传播算法

    吴恩达老师深度学习专项学习笔记_第18张图片

  6. 随机初始化
    不能将参数全部初始化为0,原因如下:
    同一层的节点将会有相同的值,即隐藏层单元有同样的函数

    w = np.random.randn(2,2) * 0.01  \\是初始化值过大会使sigmoid函数接近零斜率小,变化慢
    b = np.zeros(2,1)
    

四、深层神经网络

  1. 符号标记:
    吴恩达老师深度学习专项学习笔记_第19张图片

  2. 核对矩阵维度:( 自己在纸上写一写)

  3. 为什么深度模型更好用

    吴恩达老师深度学习专项学习笔记_第20张图片
    吴恩达老师深度学习专项学习笔记_第21张图片

  4. 神经网络模块化:
    吴恩达老师深度学习专项学习笔记_第22张图片
    吴恩达老师深度学习专项学习笔记_第23张图片

    吴恩达老师深度学习专项学习笔记_第24张图片

  5. 参数和超参数:(保留交叉验证不断尝试)
    参数:W,b

    超参数:学习率,迭代次数,隐藏层数,隐藏单元,激活函数的选择
    后面要学的超参数:动量,批处理数,正则化参数

(二)改善深层神经网络

一、深度学习的实用层面

  1. 训练,测试,验证集(平时训练,模拟考试,考试)

    小数据集:6:2:2

    大数据集:100000个样本 98:1:1

    测试集和验证集最好有相同的分布

  2. 偏差和方差

    吴恩达老师深度学习专项学习笔记_第25张图片

  3. 机器学习基础
    吴恩达老师深度学习专项学习笔记_第26张图片

    偏差和方差的平衡 目前数据量足够网络足够深时可以做到都小

  4. 正则化:

    一般使用L2正则化(权重衰减矩阵)
    吴恩达老师深度学习专项学习笔记_第27张图片

    为什么使用正则化?

    w≈0,奥卡姆剃刀原理,消除一些隐藏单元的影响使网络不至于很复杂
    吴恩达老师深度学习专项学习笔记_第28张图片
    dropout是另一种正则化方法(反向随机失活)

    一个参数:keep-prob保留节点的概率
    吴恩达老师深度学习专项学习笔记_第29张图片

    • 这样做可以使节点不依赖于任何一个特征,因为这个特征可能会被dropout掉
    • 每一层参数不同可以设置不同的keep-prob值,参数多的值设置更小的值
    • 超参数少,通常应用于计算机视觉中
    • 画损失函数是否梯度下降时关闭Dropout,确保其单调递减后再打开dropout函数

    其他的正则化方法:

    • 数据增强:翻转,剪裁已有图片来扩增数据集

    • 早停法:缺点:不能同时减小方差和减小偏差,而L2正则化会有超参数需要调试

      吴恩达老师深度学习专项学习笔记_第30张图片

  5. 输入归一化,减少迭代时间,加速并使数值稳定,主要应用于两特征输入数值相差较大0.1-1,1-10000用就完了不会有伤害

    • 最大最小归一化
    • 正态分布归一化(一般采用)
    • l2归一化(稀疏矩阵)
  6. 梯度消失,梯度爆炸

    吴恩达老师深度学习专项学习笔记_第31张图片
    解决方法权重初始化(不能完全解决)

    吴恩达老师深度学习专项学习笔记_第32张图片

  7. 梯度检验:

    • 梯度的数值逼近

      吴恩达老师深度学习专项学习笔记_第33张图片

    • 梯度检验(检查是否反向传播有问题,可以节约很多时间)

      吴恩达老师深度学习专项学习笔记_第34张图片

    • 注意事项:

      1. 只在测试的时候使用梯度检验,在训练时不用,会减慢训练速度
      2. 如果发现有问题,怎么找到问题?追踪到相差比较大的层
      3. 注意正则化项
      4. 不能和梯度下降一同使用

二、优化算法:

作用:帮你快速训练模型

  1. mini-batch 梯度下降法(又一超参数)
    吴恩达老师深度学习专项学习笔记_第35张图片
    吴恩达老师深度学习专项学习笔记_第36张图片
    吴恩达老师深度学习专项学习笔记_第37张图片
    吴恩达老师深度学习专项学习笔记_第38张图片

    吴恩达老师深度学习专项学习笔记_第39张图片

  2. 指数加权平均
    吴恩达老师深度学习专项学习笔记_第40张图片
    计算指数加权平均只占单行数字的存储和内存,效率很高

    偏差修正:

    吴恩达老师深度学习专项学习笔记_第41张图片
    只在早期有修正效果

  3. 动量梯度下降法(一般快于标准梯度下降法)

    更加平缓: β \beta β的值一般设置为0.9

    吴恩达老师深度学习专项学习笔记_第42张图片

  4. RMSprop(root mean square prop)允许我们使用一个较大的学习率

    吴恩达老师深度学习专项学习笔记_第43张图片

  5. Adam==(RMSporp和Momentum的结合)推荐使用==

    吴恩达老师深度学习专项学习笔记_第44张图片

    一般设置参数如下:
    α 调 试 β 1 = 0.9 β 2 = 0.999 ε = 1 0 − 8 \alpha 调试\\ \beta1= 0.9\\ \beta2= 0.999\\ \varepsilon = 10^{-8} αβ1=0.9β2=0.999ε=108

  6. 学习率衰减

    • 方法一: α = α 0 1 + d e c a y r a t e ∗ e p o c h n u m \alpha = \frac{\alpha0}{1 + decayrate * epochnum} α=1+decayrateepochnumα0
    • 方法二: α = 0.9 5 e p o c h n u m ∗ α 0 \alpha = 0.95^{epochnum}*\alpha0 α=0.95epochnumα0
    • 方法三:离散衰减
    • 方法四:手动衰减
  7. 局部最优问题(优化算法面临的问题)

三、超参数调试

  1. 超参数的重要性排序:红色最重要,接着黄色,接着紫色Adma参数不用调

    吴恩达老师深度学习专项学习笔记_第45张图片

    随机均匀选择点

    吴恩达老师深度学习专项学习笔记_第46张图片

  2. 为超参数选择合适的范围

    • 区间两端点在同一量级则均匀随机选择
    • 区间两端点在不同量级,则取对数
      吴恩达老师深度学习专项学习笔记_第47张图片
    • 吴恩达老师深度学习专项学习笔记_第48张图片
  3. 超参数搜索过程

    • 资源少硬件差:在一个模型上尝试
    • 硬件强:多个模型参数并行
      吴恩达老师深度学习专项学习笔记_第49张图片
  4. Batch 归一化

    对于逻辑回归:数据归一化为正态分布

    对于深度神经网络:对神经网络的隐藏层也要优化

    对于输入单元你想让平均值为0方差为1,对于隐藏层单元可以通过设置参数 γ , β \gamma,\beta γ,β得到合适的分布

    吴恩达老师深度学习专项学习笔记_第50张图片
    吴恩达老师深度学习专项学习笔记_第51张图片

    吴恩达老师深度学习专项学习笔记_第52张图片吴恩达老师深度学习专项学习笔记_第53张图片

    • 为什么batch norm有用?
      1. 加快网络训练
      2. 减少了输入值改变的问题,使这些值变得更稳定,后层网络更独立于前层参数
      3. 类似于Dropout,有稍微轻微的正则化作用

    吴恩达老师深度学习专项学习笔记_第54张图片

  5. softmax回归(完成多分类)

    特殊之处:输入一组数,输出一组数,其他激活函数都是输入一个数,输出一个数

    吴恩达老师深度学习专项学习笔记_第55张图片
    怎么训练带有softmax的模型

  6. 深度学习框架:(只需将正向传播写出,会自动求出反向传播)
    吴恩达老师深度学习专项学习笔记_第56张图片

  7. tensorflow(会画出计算图)

    吴恩达老师深度学习专项学习笔记_第57张图片

(三)机构化机器学习项目

一、ML策略(一)

可以调节的参数太多,怎么提高效率

  1. 正交化:每调节一个参数,只对一个方面造成影响,不然调节很困难

    吴恩达老师深度学习专项学习笔记_第58张图片

  2. 单数字评估指标:

    机器学习,你有一个idea,然后实现它,最后进行评估,评估时要使用一个指标衡量哪个模型好,而不是多个指标

    • 怎么设计这个单评估指标呢?

      满足和优化指标:共N个指标,对一个指标进行优化,对于另外N-1个指标只要满足不等式条件(即设置一个门槛)就不考虑它的具体大小。

  3. 训练、开发、测试集的划分:

    测试集和验证集要有相同的分布

    吴恩达老师深度学习专项学习笔记_第59张图片

    大小比例:
    吴恩达老师深度学习专项学习笔记_第60张图片

    对于test set 的大小,我们有时候不需要对系统有置信度很高的评价,甚至不单独分出测试集也是可以的

  4. 改变指标:

    对原来的指标评估的模型不满意要重新设计指标
    吴恩达老师深度学习专项学习笔记_第61张图片

  5. 可避免方差:(人类标记误差约等于贝叶斯方差),看出是高bias还是高variance,从而调节参数。

    吴恩达老师深度学习专项学习笔记_第62张图片

  6. 理解人的表现
    吴恩达老师深度学习专项学习笔记_第63张图片
    越接近人类水平越难

  7. 超过人类的表现:

    在超过人的表现时,进展越来越慢
    吴恩达老师深度学习专项学习笔记_第64张图片
    目前,超过人类的方面主要是有结构化数据,计算机视觉等非结构化数据的领域表现有待提高(即自然感知任务)

二、ML策略(二)

  1. 误差分析(虽然费时间,但很有必要。要迅速分析哪个方向是有希望的,不要玄学调参)

    如果你模型的准确率不高,查看100张你分错的图片分析问题
    吴恩达老师深度学习专项学习笔记_第65张图片

  2. 清楚标记错误的数据

    如果数据集很大则基本不需要修正标签,还是进行错误分析,看是否值得

    吴恩达老师深度学习专项学习笔记_第66张图片

    • 如果值得怎么修改呢?

      吴恩达老师深度学习专项学习笔记_第67张图片

  3. 快速搭建你的机器学习系统,然后不断迭代,不断改进

  4. 在不同的划分上训练并测试:

    吴恩达老师深度学习专项学习笔记_第68张图片

  5. 不匹配数据划分的偏差(训练,验证,测试集来自不同的分布)
    如果训练集和测试集来自不同的分布,而你训练好的模型在测试集上偏差不大,而在验证集上有较大偏差,则不能放心的说high variance。因为此时有两个变量:

    • 只见过测试集没见过开发集
    • 而开发数据集还来自不同的分布

    吴恩达老师深度学习专项学习笔记_第69张图片

    吴恩达老师深度学习专项学习笔记_第70张图片

  6. 解决数据不匹配问题

    • 人工分析理解测试,验证,训练集的不同

    • 训练更多相似于验证集和测试集的数据,那数据怎么来呢,可以人工合成数据(加入一些噪音)

      合成时注意过拟合问题,因为人类看起来很逼真,但实际不行

  7. 迁移学习(深度学习强大的地方可以将一个地方学到的知识应用于另外的地方,但你别期望效果有多好)

    应用于:原问题有很多数据,而迁移目标问题的数据量不多

    做法:重新训练神经网络的最后一层参数,甚至可以加几层用于训练。

    好处:训练更快,数据量需求小

    预训练和微调的概念:

    例子:图像识别应用于医疗放射科任务

  8. 多任务许学习
    (并行,试图让单个神经网络同时做几件事,每个任务都能帮助到其他任务,只要你的神经网络足够强大,就不会降低性能)

    例如:无人驾驶 ,同时要看,有没有行人,有没有车,有没有红绿灯,有没有交通标志,与softmax不同,不是只给图像一个标签,它要在一张图片上同时识别人、车、红绿灯、交通标志。

    应用:目标检测

    吴恩达老师深度学习专项学习笔记_第71张图片

  9. 端到端的深度学习(end-to-end deep learning):让数据说话,减少手工组件

    最大挑战:需要大量数据

    吴恩达老师深度学习专项学习笔记_第72张图片
    例子:门禁的人脸识别系统:

    先检测到人脸,放大剪裁人脸图像放到神经网络(没有足够数据时的做法)
    吴恩达老师深度学习专项学习笔记_第73张图片

    • ​ 你设计的可能不好,让算法自己找到更好的表示方法

你可能感兴趣的:(机器学习,神经网络,机器学习,算法,python)