吴恩达神经网络和深度学习课程自学笔记(二)之神经网络基础
一:一些符号表示
例如将图片转换为像素点后输入。
n 是特征维度,m 是样本(x,y)数量。向量X是n*m维向量,Y是1*m维向量。
使用列向量,计算更方便。python中 X.shape命令输出X的维度。
二:logistics回归
y^是预测值,y^ = P(y=1|x)。w 是n 维向量,b 是一个实数。
令z = w^T * x + b ,则有:
sigmod 函数
另一种表示方法:
x0 = 1;x 是 n+1 维向量 。
但是在神经网络中将w 和 b 看做独立的参数更好,因此不使用第二种表示方法。
损失函数:
损失函数L是用来衡量预测值(y^)和实际值(y)之间的差距。用于单个样本。
L = - ( y logy^ + (1-y) log(1-y^) )
如果 y = 1,L = - log y^ 为了使 L 最小,所以让 y^ 尽可能大,但是小于1;
如果 y = 0,L = - log (1-y^) 为了使 L 最小,所以让 y^ 尽可能小,但是大于0;
成本函数:
和损失函数功能类似,但是用于整个训练样本,衡量 w 和 b 的效果。是个凸函数。
求得 w 之后,用同样方法求得 b :
计算图:
J(a,b,c)=3(a+bc) u=bc v=a+u J=3v
反向传播计算(求导的链式法则):
dJ/dv = 3 dv/da = 1 ==》 dJ/da = dJ/dv * dv/da = 3*1=3
logistic回归中低度下降链式求导:
对于单个样本来说:
dL/da = dL(a,y)/da = (1-y)/(1-a) + -y/a
d(z) = dL(a,y)/dz = dL/da * da/dz = a-y
dL/dw1 = x1 * dz
对于m个样本来说:
最终:
w1 := w1 - α dw1
w2 := w2 - α dw2
b := b - α db
向量化:(代码运行速度快)
w,x为两个n维列向量
python中:z = np.dot(w.T,x)+b
应当多使用python的内置函数,少使用for循环。速度更快。
eg: np.log(v) 求v中每个元素的log值
np.abs(v) 求v中每个元素的绝对值
np.Maximum(v) 求v中最大值
v**2 v中每个元素平方
1/v v中每个元素的倒数
梯度下降的向量化 :
python中的广播:
(1)
cal = A.sum(axis = 0) 竖直求和
cal = A.sum(axis = 1) 水平求和
(2)
m*n矩阵 + - * / 另一个1*n矩阵 python广播将1*n矩阵转换为m*n
其他:
(1)不确定矩阵的尺寸时,调用reshape命令
percentage = 100 * A/(cal.reshape(1,4))
(2) a=np.random.randn(5) -----错误的
a=np.random.randn(5,1) ------正确的