当前位置:   article > 正文

白话系列丨到底什么是深度学习?说人话搞懂所有重要概念

深度学习

观察了最近发的文章的数据,发现大家对深度学习这个领域特别感兴趣。于是希望能够用一篇文章概述一下深度学习,从深度学习里面的主要概念出发。不炫技数学,点到为止,理解至上。为了叙述更清楚,后文中灰色字体会稍微涉及到数学概念,但是灰色字体不看也不影响全文理解。

如果你想要学习深度学习,不妨收藏这一篇文章,等你具体接触到某一具体领域的时候,回过头来看,说不定会有不同的理解。

    什么是深度学习?

什么是深度学习,深度体现在哪?又为什么叫做学习?今天我尝试用一篇文章讲明白深度学习。

放心食用,不含任何高深数学——

首先,深度学习来源于对大脑的仿生学

想象一个脑细胞是如何工作的:接收来自其他脑细胞电信号的刺激,当刺激达到一定程度会被激活,然后将一定强度的电信号传给别的脑细胞

这就是最简单的神经元模型M-P模型,在讲深度学习发展史那一期当中讲过。

其中,当前神经元接收来自别的神经元的传递的电信号,当同时接收的电信号达到一定的阈值,产生输出,把电信号传递给下一个神经元。(以下叙述中,脑细胞=神经元)

这是一个非常理所当然的设想,这就好比你的神经元本来都在摸鱼,处于一个peace状态,突然你的脑袋被打了一下,于是一系列神经元细胞被依次激活,某个信号通路被打通,你感觉到了疼。

从这个角度理解,单个神经元模型在数学上就只是一个简单的线性模型而已。 意思就是一个神经元接收来自多个其他地方的信号,这些信号的累加决定这个神经元发送出的信号。

而深度学习,就是很多个这样的神经元真的像脑神经一样的叠加:

图片

到这里,已经可以回答上面的问题了。深度学习的“学习”指的是什么?指的就是训练每个“神经元”的敏感程度。

可以想象,当一张很大的神经网络里面的每个神经元的敏感程度不一样,那么当看到不同的事物、接受不同的刺激的时候,被激活的神经元也会不同。

就好像我看到食物,就激活了我的食欲。看到数学,就激活了我的疲乏。

深度学习要做的就是编织这么大一张神经网络,然后去调整里面每一个神经元的敏感程度,最终我们希望使得这个网络可以像人类一样认识图像、听懂声音等等。

深度学习的深度指的是什么呢?就指的是这个神经网络非常“深”,有非常多层、非常多个神经元。

那么具体是怎么做的呢?我这里举一个简单的小例子:

图片

这里我有一个16×16像素的图片上面写着数字“2”,我用一个16×16的矩阵来表示这个图片,橙色的像素点表示为1,白色的像素点部分表示为0。把这个矩阵拉直成一个256维的向量。

有1的位置就表示有电信号,0的位置就表示没有电信号。

把这一串信号给一个深度神经网络,这串信号就会一层一层激活,最后传递到最后一层。最后一层我们给人为设置成十个神经元。

我们希望,当这个深度神经网络看到了数字2的时候,最后一层中的第二个神经元被激活。以此类推,当看到了数字1的时候,最后一层中第一个神经元被激活...(如上图)

那如果它错了呢?这就要“教训”它了。

我们要告诉它正确的结果,同时给它一个大嘴巴子。威胁它下次再错就再给它一个大嘴巴子,迫使它调节每一个神经元的敏感度,使得下一次产生正确的结果。这就是深度学习的学习过程。

具体的说,在数学上我们会建立一个损失函数,这个损失函数是参数的函数,在知道输入和输出的情况下,想办法寻找一个参数让这个损失函数的值最小。

如果懂一点数学的,可以类比多元回归中的最小二乘法。在最小二乘法中,如果满足一定的条件,我们是可以求出最优参数的显式解的。但是深度神经网络往往非常复杂,无法直接求出损失函数的最小值点。

所以深度学习的学习过程其实就是建立一个损失函数,这个损失函数就表示为模型给出的结果和我们想让他它得到的结果之间的距离。

然后通过调整每一个神经元的敏感度使损失函数的值最小。

在高考中,求函数极值问题就是数学试卷的最后一道题...

这里往往使用的一种方法叫做梯度下降法

这个方法非常直观。

图片

如果我们把一个函数看作是一个凹凸不平的表面,梯度下降法就是在这个表面任何一个位置放置一个弹珠,让这个弹珠沿重力自由落到某个坑里。也就是落到一个最小值点。

具体的方法就是对这个函数求导数,导数的正负会指示在这一点梯度往下的那个方向,那么每次都往梯度下降的方向挪一点点就好了。

可以想象,这个方法一定会使弹珠落在某一个坑里,叫做局部最小值点。但是我们的目的是让小球落到那个最深的坑,叫做全局最小值点

寻找全局最小值点是另外一个话题,有一些技巧可以避免局部最小值,但不能保证。比如最开始的时候就把小球放在离最深的坑比较近的位置。

到这里为止,深度学习的基本框架应该已经建立起来了。

深度学习本质上就是一张很深、有很多层的神经网络,通过调整网络中每一个神经元的敏感程度,使得这个网络在接收不同刺激信号的时候激活不同的神经元,产生不同的反应。

我们期望这个反应是特定的,比如看到数字1,那最后一层中特定的神经元会被激活。通过这种设计,我们可以让一个深度学习模型识别数字。

模型搭建好以后,调整神经元的过程就称为学习学习过程在数学上类似于在一个颠簸的地面滚弹珠,我们希望他能滚到最低的那个点。

    深度学习中的重要概念

虽然深度学习的基本框架已经讲完了,但是事实是当代的深度学习模型远不止这么简单,深度学习目前能做的事涉及到图像识别、语音识别、图像生成、语音生成、文字生成等等等等,不胜枚举。接下来,我会介绍大部分非常常见到的基础概念,以便以后见到这些概念的时候知道是什么东西。

1. 感知机

感知机这个词听起来很高大上,但他的英文就叫做“Perception”,就是“感知”的意思。感知机就是一个两层的神经网络。

通过前面的讲解,我们知道神经元模型类似于线性回归模型。

那么神经网络中如果只有神经元的简单叠加,那么不管有多少神经元,那本质上还是一个线性模型。

既然是线性模型,就不能处理线性不可分问题。在深度学习(Deep Learning)发展史中讲过,不能通过一条直线把红色点和绿色点给分开:

图片

2. 激活函数

为了解决感知机的线性性问题,所以通过引入非线性的激活函数来在神经网络中 引入非线性性。

激活函数这个概念非常直观。我们刚才说神经元只有一次接收的信号足够强才会被激活,然后才会发送信号。激活函数就是这样一个函数,当信号不够强的时候,它的值就为0,也就是不产生输出。最早的激活函数是这样一个阶跃函数:

图片

但是阶跃函数在0处是不可微的,在其他地方导数处处为0。因此阶跃函数性质不好,所以提出了一些其他的激活函数替代:

图片

比如和阶跃函数长相非常类似但是处处连续可导的sigmoid函数(左上)。在讲这些激活函数的性质和区别之前,有请下一个重要概念:反向传播登场。

3.反向传播

在刚才讲梯度下降法的时候,我们说到要对损失函数在参数处求导,通过导数值确定梯度的方向,也就是弹珠下降的方向。要理解反向传播,只需要一点点的数学知识。

图片

(图文不符,只用于意会)

我们知道损失函数是最后一层的输出和真实结果之间的距离。

那简单来说损失函数包括两部分。一部分是最后一层的参数部分  ,另一部分是上一层的输出,也就是最后一层的输入  。

调整这一层的参数肯定就是对这一层的参数求偏导就可以,那要调整上一层的参数呢?

就涉及到对  求偏导,然后通过链式法则传递到上一层。

形象来看的话,就好像一个用来调整神经元的信号从后往前一层一层传播。这就是反向传播的概念。

4.梯度消失和梯度爆炸问题

有了反向传播的概念,我们可以想象反向传播就是要累积一个总的调整量,然后把这个总的调整量一层一层往前分配给每一个神经元,就像分发赈济粮一样,一层一层往前的时候,雁过拔毛,层层克扣。越往前,可分配的调整量就越小,甚至几乎没有了。这就是梯度消失问题

在数学上,表现为链式法则中很多个梯度相乘,当梯度小于1的时候。很多个小于1的数相乘就会无限接近于0。

梯度爆炸问题与之刚好相反,表现为很多大于1的数相乘,连续相乘就会导致梯度非常大。梯度过大或过小都会使小球每次走很大一步或者根本不走。导致神经元无法进行有效调节。

还是上一期说过,梯度消失问题在1991年由一个博士生在他的博士毕业论文里面阐述。1997年提出了LSTM模型,用来解决循环神经网络里的梯度消失问题。2012年,LeCun使用了ReLU作为激活函数,ReLU的梯度在大于0的时候刚好等于1,几乎从根本上解决了梯度消失问题。2015年,华人深度学习大牛何凯明构造了ResNet,创造性地使用了跳跃连接,将梯度直接从后面的层跳跃传递到前面的层,ResNet现在已成为深度学习领域的重要基石。

图片

5.卷积神经网络(CNN)

图片

卷积神经网络是一种特殊设计的神经网络。里面的卷积核(上图)就是主要要学习的参数(要调整的神经元)。

卷积神经网络中卷积核在数据上每次挪动一格与数据窗口做对应元素相乘且相加(内积)操作,这个过程很像一个卷饼一点一点卷的过程,所以叫卷积。

卷积结果衡量了卷积核与数据窗口的相似程度。因此,卷积神经网络常用来处理图像数据。卷积核提取的一般都是图像中的特征。

图片

实际中,卷积神经网络一般有非常多层,其中浅层的卷积核中大多是一些局部的特征,而深层的卷积核中大多是一些较为全局的特征(上图)。这也是深度学习模型一般都非常深的原因之一:有利于学习到不同层次的特征。

卷积神经网络通过判断输入图像中的特征与已有卷积核所表示的特征的相似程度来理解图像。

6.循环神经网络(RNN)

实际生活中,有一类问题中的数据具有时间性或者顺序性,比如语言。一句话中每个字的顺序不同所表达的意思是完全不同的。

为了让机器在处理这类数据时,看到下一个字,还能保留着所看到的上一个字的“记忆”。一种特殊设计的深度学习模型RNN被提出来了。

图片

上图中带框的字母表示数据,不带框的字母表示权重。权重对所有数据的处理是共享的。

RNN在使用的时候,当他看到一个字  ,他会预测下一个字  ,同时产生一个记忆  。每次看到一个新的字,他都会更新这个记忆。然后利用前面的记忆和当前看到的字来预测下一个字。

这就像人说话的时候,如果要有逻辑性,就必须知道刚才在讲什么,以及现在讲到哪了,才能继续往下讲。

在循环神经网络的基础上,出现了LSTM、GRU、双向RNN等变体。RNN是处理时间序列数据的一个伟大尝试,尤其是在自然语言处理上,它的理念逐渐演化为了注意力机制、Transformer等现代架构。

7.自编码器(AutoEncoder)

图片

自编码器是一种非常直观的神经网络模型。它通过特殊的设计将原始数据表示为简单的低维数据(上图红色),再从低维数据重建回原始数据。

如果这个过程能够很好的重建,就说明中间的低维数据是原始数据的一个很好的表示。所以自编码器是一种降维方法,或者说是去噪方法。

这就好比我们说某个人非常“怎么样”,我们就大概能够想象这个人是个什么样的人了。“怎么样”这个简单表示就是这个人的一个很好的特征。

8.变分自编码器(Variational AutoEncoder)

自编码器一般用于数据的压缩和降维。但是设想:如果我们不用自编码器中的编码器部分(蓝色),直接在中间层(红色)输入,能得到什么结果呢?

图片

具体来说,假如我们把满月进行编码,然后重构回满月。把半月编码,然后重构回半月。那如果我们在满月和半月的低维表示中取一个中间位置。重构出来的是什么?(上图左)

我们希望能够重构出来一个盈凸月。(上图右)

为了实现这一点,我们要对中间的低维表示加上一个分布的限制。这就是变分自编码器(VAE,不是许嵩(误))。

图片

具体来说,变分自编码器除了让原始数据降到低维表示然后重构回原始数据之外,还让中间的低维表示服从一个正态分布(或是其他分布)。这样,我们就可以从正态分布中抽样,然后生成和原始数据类似的数据了。

变分自编码器中的变分来自于数理统计中变分推断。具体来说,变分自编码器的损失函数中的两部分来自于模型似然函数的变分下界。

9.扩散模型(Diffusion model)

既然说到了变分自编码器,就不得不讲讲在数学上与变分自编码器的推导非常相似却复杂但是更直观的扩散模型。

图片

就好像,往一杯清澈的水里不断滴入墨汁,墨汁会不断扩散直到充满整个水杯一样。

扩散模型通过在数据(图片)中不断加入噪声,使其完全变成一张噪声图片,再通过反向过程,把这张图片还原。(上图)

训练好这个过程后,任取一张噪声图片,一定能还原为一张与原始图片类似的图片。

比如原始图片是狗狗,那么生成的就也是一个狗狗,但是因为噪声图片是任取的,所以生成的狗狗都不会有重复的。

扩散模型从形式上看非常像很多变分自编码器的叠加。

10.生成对抗网络Generative Adversarial Network(GAN)

图片

前面说的变分自编码器和扩散模型都是生成模型。我们想让模型“说话”或者“画画”都需要用到生成模型

而生成对抗网络也是一类非常典型的生成模型。

生成对抗网络,顾名思义,包含两个主要的部件:生成器和判别器。生成器用来从随机噪音中生成“假图像”,判别器接受真实的训练图像和生成器生成的假图像,判断图像是真实的还是生成器生成的假的。(上图)

循环这个过程,生成器不断迭代自己,试图骗过判别器。而判别器也不断迭代自己,试图逮捕越来越精明的生成器。在这个过程中,生成器生成的图像越来越真实。

最终,我们可以拿生成器来生成想要的图像。

11.嵌入(Embeding)

除了图像生成以外,还有一类重要的生成模型就是文字生成。文字生成模型可以用来与人类对话。

我们知道图像非常容易转换成机器能够理解的数据,因为它本来就是一个矩阵,但是文字呢?机器是如何理解文字的呢?

在机器中,文字当然也是要被处理成向量这种机器能够理解的形式。这个过程就是文字的编码过程。

但是对文字的编码可以有很多种方式。这里讲一个最实用、最广泛的编码方式:嵌入

图片

对嵌入的理解也很直观。我们把不同的词编码成向量的同时,我们希望相似的词之间保持某种相似性。

上图中,puppy和dog都有狗的意思,所以它们离得就比较近,而猫cat和狗都是小动物,所以它们离得也不会特别远。但是houses房屋与动物关系比较远,那么他们就离得比较远。

除此之外,我们还希望词与词之间的距离和方向有着某些特殊的含义。

例如上图中,男人man这个词的词向量加上一个短向量变成了女人woman,而国王king这个词的词向量加上相同方向和长度的短向量变成了女王queen。这里这个短向量就表示了一种性别的平移。

12.注意力机制(Attention Mechanism)

在讲文字生成之前,还要引入一个重要概念:注意力机制。

如果你关注深度学习领域,那么你一定听说过注意力机制这个词。那么注意力机制到底是什么意思,它是怎么实现的?

图片

注意力机制这个词虽然听起来非常高大上,但是其实它就是计算某种词与词之间的相似性。

比如上图这句话中,animal和it的注意力得分非常高,那么可能就表示这句话中animal和it指代的对象是相同的。

等等,刚才在讲嵌入的时候,不是说词已经被编码成向量了吗?那么词与词之间的相似性不是已经固定了吗?

别着急,这里的相似性不是直接算词向量与词向量之间的相似性。

具体来说,每个词都又重新被编码成Q、K、V三个向量(如果你稍微了解Attention的话)。

形象来说,Q(Query)就好像每个词发出的问题,比如它会问:“你跟我指代的对象相同吗?”,然后其他词的K(Key)就会回答它的这个问题。也就是Q和K之间会计算相似性,相当于每个词都会问一遍其他词这个问题,每个词也都会回答一遍别的词这个问题。

这就是词与词之间的注意力,当得到注意力之后,再与这个词的当前表示V(Value)之间再做操作,以得到想要的输出。

在实际情况下,这样的注意力机制会同时存在很多个。叫做多头注意力机制。

就好像每个词都有很多问题,比如他会问别的词:“你是跟我相互作用的动词吗?”、“你是跟我有互动关系的名词吗?”。当然,更一般的情况是,这个Q和K关注的问题是人类解释不了的。

13.Transformer

Transformer仿佛是现在深度学习领域的唯一真神。不断有别的模型挑战他的地位,但是目前来看还有没有其他真正能打的对手。

Transformer由Google在论文《Attention is all you need》中提出。这个论文的题目就很霸气和不寻常。

Transformer在当时的创新就在于完全放弃了传统的RNN、CNN等架构。完全采用注意力机制来进行自然语言的处理。这一创新犹如火星撞地球一般迅速横扫了整个自然语言处理学术界。彻底改变了自然语言处理(NLP)领域。

图片

Transformer也是采用编码器-解码器架构(上图左-右)。

放弃了RNN架构所以获得了更好的并行处理能力,更好地解决了长程依赖问题(RNN因为是循环操作,所以当序列变长,网络就会忘记前面的内容,Transformer不会有这个问题)。

14.BERT和GPT

Transformer对后续的BERT、GPT等模型产生了深远影响。BERT和GPT分别是Transformer的编码器和解码器。

图片

BERT因为使用Transformer的编码器部分,所以它可以用来做任何需要语义理解的任务。

GPT因为使用Transformer的解码器部分,所以它可以用来做语言生成任务。

GPT 和 BERT,它们分别使用自回归语言建模和自编码语言建模作为预训练目标。也就是说,因为语言数据的特殊性,BERT和GPT可以通过类似“完形填空”的方式进行预训练,学习大量的基础知识,然后在特定任务上进行微调。

所有后续的大规模预训练模型都是这两个模型的变体。

GPT及其对应产品ChatGPT一经问世就瞬间成为全球爆品。引起了全球学术界和工业界的大语言模型热潮。以ChatGPT为代表的大语言模型向世人展露出了前所未有的能力。从那之后,一大波大语言、多模态的预训练模型如雨后春笋般迅速出现。

图片

ChatGPT回答的关于深度学习目前有哪些应用这个问题。

总的来说,深度学习是目前一个非常火的赛道。篇幅有限,只能介绍一些基础的概念。目前深度学习领域的成果和发展远远不止本文所描述的这些。但希望这篇文章对您理解深度学习有所帮助。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/829556
推荐阅读
相关标签
  

闽ICP备14008679号