吴恩达神经网络和深度学习课程自学笔记(二)之神经网络基础

来源:互联网 发布:网购比价软件 编辑:程序博客网 时间:2024/05/29 15:47

一:一些符号表示


例如将图片转换为像素点后输入。


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 :
重复直至收敛 {
    w := w - α(d j(w)/ d w )
}

求得 w 之后,用同样方法求得 b :

重复直至收敛 {
    b:= b - α(d j(w,b)/ d 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)  ------正确的





阅读全文
1 0
原创粉丝点击