COURSERA:逻辑回归和梯度下降

原文链接: COURSERA:逻辑回归和梯度下降.

COURSERA:逻辑回归和梯度下降

logistic regression相当于是神经网络中的一个神经元,在记录之前先约定一些符号
x ( i ) 指 第 i 个 样 本 本 x^{(i)}指第i个样本本 x(i)i

x j ( i ) 指 第 i 个 样 本 的 第 j 个 特 征 值 x_j^{(i)}指第i个样本的第j个特征值 xj(i)ij

z ( i ) 指 的 是 第 i 个 样 本 经 过 线 性 变 换 后 的 特 征 向 量 z^{(i)}指的是第i个样本经过线性变换后的特征向量 z(i)i线

a ( i ) 指 的 是 第 i 个 样 本 经 过 激 活 函 数 后 的 值 a^{(i)}指的是第i个样本经过激活函数后的值 a(i)i

整个算法的结构如下图所示:

在这里插入图片描述

​ 假如我们的训练向量是一幅图,首先将三维RGB(或者其他格式)展开为一维列向量,记为 X ( i ) X^{(i)} X(i),经过标准化处理将数据缩放到[0,1]的范围内,对于每一个 x ( i ) x^{(i)} x(i):
z ( i ) = w T x ( i ) + b (1) z^{(i)} = w^T x^{(i)} + b \tag{1} z(i)=wTx(i)+b(1)

y ^ ( i ) = a ( i ) = s i g m o i d ( z ( i ) ) (2) \hat{y}^{(i)} = a^{(i)} = sigmoid(z^{(i)})\tag{2} y^(i)=a(i)=sigmoid(z(i))(2)

L ( a ( i ) , y ( i ) ) = − y ( i ) log ⁡ ( a ( i ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 − a ( i ) ) (3) \mathcal{L}(a^{(i)}, y^{(i)}) = - y^{(i)} \log(a^{(i)}) - (1-y^{(i)} ) \log(1-a^{(i)})\tag{3} L(a(i),y(i))=y(i)log(a(i))(1y(i))log(1a(i))(3)

L ( a ( i ) , y ( i ) ) \mathcal{L}(a^{(i)}, y^{(i)}) L(a(i),y(i))是损失函数,直观的来看这个函数,举例:

  • –当模型比较好时,当正确结果为正例时, y ( i ) y^{(i)} y(i)为1,此时 ( 1 − y ( i ) ) log ⁡ ( 1 − a ( i ) ) (1-y^{(i)} ) \log(1-a^{(i)}) (1y(i))log(1a(i))是0, a ( i ) a^{(i)} a(i)会很接近1, − y ( i ) log ⁡ ( a ( i ) ) - y^{(i)} \log(a^{(i)}) y(i)log(a(i))就接近0, L \mathcal{L} L就小。负例同理。

  • –当模型比较差时,当正确结果为正例时, y ( i ) y^{(i)} y(i)为1,此时 ( 1 − y ( i ) ) log ⁡ ( 1 − a ( i ) ) (1-y^{(i)} ) \log(1-a^{(i)}) (1y(i))log(1a(i))是0, a ( i ) a^{(i)} a(i)会比1小很多, − y ( i ) log ⁡ ( a ( i ) ) - y^{(i)} \log(a^{(i)}) y(i)log(a(i))的值就会比较大, L \mathcal{L} L就小。负例同理。

梯度下降

在对所有的训练样例都进行了一次上述公式1-3的过程后(称之为1个echo),就需要对权值 w w w和偏倚 b b b进行优化,优化的依据就是最小化损失函数。

对所有的训练样例,损失函数:
J ( w , b ) = 1 m ∑ i = 1 m L ( a ( i ) , y ( i ) ) (4) J(w,b) = \frac{1}{m} \sum_{i=1}^m \mathcal{L}(a^{(i)}, y^{(i)})\tag{4} Jw,b=m1i=1mL(a(i),y(i))(4)
梯度下降的具体步骤为:

​ 1.计算损失函数对所有参数的导数,计算出梯度 (需要下降多少)

​ 2.在原来的基础上减去梯度

符号说明:
d w : J 对 w 的 梯 度 dw:J对w的梯度 dw:Jw

d b : J 对 b 的 梯 度 db:J对b的梯度 db:Jb

具体做法(单个样本):
z = w 1 x 1 + w 2 x 2 + b → a = σ ( z ) → L = − y log ⁡ ( a ) − ( 1 − y ) log ⁡ ( 1 − a ) z = w_1x_1+w_2x_2 + b \quad → \quad a=σ(z) \quad → \quad \mathcal{L} = - y \log(a )- (1-y ) \log(1-a) z=w1x1+w2x2+ba=σ(z)L=ylog(a)(1y)log(1a)
那么
d L d a = − y a + 1 − y 1 − a \frac{d\mathcal{L}}{da}=-\frac{y}{a}+\frac{1-y}{1-a} dadL=ay+1a1y

∂ L ∂ z = d L d a d a d z = a − y \frac{\partial \mathcal{L}}{\partial z} = \frac{d\mathcal{L}}{da}\frac{da}{dz}=a-y zL=dadLdzda=ay

由于:
∂ L ∂ w 1 = ∂ L ∂ z ∂ z ∂ w 1 = ∂ L ∂ z ∗ x 1 = ( a − y ) ∗ x 1 \frac{\partial \mathcal{L}}{\partial w1} = \frac{\partial \mathcal{L}}{\partial z}\frac{\partial z}{\partial w1}=\frac{\partial \mathcal{L}}{\partial z}*x_1=(a-y)*x_1 w1L=zLw1z=zLx1=(ay)x1

∂ L ∂ w 2 = ∂ L ∂ z ∂ z ∂ w 2 = ∂ L ∂ z ∗ x 2 = ( a − y ) ∗ x 2 \frac{\partial \mathcal{L}}{\partial w2} = \frac{\partial \mathcal{L}}{\partial z}\frac{\partial z}{\partial w2}=\frac{\partial \mathcal{L}}{\partial z}*x_2=(a-y)*x_2 w2L=zLw2z=zLx2=(ay)x2

那么:
∂ L ∂ w = ∂ L ∂ z ∂ z ∂ w = ∂ L ∂ z ∗ x = x ( a − y ) \frac{\partial \mathcal{L}}{\partial w} = \frac{\partial \mathcal{L}}{\partial z}\frac{\partial z}{\partial w}=\frac{\partial \mathcal{L}}{\partial z}*x=x(a-y) wL=zLwz=zLx=x(ay)

∂ L ∂ b = ∂ L ∂ z ∂ z ∂ b = ∂ L ∂ z ∗ 1 = a − y \frac{\partial \mathcal{L}}{\partial b} = \frac{\partial \mathcal{L}}{\partial z}\frac{\partial z}{\partial b}=\frac{\partial \mathcal{L}}{\partial z}*1= a-y bL=zLbz=zL1=ay
对于 m m m个样本:

m m m个样本的 L \mathcal{L} L d L d w \frac{d\mathcal{L}}{dw} dwdL d L d b \frac{d\mathcal{L}}{db} dbdL叠加得到 J J J d J d w \frac{dJ}{dw} dwdJ d J d b \frac{dJ}{db} dbdJ:
J = 1 m J \mathcal{J} = \frac{1}{m} J J=m1J

∂ J ∂ w = 1 m ∂ J ∂ w \frac{\partial \mathcal{J}}{\partial w} = \frac{1}{m} \frac{\partial J}{\partial w} wJ=m1wJ

∂ J ∂ b = 1 m ∂ J ∂ b \frac{\partial \mathcal{J}}{\partial b} = \frac{1}{m} \frac{\partial J}{\partial b} bJ=m1bJ

最后进行权值更新:
w = w − α ∂ J ∂ w (5) w = w - α\frac{\partial \mathcal{J}}{\partial w} \tag{5} w=wαwJ(5)

b = b − α ∂ J ∂ b (6) b = b - α\frac{\partial \mathcal{J}}{\partial b} \tag{6} b=bαbJ(6)

将计算向量化

在上面的过程中,我们注意到对于多个训练样例,一个echo就会有多个循环:

for sample in samples:  #对每个样本遍历
    for i in sample:  #对样本每个参数

for循环所花费的时间是比矩阵运算多很多,所以要运用python的广播机制numpy运算将for循环转换为矩阵运算。

转换过程的最关键的点就是横向量和列向量的转换,要把对的元素对应起来,现在来规范一下向量格式。

训练数据 X n _ y ∗ m X_{n\__y*m} Xn_ym:
KaTeX parse error: Undefined control sequence: \ at position 35: …trix} .&.&.&.\\\̲ ̲.&.&.&.\\\ x^{(…
权重 w w w:
w = [ w 1 w 2 . . . w n _ y ] w=\left[ \begin{matrix}w_1\\w_2\\...\\w_{n\__y} \end{matrix}\right] w=w1w2...wn_y

b = [ b ] 广 播 后 b = [ b 1 , b 2 , . . . b m ] b=\left[ b \right]广播后b=\left[ b_1,b_2,...b_m \right] b=[b]广b=[b1,b2,...bm]

那么:
A = σ ( w T X + b ) = [ a ( 1 ) , a ( 2 ) , . . . , a ( m ) ] A=σ(w^TX+b)=\left[ a^{(1)},a^{(2)},...,a^{(m)} \right] A=σ(wTX+b)=[a(1),a(2),...,a(m)]
最后的梯度:
∂ J ∂ w = 1 m X ( A − Y ) T (7) \frac{\partial \mathcal{J}}{\partial w} = \frac{1}{m}X(A-Y)^T\tag{7} wJ=m1X(AY)T(7)

∂ J ∂ b = 1 m ∑ i = 1 m ( a ( i ) − y ( i ) ) (8) \frac{\partial \mathcal{J}}{\partial b} = \frac{1}{m} \sum_{i=1}^m (a^{(i)}-y^{(i)})\tag{8} bJ=m1i=1m(a(i)y(i))(8)

最后按照公式5、6进行权值更新。

{J}}{\partial w} = \frac{1}{m}X(A-Y)^T\tag{7}
$$

∂ J ∂ b = 1 m ∑ i = 1 m ( a ( i ) − y ( i ) ) (8) \frac{\partial \mathcal{J}}{\partial b} = \frac{1}{m} \sum_{i=1}^m (a^{(i)}-y^{(i)})\tag{8} bJ=m1i=1m(a(i)y(i))(8)

最后按照公式5、6进行权值更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值