01. 神经网络和深度学习
第二周 神经网络基础
2.1 二分分类
- 图片在计算机中的保存:三通道(红,绿,蓝)
-
X=[x(1),x(2),⋯,x(m)],每个列向量为一个样本。
2.2 logistic回归
- 给定x,目的是求y^=P(y=1∣x)。
- sigmoid函数
σ(z)=1+e−z1
- logistic回归
y^=σ(wT+b)
2.3 logistic回归损失函数
- 平方损失函数(在logistic中不常用,因为会导致非凸)
L(y^,y)=21(y^−y)2
- 熵损失函数
L(y^,y)=−(ylogy^+(1−y)log(1−y^))
- 成本函数
Jj(w,b)=m1∑i=1mL(y^(i),y(i))
2.4 梯度下降法
- 流程
w:=w−α∂w∂J(w,b)
b:=b−α∂b∂J(w,b)
2.5 导数
2.6 更多导数的例子
2.7 计算图
- 举例:J(a,b,c)=3(a+bc)
2.8 计算图的导数计算
- 计算图
- 链式法则
- 代码中常用变量:dvar,最终关心的输出变量的导数
2.9 logistic回归中的梯度下降法
- 计算图
2.10 m个样本的梯度下降
-
J=0;dw1=0;dw2=0;db=0fori=1tomz(i)=wTx(i)+ba(i)=σ(z(i))J+=−[y(i)loga(i)+(1−y(i))log(1−a(i))]dz(i)=a(i)−y(i)dw1+=x1(i)dz(i)dw2+=x2(i)dz(i)db+=dz(i)J/=mdw1/=m,dw2/=m,db/=m;
2. 问题:两次for循环,较为低效
3. 解决方法:向量化
2.11 向量化
- 什么是向量化
z=wTx+b
- 非向量化代码
z=0foriinrange(n−x):z+=w[i]∗x[i]z+=b
- 向量化代码
z=np.dot(w,x)
2.12 向量化的更多例子
- 神经网络编程指南
(1) 只要可能,尽量少用for循环;
- numpy常用函数:log, abs, maximum,**
- 向量化logistic梯度下降
2.13 向量化logistic回归
- Z=wTX+b
- Z=np.dot(w.T,X)+b
- A=σ(Z)
2.14 向量化logistic回归的梯度输出
- dz=[dz(1),dz(2),⋯,(m)]
- dz=A−Y
- db=m1np.sum(dZ)
- dw=m1XdzT
2.15 Python中的广播
- 广播可以使python运行更搞笑
- 例子(求每种食物中热量占比)
- 代码
cal=A.sum(axis=0)
percentage=100∗A/(cal.reshape(1,4))
增加reshape确保矩阵维度正确
- 广播举例
- 广播通用规则
(m,n)+−∗/(1,n)→(m,n)
(m,n)+−∗/(m,1)→(m,n)
(m,1)+(1,1)→(m,1)
(1,n)+(1,1)→(1,n)
2.16 关于python numpy向量的说明
- 不要使用(n,)形式的数据结构
例子:a=np.random.rand(5)→a=np.random.randn(5,1)
- 使用声明
例子:assert(a.shape==(5,1))
- 重塑矩阵
例子:a=a.reshape((5,1))
2.17 Jupyter ipython笔记本的快速指南
2.18 logistic损失函数的解释