神经网络向量化与矩阵维度 [Andrew Ng 深度学习笔记]

成本函数:

单样本时,假设成本函数为:

Cost\, \, function=L(\hat{y}, y),  \hat{y} 为预测值,y 为标签值

那么多样本时,假设样本数为 m, 成本函数为:

Cost\, \, function=\sum_{i= 1}^{m}L(\hat{y}^{(i)}, y^{(i)})

就是把每个样本分别算出成本函数再相加。大概的思路是把m个样本的每次实验当作独立同分布的,所以总共m次实验在概率上应该全部乘起来。对累乘的结果取对数,增减性不变。把对数符号里的累乘符号提出,就变成累加的了。

为了方便后续计算,使 m 不同时,成本函数依然在一个数量级(保持和单样本时一样的尺度),故要对成本函数进行缩放

在前面加一个尺度因子(scale factor),公式变为:

Cost\, \, function=\frac{1}{m}\sum_{i= 1}^{m}L(\hat{y}^{(i)}, y^{(i)})

其实全局的成本函数,就是对局部的成本函数求平均值

然后在反向传播的求偏导时,\frac{1}{m}\sum_{i= 1}^{m} 这一项是一直存在的,所以后续的梯度就都变成了 m 个样本梯度的平均值

向量化

因为要求均值,所以要计算每个样本的各种值。

拿这个网络举例子:

非向量化,用循环实现是: 

其中,x 是 x1, x2, x3组成的列向量,上标 i 表示其是第 i 个训练样本,[] 里表示的是位于哪一层

这里用的是显式的循环,依次求出每个样本的各种值,这样效率很低

向量化的方法实现:

就是把 m 个训练样本的值并起来,形成矩阵

横向表示的是不同的样本,纵向表示的是同一层中不同的神经元

公式变成了:

可以得出,只需进行一次矩阵乘法,就可以得到 m 个样本各自的值了

刚刚列举的是前向传播,现在这幅图表示的是反向传播的向量化对比:

为什么向量化比显式的循环快

因为numpy里用于计算矩阵的方法,是一种并行化指令,又名SIMD指令(单指令流多数据流),并行化的计算方式让它比逐条执行的显式循环要快许多。吴恩达老师在课上做过演示,在CPU上运行,向量化会快上“几百倍”,在GPU上性能还会更加优秀

核对矩阵的维度

n^{[l\, ]} 表示 l 层神经元的个数

w^{[l\, ]} :(n^{[l\,] }, n^{[l-1\,] })

dw^{[l\, ]} :(n^{[l\,] }, n^{[l-1\,] })

b^{[l\, ]} :(n^{[l\,] }, 1)

db^{[l\, ]} :(n^{[l\,] }, 1)

其中 w 与 dw,b 与 db 的维度是相同的,这很显而易见,更新方式是

w^{[l\, ]} =w^{[l\, ]} - \alpha dw^{[l\, ]}

若维度不匹配,无法相减

 

 

这是目前阶段的理解,日后发现错误或新的感悟再订正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值