第一课 week2
2.1 二分类
m m m :训练样本数量
n x n_x nx :特征向量维度
2.2 逻辑回归
由于输出的y是概率,应该在 ( 0 , 1 ) (0,1) (0,1) 之间,所以不能用 w T x + b w^Tx+b wTx+b 作为输出,使用 s i g m o i d sigmoid sigmoid 函数进行处理,输出 σ ( w T x + b ) \sigma(w^Tx+b) σ(wTx+b) 。
也可以设置 x 0 = 1 x_0=1 x0=1 ,然后将原等式变成 y ^ = σ ( θ T x ) \hat{y}=\sigma(\theta^Tx) y^=σ(θTx) ,其中 θ 0 = b \theta_0=b θ0=b ,但是在神经网络中,将 w w w 和 b b b分开处理更好,所以不采取该种表示方式。
2.3 逻辑回归损失函数
训练样本 i i i 对应的预测值为 y ^ ( i ) \hat{y}^{(i)} y^(i)。用上标 ( i ) (i) (i) 表示与第 i i i 个样本有关。
loss function是针对单一训练样本的,cost function是衡量全体训练样本的表现。
通过损失函数 L L L 来衡量预测值与输出实际值有多接近。
2.4 梯度下降
对于逻辑回归而言,几乎任意初始化方法都有效,其他方法通常都用
0
0
0 进行初始化,但是在逻辑回归中我们不这样做。
2.5 导数
2.6 导数例子
2.7 计算图
2.8 计算图的导数计算
最后要优化的是计算图中最后一个符号。
注意代码中对变量的表示方式。
- d v = d J d v dv=\frac{dJ}{dv}\quad dv=dvdJ d a = d J d a da=\frac{dJ}{da} da=dadJ
2.9 逻辑回归的梯度下降
2.10 m个样本的梯度下降
代码中的 d w 1 dw_1 dw1 和 d w 2 dw_2 dw2 是作为累加器使用的。
该算法有缺点:要进行2次for循环,一次是遍历m个样本,一次是遍历所有特征。
2.11 向量化
向量化的计算速度比for循环要快。
2.12 向量化例子
将2个for循环优化成1个for循环+向量化。
注: d z ( i ) = a ( i ) − y ( i ) dz^{(i)}=a^{(i)}-y^{(i)} dz(i)=a(i)−y(i) ,图里好像写错了
2.13 向量化逻辑回归
正向传播:
2.14 向量化逻辑回归梯度下降
反向传播:
如果要进行多次迭代梯度下降,那么仍然需要使用for循环。
2.15 Python广播
axis=0
是竖直相加。
reshape()
来确保矩阵形状是我们想要的。
2.16 Numpy
优点:让python语言的表现力更强,一行代码可以完成很多运算。
缺点:灵活性强可能会导致引入一些非常细微的错误,如将行向量与列向量相加。
(5,)
:既不是行向量也不是列向量,是秩为1的数组
将 a 定义成 5*1 的矩阵, print 后有两个方括号。
因此在编程中,不要将 a 定义成数组,要定义成向量!
如果不确定一个向量具体的维度是多少,可以使用assert()
进行确认。
2.17 Jupyter
2.18 逻辑回归损失函数解释
负号的解释:当训练学习算法时,希望输出值的概率是最大的,但在逻辑回归中,我们需要最小化损失函数,因此最小化损失函数就是最大化 l o g ( P ( y ∣ x ) ) log(P(y|x)) log(P(y∣x))。
训练时目标是最小化成本函数,而不直接用最大似然概率,所以去掉负(下图中箭头所指向的)。