【深度学习】(一) 概述

1. 由逻辑回归到深度学习

1.1 二分类

将一组输入特征向量 X 映射到一组输出,输出的取值为 $ (0,1) $,逻辑回归就是一个用于二分类的算法。

1.2逻辑回归符号定义

x x x : 表示一个 n1 维数据,为输入数据,维度为 ( n x , 1 ) (n_x, 1) (nx,1)

y y y :表示输出结果,取值为 ( 0 , 1 ) (0, 1) (0,1)

( x ( i ) , y ( i ) ) (x^{(i)}, y^{(i)}) (x(i),y(i)) :表示第 i 组数据,一般指训练集数据;

X = [ x ( 1 ) , x ( 2 ) , … … , x ( m ) ] X = [x^{(1)}, x^{(2)}, …… , x^{(m)}] X=[x(1),x(2),……,x(m)], 向量化表示所有训练数据的输入值,放在一个 n x ∗ m n_x*m nxm 的矩阵中, m 为样本数目;

Y = [ y ( 1 ) , y ( 2 ) , … … , y ( m ) ] Y = [y^{(1)}, y^{(2)}, …… , y^{(m)}] Y=[y(1),y(2),……,y(m)], 向量化表示所有训练数据的输出值,维度为 1 ∗ m 1*m 1m

w w w :表示参数,维度为 n x n_x nx*1。

b b b :表示偏置值;

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

a a a:预测值, a = σ ( z ) = s i g m o d ( z ) = 1 1 + e − z a = \sigma(z) = sigmod(z)= \frac{1}{1+{e^{-z}}} a=σ(z)=sigmod(z)=1+ez1

Z = [ z ( 1 ) , z ( 2 ) , … … z ( m ) ] Z = [z^{(1)}, z^{(2)},…… z^{(m)}] Z=[z(1),z(2)……z(m)] :向量化的 z

A = [ a ( 1 ) , a ( 2 ) , … … a ( m ) ] A = [a^{(1)}, a^{(2)},…… a^{(m)}] A=[a(1),a(2)……a(m)] :向量化的 a

1.3 激活函数

在逻辑函数里用的是 s i g m o d sigmod sigmod 函数,该函数可以将输入值映射到 0 − 1 0-1 01 之间:

s i g m o d ( z ) = 1 1 + e − z sigmod(z)= \frac{1}{1+{e^{-z}}} sigmod(z)=1+ez1

1.4 损失函数

损失函数,又叫误差函数,用于衡量预测结果与实际结果的偏差情况。符号: L ( y ^ , y ) L(\widehat{y}, y) L(y ,y)

在逻辑回归中使用交叉熵损失函数: L ( y ^ , y ) = − y l o g ( y ^ ) − ( 1 − y ) l o g ( 1 − y ^ ) L(\widehat{y}, y) = -ylog(\widehat{y})-(1-y)log(1-\widehat{y}) L(y ,y)=ylog(y )(1y)log(1y )

对于这个逻辑回归损失函数,我们也想让它尽可能地小:

y = 1 y = 1 y=1 时损失函数 L = − l o g ( y ^ ) L = -log(\widehat{y}) L=log(y ),此时如果希望 L L L 尽可能小,则 y ^ \widehat{y} y 就要尽可能大,由于 s i g m o d sigmod sigmod 取值为 [ 0 , 1 ] [0,1] [0,1],所以 y ^ \widehat{y} y 会无限接近 1 1 1

y = 0 y = 0 y=0 时损失函数 L = − l o g ( 1 − y ^ ) L = -log(1-\widehat{y}) L=log(1y ),此时如果希望 L L L 尽可能小,则 y ^ \widehat{y} y 就要尽可能小,由于 s i g m o d sigmod sigmod 取值为 [ 0 , 1 ] [0,1] [0,1],所以 y ^ \widehat{y} y 会无限接近 0 0 0

上述损失函数是一个样本的误差情况,在一整个训练集中,有很多个样本,所以对一整个训练集而言,代价函数为 :

J ( w , b ) = 1 m ∑ i = 1 m L ( y ( i ) ^ , y ( i ) ) J(w,b) = \frac{1}{m}\sum_{i=1}^mL(\widehat{y^{(i)}}, y^{(i)}) J(w,b)=m1i=1mL(y(i) ,y(i))

1.5 向量化前向传播

前向传播是指由输入计算到输出的过程:

Z = w T X + b Z = w^TX+b Z=wTX+b

A = σ ( Z ) A = \sigma(Z) A=σ(Z)

1.6 向量化反向传播

反向传播是指由后往前计算梯度或偏导数的过程

单个样本反向传播:

d z = ( d J d a ) ( d a d z ) = a − y dz = (\frac{dJ}{da})(\frac{da}{dz}) = a -y dz=(dadJ)(dzda)=ay

d w = x d z dw = xdz dw=xdz

d b = d z db = dz db=dz

多个样本向量化反向传播:

d Z = ( d J d A ) ( d A d Z ) = A − Y dZ = (\frac{dJ}{dA})(\frac{dA}{dZ}) = A -Y dZ=(dAdJ)(dZdA)=AY

d w = 1 m X d Z T dw = \frac{1}{m}XdZ^T dw=m1XdZT

d b = 1 m n p . s u m ( d Z ) db = \frac{1}{m}np.sum(dZ) db=m1np.sum(dZ)

1.7 梯度下降

梯度方向是在当前位置上函数增长最快的方向,所以只要逆着梯度方向就可以找到函数的最低点。梯度在上个小结中已经通过反向传播求得,接下来则是将 w , b w, b w,b 向梯度反方向移动。但是这里有一个问题,如果直接移动梯度大小,会导致 w , b w, b w,b 大尺度的来回反复,而无法移动到最低点,所以这里需要让梯度按照一定的尺度缩小,这里用到第一个超参数: α \alpha α

w = w − α d w w = w - \alpha dw w=wαdw

b = b − α d b b = b - \alpha db b=bαdb

经过反复迭代, w , b w, b w,b 都想最有参数迭代,而损失函数的值也最终收敛至最小值。

2. 神经网络

2.1 神经网络符号定义

n [ 0 ] n^{[0]} n[0] :输入特征个数;

n [ l ] ( l > 0 ) n^{[l]}(l>0) n[l](l>0) :第 l l l 层隐藏单元数量,最后一层为输出单元,二分类个数为 1,多分类是输出单元个数可以为多个;

x x x : 表示一个 n1 维数据,为输入数据,维度为 ( n [ 0 ] , 1 ) (n^{[0]}, 1) (n[0],1)

X = [ x ( 1 ) , x ( 2 ) , … … , x ( m ) ] X = [x^{(1)}, x^{(2)}, …… , x^{(m)}] X=[x(1),x(2),……,x(m)], 向量化表示所有训练数据的输入值,放在一个 n x ∗ m n_x*m nxm 的矩阵中, m 为样本数目;

W [ l ] W^{[l]} W[l] :表示第 l l l 层参数,维度为 n [ l ] ∗ n [ l − 1 ] n^[l]*n^{[l-1]} n[l]n[l1],形式如下:
[ w 11 w 12 ⋯ w 1 n [ l − 1 ] w 21 w 22 ⋯ w 2 n [ l − 1 ] ⋮ ⋮ ⋱ ⋮ w n [ l ] 1 w n [ l ] 2 ⋯ w n [ l ] n [ l − 1 ] ] \left[ \begin{matrix} w_{11} & w_{12} & \cdots & w_{1n^{[l-1]}} \\ w_{21} & w_{22} & \cdots & w_{2n^{[l-1]}} \\ \vdots & \vdots & \ddots & \vdots \\ w_{n^{[l]}1} & w_{n^{[l]}2} & \cdots & w_{n^{[l]}n^{[l-1]}} \\ \end{matrix} \right] w11w21wn[l]1w12w22wn[l]2w1n[l1]w2n[l1]wn[l]n[l1]
b [ l ] b^{[l]} b[l] :表示第 l l l 层偏置值;

z [ l ] z^{[l]} z[l] :表示第 l l l 层未经激活的输出值, z [ l ] = W [ l ] a [ l − 1 ] + b [ l ] z^{[l]} = W^{[l]}a^{[l-1]}+b^{[l]} z[l]=W[l]a[l1]+b[l] z z z 为隐藏单元未经激活的输出,维度为 ( n [ l ] , 1 ) (n^{[l]}, 1) (n[l],1)

a [ l ] a^{[l]} a[l]:表示第 l l l 层经过激活的输出值, a [ l ] = g [ l ] ( z [ l ] ) a^{[l]} = g^{[l]}(z^{[l]}) a[l]=g[l](z[l]) a a a 为隐藏单元经激活的输出,维度为 ( n [ l ] , 1 ) (n^{[l]}, 1) (n[l],1)

Z [ l ] = [ z [ l ] ( 1 ) , z [ l ] ( 2 ) , … … z [ l ] ( m ) ] Z^{[l]} = [z^{[l](1)}, z^{[l](2)},…… z^{[l](m)}] Z[l]=[z[l](1),z[l](2)……z[l](m)] :多样本向量化的 z [ l ] z^{[l]} z[l]

A [ l ] = [ a [ l ] ( 1 ) , a [ l ] ( 2 ) , … … a [ l ] ( m ) ] A^{[l]} = [a^{[l](1)}, a^{[l](2)},…… a^{[l](m)}] A[l]=[a[l](1),a[l](2)……a[l](m)] :多样本向量化的 a [ l ] a^{[l]} a[l]

2.2 激活函数

为什么需要非线性激活函数?

两个线性函数的组合本身就是线性函数,所以除非你引入非线性,否则你无法计算更有趣的函数,即使你的网络层数再多也不行。

如果你使用线性激活函数或者没有使用一个激活函数,那么无论你的神经网络有多少层一直在做的只是计算线性函数,所以不如直接去掉全部隐藏层。

引入激活函数使得神经网络的表达能力不局限于线性,可以提供更复杂的表达能力。

常用非线性激活函数
f ( x ) f(x) f(x) f ′ ( x ) f'(x) f(x)优点缺点
s i g m o d ( x ) = 1 1 + e − x sigmod(x) = \frac{1}{1+{e^{-x}}} sigmod(x)=1+ex1 s i g m o d ( x ) ( 1 − s i g m o d ( x ) ) sigmod(x)(1-sigmod(x)) sigmod(x)(1sigmod(x))1. 输出范围是 0 到 1
2. 梯度平滑,便于求导
1. 容易造成梯度消失
2. 函数输出不是以 0 为中心的
3. 执行指数运算,消耗计算资源
T a n h ( x ) = e x − e − x e x + e − x Tanh(x) = \frac{e^x-e^{-x}}{e^x+e^{-x}} Tanh(x)=ex+exexex 4 ∗ s i g m o d ( 2 x ) ( 1 − s i g m o d ( 2 x ) ) 4*sigmod(2x)(1-sigmod(2x)) 4sigmod(2x)(1sigmod(2x))1. 输出间隔为 1,并且整个函数以 0 为中心
2. 负输入将被强映射为负,而零输入被映射为接近零
1. 存在梯度饱和的问题
2. 执行指数运算,消耗计算资源
R e L U ( x ) = m a x ( 0 , x ) ReLU(x) = max(0, x) ReLU(x)=max(0,x)1. 无梯度消失的问题
2. 线性、非饱和的,快速收敛
3. 计算复杂度低
1. 输出不是以0为中心的
2. 输入为负时,梯度为0。这个神经元及之后的神经元梯度永远为0
S o f t M a x = e x i ∑ i e x i SoftMax = \frac{e^{x_i}}{\sum_i{e^{x_i}}} SoftMax=iexiexi1. 用于多分类问题

2.3 损失函数

J ( W [ 1 ] , b [ 1 ] , … … , W [ l ] , b [ l ] ) = 1 m ∑ i = 1 m L ( y ( i ) ^ , y ( i ) ) J(W^{[1]},b^{[1]},……,W^{[l]},b^{[l]}) = \frac{1}{m}\sum_{i=1}^mL(\widehat{y^{(i)}}, y^{(i)}) J(W[1],b[1],……,W[l],b[l])=m1i=1mL(y(i) ,y(i))

常用损失函数
名称 L ( y ^ , y ) L(\widehat{y}, y) L(y ,y)
均方误差 ( y ^ − y ) 2 (\widehat{y}-y)^2 (y y)2
交叉熵 − y l o g ( y ^ ) − ( 1 − y ) l o g ( 1 − y ^ ) -ylog(\widehat{y})-(1-y)log(1-\widehat{y}) ylog(y )(1y)log(1y )

2.4 向量化前向传播

前向传播是指由输入计算到输出的过程:

Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ] Z^{[l]} = W^{[l]}A^{[l-1]}+b^{[l]} Z[l]=W[l]A[l1]+b[l]

A [ l ] = g [ l ] ( Z [ l ] ) A^{[l]} = g^{[l]}(Z^{[l]}) A[l]=g[l](Z[l])

2.5 向量化反向传播

反向传播是指由后往前计算梯度或偏导数的过程

单个样本反向传播:

d z [ l ] = d a [ l ] ∗ g ′ [ l ] ( z [ l ] ) dz^{[l]} = da^{[l]} * g'^{[l]}(z^{[l]}) dz[l]=da[l]g[l](z[l])

d w [ l ] = d z [ l ] ∗ a [ l − 1 ] dw^{[l]} = dz^{[l]} * a^{[l-1]} dw[l]=dz[l]a[l1]

d b [ l ] = d z [ l ] db^{[l]} = dz^{[l]} db[l]=dz[l]

d a [ l − 1 ] = w [ l ] T ∗ d z [ l ] da^{[l-1]} = w^{^{[l]}T} * dz^{[l]} da[l1]=w[l]Tdz[l]

d z [ l ] = w [ l + 1 ] T ∗ d z [ l + 1 ] ∗ g ′ [ l ] ( z [ l ] ) dz^{[l]} = w^{^{[l+1]}T} * dz^{[l+1]} * g'^{[l]}(z^{[l]}) dz[l]=w[l+1]Tdz[l+1]g[l](z[l])

多个样本向量化反向传播:

d Z [ l ] = d A [ l ] ∗ g ′ [ l ] ( Z [ l ] ) dZ^{[l]} = dA^{[l]} * g'^{[l]}(Z^{[l]}) dZ[l]=dA[l]g[l](Z[l])

d W [ l ] = d Z [ l ] ∗ A [ l − 1 ] dW^{[l]} = dZ^{[l]} * A^{[l-1]} dW[l]=dZ[l]A[l1]

d b [ l ] = 1 m n p . s u m ( d Z [ l ] , a x i s = 1 , k e e p d i m s = t r u e ) db^{[l]} = \frac{1}{m}np.sum(dZ^{[l]}, axis=1, keepdims=true) db[l]=m1np.sum(dZ[l],axis=1,keepdims=true)

d A [ l − 1 ] = W [ l ] T ∗ d Z [ l ] dA^{[l-1]} = W^{^{[l]}T} * dZ^{[l]} dA[l1]=W[l]TdZ[l]

d Z [ l ] = W [ l + 1 ] T ∗ d Z [ l + 1 ] ∗ g ′ [ l ] ( Z [ l ] ) dZ^{[l]} = W^{^{[l+1]}T} * dZ^{[l+1]} * g'^{[l]}(Z^{[l]}) dZ[l]=W[l+1]TdZ[l+1]g[l](Z[l])

2.6 梯度下降

W [ l ] = W [ l ] − α d W [ l ] W^{[l]} = W^{[l]} - \alpha dW^{[l]} W[l]=W[l]αdW[l]

b [ l ] = b [ l ] − α d b [ l ] b^{[l]} = b^{[l]} - \alpha db^{[l]} b[l]=b[l]αdb[l]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值