【吴恩达】神经网络&深度学习-学习笔记【一】

神经网络-深度学习 - 吴恩达 - 第一课

一、基础介绍

1.1 神经网络-监督学习

image-20220427095400814

​ 神经网络建立模型(监督学习)

1.2 监督学习分类:

​ 1.标准神经网络(NN)- 一般模型

​ 2.卷积神经网络(CNN)- 图像

​ 3.循环神经网络 (RNN) - 音频

​ 4. 混合神经网络 - 复杂系统

  1. 结构化数据/非结构化数据

结构化:房价预测模型中的数据,都有其特定的含义,比如房屋尺寸,房间数量等

非结构化数据:音频,视频,图像

神经网络既可以学习结构化数据,也可以学习非结构化数据。

  1. 神经网络发展的原因

image-20220407165857386

二、线性回归

2.1 训练集:

  • 一般用m代表:
image-20220407172811452
  • 标签集:
image-20220407172921146

2.2 logistic线性回归:

image-20220409185709054 image-20220409185835323

​ 在一些书中可能把b省略,直接结合在w内。

  • 线性回归误差函数(Loss/error function):

    误差函数,平方差,判断预测值y和实际值y的差距:

    image-20220409190231610

​ 实际应用中,选择的是上面这种误差(损失)函数,只适用于单个样本:

image-20220409192137983
PS: 这个log函数是怎么出来的?

image-20220411110119352

​ 成本函数,可以描述一整个训练集:

image-20220409192202142

​ PS: 这个成本函数是怎么出来的?

​ (log累乘等于拆开累加)

image-20220411111449437

​ 训练的目的——找到合适的 w,b 使成本函数足够小,达到训练的目的。

  • 梯度下降法:

image-20220409192915776

​ 因为成本函数是一个凸函数(sigmoid),只有一个最优解,在三维空间中,通过梯度下降法求最优解。

image-20220409192959339

​

​ 三维空间不好算,先看一个轴:

image-20220409193344467

​ 通过右边的梯度下降算法,可以看到右边减掉正的斜率,左边减掉负的斜率,就知道下一步更新的方向在什么位置。

​ 将其拓展到二维:

image-20220409193633301

​ 就可以得到两个 w,b 的梯度下降

2.3 计算图:

​ 前向传播 -> 直接代数

​ 反向传播 -> 求导数

image-20220409195834928

​ 关于单个样本的梯度下降法:

image-20220409202344753

​ 多个样本的梯度下降法:

image-20220409203447650

本质上就是一次次计算dw1,dw2,db

image-20220409210534722

2.4 向量化处理数据:

​ image-20220409211011216

import time
a = np.random.rand(10000000)
b = np.random.rand(10000000)

tic = time.time()
c = np.dot(a,b)
toc = time.time()

print(c)
print("Vectorized version:"+str(1000*(toc-tic))+"ms")

c = 0;
tic = time.time()
for i in range(1000000):
    c+=a[i]*b[i]
toc = time.time()

print(c)
print("For loop:"+str(1000*(toc-tic))+"ms")

​ CPU 和 GPU 都有并行指令,使用np.function 可以调用向量化指令,并行运算提高速度。

当需要使用向量化中的exp时,只需要np.exp即可

​ 向量化其实就是转换成并行计算

  • 向量化在线性回归中的应用:

    目的:消除for循环

    向量化 dz ,得到 A 向量化后的矩阵

image-20220410102716987

​ 再把梯度计算也加上:

​ 向量化 db ,直接用sum的dz求和后除m。向量化dw,dw中的X矩阵是一个样本矩阵,行是同一特征的不同样本,列是不同特征,共用dz

image-20220410104218671

image-20220410103911739

  • Python广播计算:

image-20220410105940052

​ Python广播很灵活,但是也很容易引入新错误,因此需要注意:

​ 定义向量的时候,要注意不要直接用rank定义,要用行、列定义

三、神经网络

3.1 基础模型

用上标表示是哪一个层:

image-20220412170345565

​ 神经网络的层数:隐含层数+输出层(不包含输入层):

image-20220412171007567

​ x为输入特征,a为激活函数。

​ 在这里w[1]为一个4X3矩阵,b[1]为一个4X1矩阵,因为输入有x1,x2,x3三个特征,因此w对每一个节点是一个3X1矩阵,四个拼起来取转置就是4X3了。

​ 输出层同理,w[2]为4x1的矩阵, 因为隐含层有四个特征,b[2]为1x1的矩阵。

​ 四个隐含单元的计算:

​ image-20220412172819418

​ 向量化可以加速计算。

​ 然后是整体的双层神经网络的计算:

image-20220412173412637

​ 输入x(也可以看做a[0]),算z[1], 然后代入激活函数求a[1]。

​ 接下来算z[2], 把前面的a[1] 当成输入,计算出z[2]后带入激活函数求a[2],得到最终输出。

​ 如果输入多样本的话,则:

image-20220412174837962

​ 对其向量化后,可得:

image-20220412215038346

​

3.2 激活函数

  • sigmoid函数:

    image-20220412215208770

​ 介于 0~1 之间

​ 缺点:当z数值很小或者很大时候,斜率很小,拖慢学习速度。

​ 适用:输出值为0和1,做二元分类时候适合做输出层激活函数,其他层用ReLU

  • tanh函数(通常更优):

    image-20220412215307108

​ 介于 -1~1 之间

​ 适用:比sigmoid更优

  • ReLU修正线性函数
image-20220412215754222

​ 适用:无斜率趋于0的的时候,不会拖慢学习速度。激活函数的默认选择,大多数人再用

​ 缺点:0处需要单独赋值,实际中影响不大;z在为负数时,导数为0。

  • Leaky ReLU带泄露的修正线性函数
image-20220412220258735

​ 修正负数的斜率为0的情况,不常用

如何选择激活函数:在开发集中都测试看看,选最优。

神经网络的本质:用一堆非线性函数拟合非线性函数

  • 为什么要用非线性激活函数?

    如果用线性激活函数,不管有多少隐含层,最终都可以直接抽象成一层,隐含层就没有意义了。

    PS:有可能用线性激活函数的情况——做回归的输出层(预测房地产价格等)

3.3 激活函数的导数

  1. sigmoid函数:

    image-20220412221530230

    z很大,很小的时候,斜率都接近于0,并且在0处,斜率为1/4

    d g(z) = a(1-a) a=g(z)

  2. tanh函数:

image-20220412221854542

3. ReLU函数:

image-20220412222044744
  1. Leaky ReLU函数:

    image-20220412222058399

3.4 实现梯度下降算法

​ 正向和反向传播

初始值的选择:

​ 权重矩阵初始值不能全部设置成0,否则所有的隐含层都是对称的,都是在执行一样的功能,就没有意义了:

image-20220415225921358

解决方法:用随机数初始化,如高斯随机函数,并且用很小的数值初始化,可以使其在激活函数中避免饱和,加快学习速度(若没有sigmoid或者tanh函数则影响不大):

image-20220415230148701

3.5 矩阵/向量求导法则:

  • 列向量对列向量求导:

求导布局:y为m维,x为n维,分子布局和分母布局分别如下:

image-20220412230628287image-20220412231059218

以上这个就是雅可比矩阵

机器学习中,一般用以下法则:

image-20220412231208641

  • 标量对向量求导:

image-20220412231737413

  • 矩阵微分:

image-20220412231816473

四、深度神经网络

4.1 基本模型

基本符号:

image-20220415211237341

正向传播:

image-20220415211955423

神经网络为什么需要多层?

image-20220415213339861

反向传播:

image-20220415214229094

image-20220415224355636

自己推导:

image-20220415224409604

反向传播中,权重矩阵需要取转置矩阵的原因:

https://blog.csdn.net/tugouxp/article/details/120171884

image-20220415224455472

4.2 超参数

超参数就是学习率(调参侠):

image-20220415225154164

不断地试,然后找出效果最好的一组学习率(要收敛)

posted @ 2022-05-19 22:43  伦敦烟云  阅读(243)  评论(0)    收藏  举报