周报-230715

本周主要进行了深度学习的学习,以及论文的阅读

学习内容

1.论文

2.吴恩达深度学习 2.5-2.18

学习时间

2023.7.9 — 2023.7.14

学习笔记

深度学习

2.5-2.8 为导数部分,比较熟悉因此没有做笔记

2.9 逻辑回归中的梯度下降(Logistic Regression Gradient Descent)

通过反向传播,使用梯度下降法对参数进行影响

其实就是一层一层向后求导,多元函数导数,例如以下例子:

假设只有两个特征 x1 与 x2的情况:
z = w 1 x 1 + w 2 x 2 + b y ^ = a = σ ( z )   ,   σ ( z ) = 1 1 + e − z L ( a , y ) = − ( y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) ) z=w_{1}x_{1}+w_{2}x_{2}+b\\\hat{y}=a=\sigma(z)\ , \ \sigma(z) = \frac{1}{1 + e^{-z}}\\L(a,y)=-(y\log\hat{y}+(1-y)\log(1-\hat{y})) z=w1x1+w2x2+by^=a=σ(z) , σ(z)=1+ez1L(a,y)=(ylogy^+(1y)log(1y^))
以下为反向传播的过程:
( 1 )   d L ( a , y ) d a = − y a + 1 − y 1 − a ( 2 )   d a d z = a ( 1 − a ) ( 3 )   d L ( a , y ) d z = d L ( a , y ) d a ⋅ d a d z = a − y ( 4 )   ∂ L ∂ w 1 = d L ( a , y ) d z ⋅ ∂ z ∂ w 1 = x 1 ( a − y )   ,   ∂ L ∂ w 2 = d L ( a , y ) d z ⋅ ∂ z ∂ w 2 = x 2 ( a − y )   ,   ∂ L ∂ b = d L ( a , y ) d z ⋅ ∂ z ∂ b = a − y (1)\ \frac{{\rm d}L(a,y)}{{\rm d}a}=-\frac{y}{a}+\frac{1-y}{1-a}\\ (2)\ \frac{{\rm d}a}{{\rm d}z}=a(1-a)\\ (3)\ \frac{{\rm d}L(a,y)}{{\rm d}z}=\frac{{\rm d}L(a,y)}{{\rm d}a}\cdot\frac{{\rm d}a}{{\rm d}z}=a-y\\ (4)\ \frac{\partial L}{\partial w_{1}}=\frac{{\rm d}L(a,y)}{{\rm d}z}\cdot\frac{\partial z}{\partial w_{1}}=x_{1}(a-y)\ ,\ \frac{\partial L}{\partial w_{2}}=\frac{{\rm d}L(a,y)}{{\rm d}z}\cdot\frac{\partial z}{\partial w_{2}}=x_{2}(a-y)\ ,\ \frac{\partial L}{\partial b}=\frac{{\rm d}L(a,y)}{{\rm d}z}\cdot\frac{\partial z}{\partial b}=a-y (1) dadL(a,y)=ay+1a1y(2) dzda=a(1a)(3) dzdL(a,y)=dadL(a,y)dzda=ay(4) w1L=dzdL(a,y)w1z=x1(ay) , w2L=dzdL(a,y)w2z=x2(ay) , bL=dzdL(a,y)bz=ay
然后采用梯度下降法根据这三个值更新参数:
w 1 = w 1 − α ⋅ ∂ L ∂ w 1   ,   w 2 = w 2 − α ⋅ ∂ L ∂ w 2   ,   b = b − α ⋅ ∂ L ∂ b   w_{1}=w_{1}-\alpha\cdot\frac{\partial L}{\partial w_{1}}\ ,\ w_{2}=w_{2}-\alpha\cdot\frac{\partial L}{\partial w_{2}}\ ,\ b=b-\alpha\cdot\frac{\partial L}{\partial b}\ w1=w1αw1L , w2=w2αw2L , b=bαbL 

2.10 m个样本的梯度下降(Gradient Descent on m Example)

如下图所示,左边为每次的训练,m 个样本需要执行 m 次,而 n 是向量的维度,也是用 for 循环遍历的,因此,时间复杂度为 O(mn)

右边是每次训练后对参数的更新,即梯度下降法,下图即为一次梯度下降,可以反复使用来逼近结果

由于 for 循环的使用在深度学习中是低效的,因此需要进行向量化(Vectorization),这将在下一节提到

在这里插入图片描述

2.11 向量化(Vectorization)

向量化可以去除代码中 for 循环

经过代码演示,计算 w x 的值,在 100万 数量级上,发现向量化会比 for-loop 快300倍

GPU 比 CPU 更适合 SIMD(single introduction multiple data) 计算

2.12 向量化的更多例子(More Examples of )

例如矩阵乘法 A*v,需要两个循环来实现,右侧的代码移除了两层 for-loop

在这里插入图片描述

当需要对某向量统一操作的时候,例如取指数,可以调用 numpy,来进行计算

在逻辑回归的梯度下降上,我们可以使用 np.zero((n_x,1)) 来初始化向量,并把多步 dw_1, dw_2, … 等合为一个变量 dw,移除了一层 for-loop

在这里插入图片描述

2.13 向量化逻辑回归

向量化实际上就是把要循环的东西变成矩阵,通过一步相乘的方式得到结果,如下图

把所有的向量 x_i 合成一个大矩阵 X,与 w 相乘再加 b 获得矩阵 Z,其中 Z 是由多个 z_i 向量构成的

在代码中,np.dot 应该指的是矩阵相乘,b 虽然是一个单值,但是在这一步中由 python 的广播(broadcasting)直接变为长度为 m 的行向量

在这里插入图片描述

2.14 向量化 logistic 回归的梯度输出(Vectorizing Logistic Regression’s Gradient)

与上一节相同,梯度下降中的循环仍然存在,即 dw 与 db,通过之前的计算,计算 dw 需要我们将 x_i 与 dz_i 相乘并累加得到,因此我们直接将列向量与行向量相乘,得到的是一个值的形式。而 db 更加简单,直接调用 numpy 中的 np.sum(dZ) 即可完成求和

在这里插入图片描述

左边是未向量化的 for-loop,右边是向量化后的算法,每一个步骤都可以在前文中找到答案

注意,该算法只是一次迭代。如果需要迭代多次,则仍然要使用 for-loop,而且该循环是基本不可能省去的

在这里插入图片描述

2.15 Python 中的广播

广播的例子,这里要求每列中的单个元素在本列中所占的百分比,底部有实现代码:

axis 表示竖向(0)或横向(1)

相除使用对矩阵进行了 reshape 处理,为了保证向量是我们需要的形态。时间复杂度为 O(1)

注意,这里的相除是逐元素相除,与矩阵中的乘除不一致

在这里插入图片描述

广播中,会在计算中填补数值使矩阵变为正常的形态

在这里插入图片描述

2.16 关于 python_numpy 向量的说明(A note on python or numpy vectors)

在 coding 中,一定要使数据格式正确,在定义向量时,直接定义为矩阵,避免使用数组定义向量,防止计算时出现 bug

多多使用 assert 声明矩阵大小,以及使用 reshape 调整矩阵格式

2.18 logistic 损失函数的解释(Explanation of logistic regression cost function)

y 的取值只能是 0 或 1,训练样本得出来的 yhat 其实是 等于 1 的概率,那么 1 - yhat 就是等于 0 的概率,所以两个条件概率公式可以合并为以下公式(1),由于对数函数是严格单调递增的函数,因此最大化 p 就是最大化 logp,通过对数函数将(1)式化简为(2),因为我们在逻辑回归中需要最小化损失函数,因此前面要添加负号。
( 1 )   p ( y ∣ x ) = y ^ y ⋅ ( 1 − y ^ ) 1 − y ( 2 )   log ⁡ p ( y ∣ x ) = y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) (1)\ p(y|x)=\hat{y}^{y}\cdot(1-\hat{y})^{1-y}\\ (2)\ \log{p(y|x)}=y\log{\hat{y}}+(1-y)\log{(1-\hat{y})} (1) p(yx)=y^y(1y^)1y(2) logp(yx)=ylogy^+(1y)log(1y^)
所有训练样本服从同一分布并相互独立,因此这些样本的联合概率就是每个样本概率的乘积,即
P ( l a b e l s   i n   t r a i n i n g   s e t ) = ∏ i = 1 m P ( y ( i ) ∣ x ( i ) ) log ⁡ P ( l a b e l s   i n   t r a i n i n g   s e t ) = ∑ i = 1 m log ⁡ P ( y ( i ) ∣ x ( i ) ) = − ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) P(labels\ in\ training\ set)=\prod^{m}_{i=1}P(y^{(i)}|x^{(i)})\\ \log{P(labels\ in\ training\ set)}=\sum^{m}_{i=1}\log{P(y^{(i)}|x^{(i)})}=-\sum^{m}_{i=1}L(\hat{y}^{(i)},y^{(i)}) P(labels in training set)=i=1mP(y(i)x(i))logP(labels in training set)=i=1mlogP(y(i)x(i))=i=1mL(y^(i),y(i))
最大似然估计,即去一组参数的值,让这个式子取得最大值,因此在成本函数中去掉了负号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值