-->

深度学习推荐系统实战_04_03_深度学习基础你打牢深度学习知识的地基了吗

你好,我是王哲。

今天呀我想用一节课的时间带你梳理,巩固一下深度学习的相关基础知识。

打好基础之后,我们再去学习深度学习推荐系统的基础细节,就能更加得心应手了。

具体来说,我会从一个基本的神经元开始讲到多神经元组成的神经网络,再到结构各异的深度学习网络。

最后再讲讲深度学习和推荐系统是怎么结合的。

这样从零到一带,你体会深度学习,网络生长的整个过程,你是不是已经迫不及待想要开始今天的课程了?接下来我们就一起钻进一个神经元里边,跟他一起成长吧。

上中学的时候,你肯定在生物课上学到过。

神经元是我们神经系统的最基本单元。

我们的大脑小脑脊髓都是由神经元组成的,像是大脑就大概包含了一千亿个神经元。

正是这些小小的神经元之间互相连接合作,让大脑能够完成非常复杂的学习任务。

这是一个多么神奇的过程啊,于是啊计算机科学家们就有了一个设想,是不是我们也能从神经元出发,创造出一个人造大脑,来帮我们完成各种不同的任务呢?这其中当然也包括我们课程要讲的快荐任务。

事实上,随着近十年深度学习网络的快速发展,这个设想已经被成功的应用到了图像识别、语音处理、推荐、搜索等多个领域了。

那组成这个人造大脑的基础神经元到底是啥样的呢?我在文稿里放了一张神经元的结构示意图,你会看到它主要由树突、细胞体、轴突、轴突、末梢这几个部分组成。

树突是神经元的输入信号通道,它的功能是将其他神经元的动作电位,你也可以理解成一种信号传递给细胞体。

在接收到其他神经元的信号后,细胞体会根据这些信号改变自己的状态变成激活态还是未激活态。

具体的状态呀取决于输入信号,也取决于神经细胞本身的性质,是抑制还是加强的当信号量超过某个阈值的时候,细胞体就会被激活产生电脉冲,电脉冲会沿着轴突传播,并通过轴途末梢传递到其他的神经元。

我前面说这些啊都是神经元工作的生物学过程。

那如果用神经元来解决推荐问题,具体又该怎么做呢?我来举个例子,我们可以假设其他神经元通过数图传递过来的信号,就是推荐系统用到的特征。

那有的信号可能是用户性别是男是女。

有的信号可能是用户之前有没有点击过这个物品等等。

细胞体在接收到这个信号呀,会做出一个简单的判断,然后通过轴突输出一个信号,但个输出信号的大小就代表了用户对这个物品的感兴趣程度。

这样一来,我们就可以用这个输出信号给用户做推荐了。

看起来用神经元来完成推荐任务还是很有希望的。

但在实际应用里面呀,我们还得把生物结构的神经元抽象成一个数学形式,这样我们才能用程序来实现它。

我在文稿中就放了这样一个抽象的结构。

这个神经元的构造很简单,只有两个传递输入信号的输图。

我们可以看到图二中的x一、x二就相当于两个数图传递的输入信号。

蓝圈中的结构相当于神经元的细胞体,细胞体用某种方式处理好。

输入信号后,右边的轴突会输出信号y它的输入输出都很简单。

所以我想你的疑问肯定聚焦在细胞体,对输入信号的处理方式上了,我们可以把细胞体的数学结构放大一点看看。

其实啊细胞体中的计算就做了两件事情。

一件事情是把输入信号x一x二各自乘以一个权重w一w二。

再把各自的乘积加起来之后输入到一个叫激活函数的结构里。

我们以sigmoid的激活函数为例,它的数学定义是一加上e的负z次方分之一,它的函数图像像是一个s型曲线。

它的作用啊就是把输入信号从负无穷到正无穷的定义域,映射到零到一的值域,再加上sigmoid id函数,有处处可导的特性,方便之后梯度下降。

模型学习过程,所以成了经常使用的激活函数。

当然激活函数的种类还有很多,比如流行的有tany、 h rall等等。

在训练神经元或者神经网络的时候,我们也可以尝试多种激活函数,根据效果来决定最终选择哪个。

不过,单神经元由于受到简单结构的限制,预测能力并不强。

因此,在解决复杂问题的时候,我们经常会用到多个神经元组成的网络。

其样它就具有更强的拟合数据的能力了。

这也就是我们常说的神经网络,比如说文稿中的示意图,就像我们展示了一个由输入层、两神经元隐层和单神经元输出层组成的简单神经网络。

其中每个蓝色神经元的构造都和我们刚才讲的单神经元相同。

H一和h二神经元的输入是由x一和x二组成的特征向量,而神经元o一的输入则是由h一和h二组成的输入向量,这是一个最简单的三层神经网络。

在深度学习的发展过程中,因为有了研究人员对神经元不同的连接方式的探索,才衍伸出了各种不同特性的深度学习网络,让深度学习模型的家族之繁叶茂。

在后面课程的学习中啊,我们也会深入讲解各种不同的网络结构。

相信你对这句话的理解也会随着学习的推进更加深刻。

那清楚了神经网络的结构之后,更重要的问题是我们应该怎么训练它呢?也就是说我们怎么得到刚才神经网络示意图里从x一到h一h二的权重w一w三呢?这就需要用到神经网络的重要训练方法,前向传播和反向传播了得向传播的目的啊,是在当前网络参数的基础上得到模型对输入的预估值,也就是我们常说的模型推断过程。

比如说我们要通过一位同学的体重身高预测,他的性别前向传播的过程就是给定体重值七十一,身高值一百七十八,通过神经元h一h二和o一的计算得到一个性别概率值。

比如说零点八七,这就是它可能是难性的概率。

在得到预估值后,我们就可以利用损失函数计算模型的损失了。

比如说我们采用绝对值误差作为我们的损失函数。

如果这位同学的真实性别是难,那真实的概率就是一根据绝对误差的定义,这次预测的损失就是一减零点八七的绝对值等于零点一三。

我们常说啊知错能改,善莫大焉。

神经网络的学习更是践行的这句话,发现了预测值和真实值之间的误差。

我们就要用这个误差来指导权重的更新,让整个神经网络在下次预测的时候变得更准确。

最常见的权重更新方法就是梯度下降法。

它是通过求取偏导的形式来更新权重的。

比如说我们要更新权重,w五就要先求取损失函数到w五的偏导从。

数学上的角度来说,梯度的方向是函数增长速度最快的方向。

自然梯度的反方向就是函数下降最快的方向。

所以让损失函数减少最快的方向,就是我们希望梯度w五更新的方向。

这里我们再引入一个超参数阿尔法,它代表了梯度更新的力度,也叫学习率。

好,到这里我们就可以写出梯度更新的公式了。

T加一轮的权重等于t轮的权重减去阿尔法乘以梯度。

对于输出层神经元,也就是o一来说,我们当然可以直接利用梯度下降法计算神经元的相关的权重,也就是w五和w六的更新,从而更新权重。

但对于隐层神经元的相关参数,我们又该怎么利用输出层的损失进行梯度下降呢?答案是利用隐导过程中的链式法则,通过链式法则我们可以解决梯度逐层反向传播的问题。

最终的损失函数到权重w一的梯度就是由损失函数到神经元h一输出的偏导,以及神经元h一输出到权重w一的偏导相乘而来的。

也就是说,最终的梯度逐层传导回来,指导权重w一的更新。

具体在计算的时候,我们需要根据具体的问题,明确最终损失函数的形式,以及每层神经元激活函数的形式,再根据具体的函数形式进行偏导的计算。

因为这部分的学习需要一定的微积分基础。

如果你觉得不是很好理解,也不用担心。

因为对于大部分的机器学习库来说,梯度反响传播的过程已经被实现,并且封装好了,直接调用就可以了。

但是原理我建议大家还是有必要了解的。

好了,到这里,神经网络相关的基本知识我们就讲完了。

前面讲了这么多,我想再带你做一个总结。

神经元是神经网络中的基础结构,它参照了生物学中的神经元的构造,抽象出带有输入输出和激活函数的数学结构,而神经网络是通过将多个神经元以串行、并行、全链接等方式连接起来形成的网络神经网络的训练方法是基于链式法则的梯度反向传播。

那听到这儿,细心的你可能会问了,搭建深度学习推荐系统跟神经网络到底有什么关系呢?那想要搞清楚这个问题,我得先给你讲点神经网络和深度学习的历史。

其实,学术界对于人工神经网络的研究非常早,可以追溯到上世纪的六十年代。

但由于计算机发展本身的限制,我们没有办法完成神经网络学习所需的大量结构。

直到上世纪八十年代,hinton等人提出了反向传播算法神经网络,才能够完成类似字母识别的简单任务。

时间。

到了二零一二年,hinton的学生alex提出了一种用于图像识别的深度神经网络结构。

Alex net在当年著名的图像识别大赛image上上,他以碾压第二名的成绩荣获桂冠。

也正是从那个候起,人们突然意识到,原来用深层的的神经网络可以完这么复杂的任务,深度学习的浪潮从此被正式引爆了。

结合文稿中的示意图,你可以看到跟我们刚才讲的简单神经网络相比,alex net无论从深度还是从每一层的神经网络数量来说都增加了很多,并且神经元的连接方式和种类也更加丰富了。

那知道了这些,我们就可以回答刚才提出的问题了。

深度学习可以说是神经网络的延伸和发展,它极大的丰富了神经网络的种类结构,让它能够处理各类复杂的问题。

这个时候你可能又想问,相比传统的神经网络,好像深度学习也没有什么革命性的创新呀。

为啥?到了二零一二年才取得这么大的突破呢,这是个好问题。

我觉得主要有三个原因,一个是算力的极大提高。

到了二零一二年,随着GPU大量应用于机器学习领域,神经网络的训练速度也有了量级上的提高。

时至今日呢open AI刚发布的语言模型GPT three居然有高达一千七百五十亿个参数,这放在十年前啊是完全不可想象的。

第二个原因啊是数据的极大丰富。

之前神经网络面临的一个大问题,到在训练数据量较小的情况下,模型难以收敛。

但随着越来越多成熟的大数据开源平台,以及越来越多丰富的开源数据集的出现,即使神经网络的结构变得越来越复杂,我们也完全可以凭借海量的训练数据使它完全收敛。

最后一个原因是深度学习理论的进一步发展。

虽然深度学习是站在神经网络这一巨人的肩膀上发展起来的,但专家们也取得了非常多的理论创新,就比如puling层的加入和成功的应用,各类更适合深度学习的梯度下降方法的提出等等,这些都让深度学习的应用成为了可能。

好了,刚才呀我们讲的都是深度学习的通用知识。

那深度学习又是怎么应用在推荐系统中的呢?下面我就着重来说一说这一点。

在刚才讲解神经元原理的时候,我们讲到用单个神经元可以预测用户对物品的感兴趣程度。

事实上,无论是单个神经元还是结构非常复杂的深度学习网络,他们在推荐系统场景下要解决的问题都是一样的,就是预测用户对某个物品的感兴趣程度,让个感兴趣程度往往是一个概度。

最典型的就是点击率、播放率、购买概率等等。

所以在深度学习时代,我们使用深度学习模型替代了传统的推荐模型,所的就是让它做出更准确的推荐。

再像上节课提出的深度学习的革命,要求学习对革命这个涉做出大幅度的调整。

而这些调整因为涉及到分布式计算平台、深度学习平台和线上的模型服务部分,所以我们需要在推荐系统的整体架构上都做出不小的改造。

所它啊适应深度学习时代的要求,这也是我们学习这门课的目的所在。

好了,今天的内容讲完了,我们一起来做个总结。

今天呀我带你熟悉了深度学习的基础知识。

我们从神经元学到了神经网络,再到训练神经网络的方法,以及神经网络和深度学习的关系。

今天的知识点比较密集,而且每个知识点之间都是层层递进了。

为了方便你记忆,我把重点内容整理成一张表格,放在了文稿里。

你可以看看这些知识是未来我们搭建深度学习推荐系统的基础。

我希望你能够在动手实践之前完全掌握它。

从下节课开始,我们就会进入深度学习推荐系统、技术细节和实战的环节,你准备好了吗?最后我们再来思考一个问题,你觉得都有哪些因素影响着深度学习网络的结构,深度学习模型是越深越好吗?为什么?欢迎在留言区分享你的答案和疑惑。

如果你的朋友也想了解深度学习和神经网络的基本知识,也欢迎你把这节课分享给他。

好了,今天的内容就到这里,我们下节课见。