深度学习算法工程师面试,记录一道较为基础的笔试题:
输入:目标向量Y(N*1),矩阵X(N*K);输出:使用随机梯度下降求得的逻辑回归系数W(K+1)。
分析:该问题需要先列出逻辑回归的函数解析式,再选择损失函数,最后算出损失函数关于更新参数的导数,即可开始随机梯度下降。
作者:Algernon
地址:https://www.zhihu.com/people/thisiszhou
01
逻辑回归解析式
其中
02
Loss函数
由于逻辑回归的输出值在[0, 1]之间,并且逻辑回归虽然名字为回归,但实际是分类任务,所以损失函数使用交叉熵。其中交叉熵函数解析式为:
y为label,y‘为预测值,N为y的长度。
03
关于更新参数的导数
更新参数有
,b,Loss的解析式为:
为了便于求导,我们换一种写法,其中sum函数相当于给后面的列向量乘一个都为1的行向量S:
其中
为矩阵乘法,CE和
都是逐元素函数,则:
其中
(其中
为逐元素乘法,在最后的计算中,逐元素乘法优先级比矩阵乘法优先级高)
04
参数更新(梯度下降)
其中
为学习率。
05
代码实现
先封装一下涉及到的函数:
初始化参数以及输入:
前向函数:
反向求导:
grad_w数值:
使用tensorflow进行验证:
grad数值:
可见我们自己计算的导数没有问题。 使用随机梯度下降进行参数更新。随机梯度下降,一般会随机选择batch,这里为了简便,直接将所有向量进行BP: 训练过程:
输出:
之后看看forward输出:
y_label:
06
总结
BP过程相对基础,但确实不是很简单。例如,此题loss关于w的导数,是典型的标量关于向量求导。关于向量、矩阵的求导,推荐以下文章: https://zhuanlan.zhihu.com/p/24709748
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
直播预告
左划查看更多
历史文章推荐
-
【CVPR 2020 Tutorial】如何写好论文和评审(概述)
- 如何撰写高水平的博士论文?超全论文指导!
- 北大读博手记:怎样完成自己的博士生涯?非常具有指导性!
-
太牛逼了!一位中国博士把整个CNN都给可视化了,每个细节看的清清楚楚!
-
Nature发表牛津博士建议:我希望在读博士之初时就能知道的20件事
-
沈向洋、华刚:读科研论文的三个层次、四个阶段与十个问题
-
如何看待2021年秋招算法岗灰飞烟灭?
-
独家解读 | ExprGAN:基于强度可控的表情编辑
-
独家解读 | 矩阵视角下的BP算法
-
独家解读 | Capsule Network深度解读
-
独家解读 | Fisher信息度量下的对抗攻击
-
论文解读 | 知识图谱最新研究综述
-
你的毕业论文过了吗?《如何撰写毕业论文?》
-
卡尔曼滤波系列——经典卡尔曼滤波推导
分享、点赞、在看,给个三连击呗!