吴恩达深度学习第一课第二周

时间:2021-09-20 20:11:11

第二周 神经网络基础

打卡(1)

2.1 二分类吴恩达深度学习第一课第二周

在二分分类问题中 目标是训练处一个分类器,它以图片(本例中)的特征向量X作为输入,来预测输出的结果标签y是1还是0,也就是预测图片中是否有猫。

课程中会用到的数学符号:

  • ( x , y ) :表示一个单独的样本;
  • x R n x :表示x是 n x 维的特征向量;
  • y {0, 1} :标签y值为0或1;
  • 训练集有m个训练样本构成: ( x ( 1 ) , y ( 1 ) ) 表示样本一的输入和输出; ( x ( 2 ) , y ( 2 ) ) 表示样本二的输入和输出… ( x ( m ) , y ( m ) ) ,这些样本整个一起就表示训练集,m表示训练样本的个数。 m = m t r a i n ( ) , m = m t e s t
  • 神经网络中构建的输入矩阵 X 中,通常行表示样本数; 列表示特征维度。
    吴恩达深度学习第一课第二周

2.2 logistic回归

吴恩达深度学习第一课第二周
(向量 w 一般默认为列向量,转置为行向量)
* sigmoid函数的函数值 {0,1},且当自变量趋近负无穷大时,函数值趋近为0; 当自变量趋近为正无穷大是,函数值趋近为1.
* 神经网络中,特征参数向量 w 和截距 b 通常看做独立的参数,不像红色公式中那样表达会更好(红色公式在本课程中不会使用)

2.3 logistic回归损失函数

吴恩达深度学习第一课第二周
logistic的损失函数是: ( y l o g y ^ + ( 1 y ) l o g ( 1 y ^ ) ) (logistic的损失函数之所以不用 1 2 ( y ^ y ) 2 是因为这个损失函数在使用梯度下降法时可能会产生非凸优化问题)。
* 损失函数适用于单个训练样本;而成本函数是基于参数的总成本,在训练logistic模型时,我们要找到合适的参数 w b ,就是找到让的成本函数 J 尽可能小的 w b

打卡(2)

2.4 梯度下降法

吴恩达深度学习第一课第二周
通过梯度下降法求解使得成本函数最小的参数向量 w 和截距 b
吴恩达深度学习第一课第二周
* 编写代码时 w 的对 J ( w , b ) 的偏微分用 d w 表示, b 的偏微分用 d b 表示

2.5 导数

(略)

2.6 更多的导数例子

(略)

2.7 流程图

吴恩达深度学习第一课第二周
* 流程图是用蓝色箭头画出来的,从左到右的计算
* 流程图的导数是用红色箭头画出来的,从右到左

2.8 流程图的导数计算(反向传播)

吴恩达深度学习第一课第二周

2.9 logistic回归中的梯度下降

吴恩达深度学习第一课第二周
* " d z "= d l d a d a d z ,
其中,
a = σ ( z ) = 1 1 + e z
d a d z = e z ( 1 + e z ) 2 = 1 ( 1 + e z ) ( 1 1 1 + e z ) = a ( 1 a )
" d z "= a y a ( 1 a ) a ( 1 a ) = a y

打卡(3)

2.10 m个样本的梯度下降

吴恩达深度学习第一课第二周
吴恩达深度学习第一课第二周

2.11 向量化

Z = w T x + b ,
其中, w , x 都是列向量;
代码表示为:

z=np.dot(w,x) 
import numpy as np
a=np,array([1,2,3,4])
print(a)
>>>[1 2 3 4]
import time 
a= np.random.rand(1000000)
b= np.random.rand(1000000)

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

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

向量化计算,比循环遍历计算速度快很多。
SIMD:并行计算(在GPU和CPU都行)

2.12 向量化的更多例子

Python中实现将
V = [ v 1 , . . . , v n ] T ,转换成
U = [ e v 1 , . . . , e v n ] T ,可以用向量化方法(避免循环遍历)。

import numpy as np
u=np.exp(v)

np.log(v)
np.abd(v)
np.maxnum(v,0)
v**2 #v中的每个元素平方
1/v #v中的每个元素的导数

2.13 向量化logistic回归

吴恩达深度学习第一课第二周

2.14 向量化logitici回归的梯度计算

吴恩达深度学习第一课第二周
吴恩达深度学习第一课第二周

2.15 python中的广播

(略)

2.16 关于Python/numpy向量说明

编写神经网络程序是,最好不要用1维数组,用矩阵

a=np.random.randn(5)
a.shape
>>>>(5,) #这不属于矩阵

创建向量时,把向量定义为列向量易于运算

a=np.random.randn(5,1)
a.shape
>>>>(5,1) #列向量

assert(a.shape==(5,1)) 声明矩阵的维度

2.17 Jupter/Ipython笔记本的快速指南

(略)

2.18 logistic损失函数的解释

  • 损失函数:
    吴恩达深度学习第一课第二周
  • 成本函数:
  • 吴恩达深度学习第一课第二周