吴恩达 Neural Networks and Deep Learning deeplearning.ai
1.2 什么是神经网络(Neural Network)
通过一个神经元(Neuron)预测房价,这个神经元输入是面积,经过线性计算,输出不小于 0 的价格,也就是 ReLU 函数(修正线性单元,Rectified Linear Unit,修正是指取不小于 0 的值),这就是最简单的神经网络,大型神经网络通过堆叠神经元组成。
1.3 用神经网络进行监督学习
对不同的问题选择最合适的模型
1.4 为什么深度学习会兴起
随着人类在网络上创造的数据越来越多,收集大量数据越来越容易,并且随着投入数据的增加,大规模神经网络的性能增速要远超其他算法。同时硬件的快速发展也带动了神经网络的规模增大。
算法的改进(比如将 Logistic 函数换成 ReLU 改进大于 1 时梯度过小的问题)可以提升训练速度和性能,速度的提升又能使算法迭代更快
Geoffrey Hinton Interview
Geoffrey Hinton Interview - Introduction to Deep Learning | Coursera
Geoffrey Hinton 并不是第一个发明反向传播算法的人,但他的 paper 是第一个有显著影响力的。因为他花了大量工作让他人理解这套算法,1986 年 Nature 的编辑里有个心理学家,Geoffrey 也学过心理学,他用更直观的方式使编辑理解了算法。
只是埋头做研究还不够,让别人理解并接受研究成果同样重要。
2.1 二分分类
本课程比起 ML 有一些改进,X 中的每个 x 向量改为列向量,编程环境改成 python
2.2 Logistic Regression
这里使用新的符号表示线性计算:y=wx+b,ML 课里的 θ0 在这里是 b,更清晰了
2.3 Logistic
补充:对数几率回归
逻辑回归(Logistic Regression)是一种广义线性回归。
(西瓜书里认为 Logistic Regression 翻译成逻辑回归不太准确,翻译成了对数几率回归)。
线性回归解决的是回归问题,预测值是实数范围,逻辑回归则相反,解决的是分类问题,预测值是[0,1]范围。
所以逻辑回归名为回归,实为分类。
二分类情况下很容易理解,分类标签为 0、1,预测结果在[0,1]之间,我们得到的实际上是样本为 0 或 1 的概率。
2.4 梯度下降法
2.7 计算图
链式法则
2.8 使用计算图求导
反向传播类似链式法则,若求 u 关于 J 的偏导:dJ/du,从 J 出发走到 u,有几条路最后就有几大项相加,同一条路每有几座桥最后就有几项相乘。
机器学习中的自动求导的原理是,对于每一个神经元中做的每一个最小的计算,预先算好导数,在需要求某个参数的导数时,按照链式法则从右向左反向依次将导数相乘得到结果
补充:复合函数求导,链式法则
补充:神经网络
[Deep Learning] 神经网络基础 - Poll 的笔记 - 博客园
补充:反向传播
一文弄懂神经网络中的反向传播法——BackPropagation - Charlotte77 - 博客园
补充:自动求导
2.9 Logistic 回归中的梯度下降法
将 Logistic Regression 写成神经网络的格式,第一步,对 L(a,y)求导:
算好 dz 之后,求 dwn 只需和 wn 直接相乘就可以了,然后又是熟悉的梯度下降公式
2.10 m 个样本的梯度下降
不使用向量化的单次梯度下降逻辑
2.11 向量化
2.12 向量化更多例子
2.13 向量化 Logistic 回归
2.14 向量化 Logistic 回归的梯度输出
2.15 Python 中的广播
https://www.runoob.com/numpy/numpy-broadcast.html
2.16 关于 Numpy 向量的说明
不要使用数组,始终用明确行列的矩阵,并适时使用 assert 确保 shape 是预期的,否则会产生各种难以调试的 bug
2.18 Logistic 代价函数的解释
最大似然估计、加 log 方便求导
补充:交叉熵代价函数
交叉熵(cross-entropy)
看得见的信息论-为什么用交叉熵作为逻辑回归的代价函数
逻辑回归与交叉熵
3.1 神经网络概览
方括号表示 Leyer,圆括号表示第几个样本
3.2 神经网络表示
这是一个双层神经网络的表示,一般忽略输入层,所以有实际计算的是隐藏层和输出层两层。
之前的 X 现在=a^[0],预测结果 y hat = a^[2]
3.3 计算神经网络的输出
方括号上标表示第几层,下标表示第几个节点
3.4 多个样本的向量化
3.5 向量化的解释
矩阵两个维度,第几个参数/节点,第几个样本
3.6 激活函数
激活函数(Activation Function)
深度学习领域最常用的 10 个激活函数,一文详解数学原理及优缺点
Sigmoid 函数适合用在二元分类最后的 output 节点中,非要用在隐藏层的话应该选择 tanh 函数,因为平均值更接近 0,梯度下降更快。
目前最流行的是 ReLU 函数,因为大于 0 时梯度为 1,梯度下降更快,可以直接在隐藏层中替换掉 Sigmoid。
Leaky ReLU 弥补了小于 0 梯度为 0 的缺点
3.7 为什么需要非线性激活函数
线性激活函数是指输出直接等于输入,a=z,这会导致 y hat 就等于这些线性计算的组合,还是个线性函数,那么无论有多少层和一层是等效的。只能解决线性可分问题,如果要解决线性不可分问题就必须使用非线性激活函数
3.8 激活函数的导数
Sigmoid
关于 g’=g(1-g):
Tanh
g’=1-g^2
ReLU and Leaky ReLU
这里的激活函数的导数很明显是预先计算好最优的,为了节省计算量尽可能复用正向传播的计算结果
3.9 神经网络梯度下降
一文弄懂神经网络中的反向传播法——BackPropagation - Charlotte77 - 博客园
反向传播上面的博客讲的很清楚了,还是要带入数值计算
3.10 直观理解反向传播
目前只是求导
3.11 随机初始化
如果并排的神经元的权重相同,则两个神经元的函数相同,出现对称,会影响梯度下降。
全部初始化为 0 则所有神经元的计算是一样的,对结果的共享一样,无论梯度下降运行多久,所有神经元的仍然进行一样的计算
初始参数太大可能导致分类算法的激活函数落在梯度接近 0 的部分,会减慢梯度下降速度,神经网络越深,初始值应该越小
Pieter Abbeel Interview
深度强化学习应用前景广阔,比如让机器人学习叠衣服、走路等等,并且是无监督学习。还可以用在根据屏幕像素打游戏上
4.1 深层神经网络
方括号上标代表神经网络层数,n 代表当前层有几个神经元
4.2 深层网络中的正向传播
4.3 检查矩阵的维度
实现深层神经网络的时候一定要注意矩阵的维度,可以用纸和注释记录并检查
L 是第几层,m 是样本数,n 是每层节点数
z = wx+b
a = Activision(z)
维度:
z、a:(n[L], n[L-1])
Z、A:(n[L], m)
x:(n[L-1], 1)
X:(n[L-1], m)
b:(n[L], 1)广播到(n[L], m)
4.4 为什么使用深度表示
神经网络将复杂的问题分而治之,如果要识别人脸,则先识别边缘,用边缘组合成局部,再组合成鼻子眼睛,最后组合成人脸。电路设计中也有同样的现象,同一个函数,如果用多个隐藏层实现,使用的门的数量是 O(logn),而只用一层需要的门的数量是 O(2^n),相当于穷举法
4.5 搭建神经网络基础组成部分
将之前单层神经元的计算封装成可复用的模块
4.6 前向和反向传播
传播算法流程图
正向输入样本 X,输出预测 y hat 和 cost
反向输入 da 对于 J 的导数,中间模块输出每个元素的导数和上一层的 da
中间模块可以任意修改层数 L 和每层神经元数 n
4.7 参数 vs 超参数
超参数(Hyper Parameters)指影响 W、b 参数的参数,比如 Iterations、Learning Rate、Layers
超参数的设置目前主要基于经验,多尝试几次,选择最适合自己的
4.8 这与大脑有什么关系
目前对大脑的研究还远远不足以解释神经元的学习原理,神经网络是对生物神经元的过度简化,他们之间一点都不像
4.9 作业:一步步构建深度神经网络
采访 lan Goodfellow
花书作者之一,GAN 创始人,早期研究神经学
GAN 是目前深度学习的中心,机器学习算法的安全性很重要
- Title: 吴恩达 Neural Networks and Deep Learning deeplearning.ai
- Author: Jason Ma
- Created at: 2022-03-19 18:28:15
- Updated at: 2023-06-14 23:23:27
- Link: https://elysium.jason-ma.com/2022/03/19/Reading/吴恩达 Neural Networks and Deep Learning deeplearning.ai/
- License: This work is licensed under CC BY-NC-SA 4.0.