Deep Learning Notes - 1.2深度学习基础

xiaoxiao2021-02-28  28

Deep Learning Notes - 1.2深度学习基础

二进制分类 Binary Classification

例如:判断图片中是否含有猫

图片为rbg模式,大小为 width×height w i d t h × h e i g h t ,使用矩阵(列向量)存储如下:

x=Mat_R1,1Mat_R1,2...Mat_G1,1Mat_G1,2...Mat_B1,1Mat_B1,2...nx×1 x = [ M a t _ R 1 , 1 M a t _ R 1 , 2 . . . M a t _ G 1 , 1 M a t _ G 1 , 2 . . . M a t _ B 1 , 1 M a t _ B 1 , 2 . . . ] n x × 1

其中 nx=3×width×height n x = 3 × w i d t h × h e i g h t ,并将 x x 作为输入。

输出: y={0  1  y={0  图片中有猫1  图片中无猫

任意一个实例可以表示为 (x,y) ( x , y ) xRnx x ∈ R n x y{0,1} y ∈ { 0 , 1 } ,矩阵化之后为:

Logistic 回归

给定 x x 的前提下,令y^=P(y=1|x)y^(0,1)y^=P(y=1|x),y^∈(0,1)

输出: y^=σ(wTx+b) y ^ = σ ( w T x + b ) xRnx x ∈ R n x wRnx w ∈ R n x bR b ∈ R

其中 σ(z)=11+ez σ ( z ) = 1 1 + e − z ,图像如下:

Loss 函数:

L(y^,y)=[ylogy^+(1y)log(1y^)] L ( y ^ , y ) = − [ y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) ]

Cost 函数:

J(w,b)=1mi=1mL(y^(i),y(i))=1mi=1m[y(i)logy^(i)+(1y(i))log(1y^(i))] J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ y ^ ( i ) + ( 1 − y ( i ) ) log ⁡ ( 1 − y ^ ( i ) ) ]

其中的 log log 均以 e e 为底。

梯度下降 Gradient Descent

计算(w,b)(w,b)来使得 J(w,b) J ( w , b ) 数值最小,以下是一次梯度下降公式:

w=wαJ(w,b)w w = w − α ∂ J ( w , b ) ∂ w

b=bαJ(w,b)b b = b − α ∂ J ( w , b ) ∂ b

其中, α α 为学习率。

此后,不再详细区分 d d 符号。

计算图

例如:

J(a,b,c)=3(a+bc) J ( a , b , c ) = 3 ( a + b c )

正向计算数值和反向计算导数的过程如下:

Logistic回归的梯度下降

z=wTx+b z = w T x + b

y^=a=σ(z) y ^ = a = σ ( z )

L(a,y)=[yloga+(1y)log(1a)] L ( a , y ) = − [ y log ⁡ a + ( 1 − y ) log ⁡ ( 1 − a ) ]

用于 m m 个样例,并高度向量化:

Python伪代码为:

# 高度向量化的目的是 # 减少for循环 # 以加快代码的运行速度 import numpy as np for i in range(1000): # 梯度下降1000次 # 计算 a (y hat) Z = np.dot(W.T, X) b A = sigmod(Z) dz = A - Y dw = 1/m * np.dot(X, dz.T) db = 1/m * np.sum(dz) w -= alpha * dw b -= alpha * db

Python Broadcasting

123 10=123 101010[123] 10=[123] [101010]

[142536]+[102030]=[142536]+[101020203030] [ 1 2 3 4 5 6 ] + [ 10 20 30 ] = [ 1 2 3 4 5 6 ] + [ 10 20 30 10 20 30 ]

[142536]+[1020]=[142536]+101010202020 [ 1 2 3 4 5 6 ] + [ 10 20 ] = [ 1 2 3 4 5 6 ] + [ 10 20 10 20 10 20 ]

Some Coding Techniques

记得创建行向量np.random.randn( (5,1) )、

列向量np.random.randn( (1,5) ),

而不要使用np.random.randn( 5 )

多使用reshape()函数没有坏处

尽可能多的使用assert( a.shape()==(5,1) )来保证程序的健壮性

转载请注明原文地址: https://www.6miu.com/read-2624714.html

最新回复(0)