专栏名称: AI科技大本营
迎来到AI科技大本营。这里汇集了优秀的AI学习者,技术大咖和产业领袖;提供接地气的实战课程。在这里和优秀的人一起成长。
目录
相关文章推荐
爱可可-爱生活  ·  【Demystifying ... ·  昨天  
爱可可-爱生活  ·  通俗版解读-20250212074552 ·  昨天  
阿枫科技  ·  我建了个免费无门槛的DeepSeek交流群 ·  昨天  
阿枫科技  ·  我建了个免费无门槛的DeepSeek交流群 ·  昨天  
爱可可-爱生活  ·  【Aperture:可视化Stable ... ·  2 天前  
51好读  ›  专栏  ›  AI科技大本营

「修炼开始」一文带你入门深度学习

AI科技大本营  · 公众号  · AI  · 2020-12-15 21:12

正文

来源 | Jack Cui
责编 | Carol
封图 | CSDN下载自视觉中国


前言


图解 AI 算法系列教程,不仅仅是涉及深度学习基础知识,还会有强化学习、迁移学习等,再往小了讲就比如拆解目标检测算法,对抗神经网络(GAN)等等。
难度会逐渐增加,今天咱先热热身,来点轻松的,当作这个系列的开篇。

深度学习


深度学习 (Deep Learning)是近年来发展十分迅速的研究领域,并且在 人 工智能 的很多子领域都取得了巨大的成功。从根源来讲,深度学习是机器学习的一个分支。
深度学习就是从 有限样例 中通过算法总结出一般性的规律,并可以应用到新的 未知数据 上。
比如,我们可以从一些历史病例的集合中总结出 症状 疾病 之间的规律。这样,当有新的病人时,我们可以利用总结出来的规律来判断这个病人得了什么疾病。
深度学习主要由上图所示的几个部分组成,想学一个深度学习算法的原理,就看它是什么样的网络结构,Loss 是怎么计算的,预处理和后处理都是怎么做的。
权重初始化和学习率调整策略、优化算法、深度学习框架就那么多,并且也不是所有都要掌握,比如深度学习框架,Pytorch 玩的溜,就能应付大多数场景。
先有个整体的认知,然后再按照这个思维导图,逐个知识点学习,最后整合到一起,你会发现, 你也可以自己实现各种功能的算法了
深度学习的主要目的是从数据中自动学习到有效的 特征表示 ,它是怎么工作的?那得从神经元说起。
随着神经科学、认知科学的发展,我们逐渐知道人类的智能行为都和大脑活动有关。
人脑神经系统 [1] 是一个非常复杂的组织,包含近 860 亿个神经元,这 860 亿的神经元构成了 超级庞大的神经网络
我们知道,一个人的智力不完全由遗传决定,大部分来自于生活经验。也就是说人脑神经网络是一个具有学习能力的系统。
不同神经元之间的突触有强有弱,其强度是可以通过学习(训练)来不断改变的,具有一定的可塑性,不同的连接又形成了不同的记忆印痕。
而深度学习的神经网络,就是受人脑神经网络启发,设计的一种计算模型,它从结构、实现机理和功能上模拟人脑神经网络。
比如下图就是一个最简单的前馈神经网络,第 0 层称为 输入层 ,最后一层称为 输出层 ,其他中间层称为 隐藏层
那神经网络如何工作的?网络层次结构、损失函数、优化算法、权重初始化、学习率调整都是如何运作的?
反向传播给你答案 。前方, 高能预警

反向传播


要想弄懂深度学习原理,必须搞定 反向传播 [2] 和链式求导法则。
先说思维导图里的 网络层级结构 ,一个神经网络,可复杂可简单,为了方便推导,假设,你有这样一个网络层:
第一层是 输入层 ,包含两个神经元 i1, i2 和截距项 b1(偏置);
第二层是 隐含层 ,包含两个神经元 h1, h2 和截距项 b2 ;
第三层是 输出层 o1 和 o2 ,每条线上标的 wi 是层与层之间连接的权重,激活函数我们默认为 sigmoid 函数。
在训练这个网络之前,需要初始化这些 wi 权重,这就是 权重初始化 ,这里就有不少的初始化方法,我们选择最简单的, 随机初始化
随机初始化的结果,如下图所示:
其中,输入数据 : i1=0.05, i2=0.10;
输出数据(期望的输出) : o1=0.01, o2=0.99;
初始权重: w1=0.15, w2=0.20, w3=0.25, w4=0.30, w5=0.40, w6=0.45, w7=0.50, w8=0.55。
目标 :给出输入数据 i1, i2(0.05 和 0.10),使输出尽可能与原始输出o1, o2(0.01 和 0.99)接近。
神经网络的工作流程分为两步: 前向传播 反向传播

1、前向传播

前向传播是将输入数据根据权重,计算到输出层。

1)输入层->隐藏层

计算神经元 h1 的输入加权和:
神经元后面,要跟个 激活层 ,从而引入非线性因素,这就像人的神经元一样,让细胞处于 兴奋 抑制 的状态。
数学模拟的形式就是通过 激活函数 ,大于阈值就激活,反之抑制。
常用的激活函如 思维导图 所示,这里以非常简单的 sigmoid 激活函数为例,它的函数形式如下:
数学公式:
使用 sigmoid 激活函数,继续计算,神经元 h1 的输出 o_h1:
同理,可计算出神经元 h2 的输出 o_h2:

2)隐藏层->输出层

计算输出层神经元 o1 和 o2 的值:
这样前向传播的过程就结束了,根据输入值和权重,我们得到输出值为[0.75136079, 0.772928465],与实际值(目标)[0.01, 0.99]相差还很远,现在我们对误差进行反向传播,更新权值,重新计算输出。

2、反向传播

前向传播之后,发现输出结果与期望相差甚远,这时候就要 更新权重 了。
所谓深度学习的训练(炼丹),学的就是这些权重,我们期望的是调整这些权重,让输出结果符合我们的期望。
而更新权重的方式,依靠的就是反向传播。

1)计算总误差

一次前向传播过后,输出值(预测值)与目标值(标签值)有差距,那得衡量一下有多大差距。
衡量的方法,就是用 思维导图 中的损失函数。
损失函数也有很多,咱们还是选择一个最简单的,均方误差(MSE loss)。
均方误差的函数公式:
根据公式,直接计算预测值与标签值的总误差:
有两个输出,所以分别计算 o1 和 o2 的误差,总误差为两者之和:

2)隐含层->输出层的权值更新

以权重参数 w5 为例,如果我们想知道 w5 对整体误差产生了多少影响,可以用整体误差对 w5 求偏导求出。
这是链式法则,它是微积分中复合函数的求导法则,就是这个:
根据链式法则易得:
下面的图可以更直观的看清楚误差是怎样反向传播的:
现在我们来分别计算每个式子的值:
计算
计算 :
这一步实际上就是对sigmoid函数求导,比较简单,可以自己推导一下。
计算
最后三者相乘:
这样我们就计算出整体误差E(total)对 w5 的偏导值。
回过头来再看看上面的公式,我们发现:
为了表达方便,用 来表示输出层的误差:
因此,整体误差E(total)对w5的偏导公式可以写成:
如果输出层误差计为负的话,也可以写成:
最后我们来更新 w5 的值:
这个更新权重的策略,就是 思维导图 中的 优化算法 是学习率,我们这里取0.5。
如果学习率要根据迭代的次数调整,那就用到了 思维导图 中的 学习率调整
同理,可更新w6,w7,w8:

3)隐含层->隐含层的权值更新

方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对 w5 的偏导时,是从out(o1)->net(o1)->w5,但是在隐含层之间的权值更新时,是out(h1)->net(h1)->w1,而 out(h1) 会接受 E(o1) 和 E(o2) 两个地方传来的误差,所以这个地方两个都要计算。
计算
先计算 :
同理,计算出:
两者相加得到总值:
再计算 :
再计算 :
最后,三者相乘:
为了简化公式,用 sigma(h1) 表示隐含层单元 h1 的误差:
最后,更新 w1 的权值:
同理,额可更新w2,w3,w4的权值:






请到「今天看啥」查看全文