机器学习和深度学习概念浅谈(二)

226 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

神经网络

深度学习的概念源于人工神经网络的研究,但不完全等于传统神经网络。在叫法上,确实很多深度学习算法会包含“神经网络”这个词,比如:卷积神经网络、循环神经网络。所以深度学习可以说是传统神经网络的升级,约等于神经网络。

image.png

深度学习是半理论、半经验的建模方式。传统机器学习的特征提取主要依赖人工,针对特定简单任务的时候人工提取特征会简单有效,但是不能通用。深度学习的特征提取并不依靠人工,而是机器自动提取的。这也是为什么大家都说深度学习的可解释性很差,因为有时候深度学习虽然能有很好的表现,但是我们并不知道他的原理是什么。

深度学习的神经网络层数很多,宽度很广,理论上可以映射到任意函数,所以能解决很复杂的问题;深度学习高度依赖数据,数据量越大,表现越好;深度学习有很多框架,如TensorFlow、Pytorch等。

不过深度学习模型设计非常复杂,需要投入大量的人力物力和时间来开发新的算法和模型。大部分人只能使用现成的模型。

CNN

  • 卷积层:保留图片的特征。
  • 池化层:把数据降维,可以有效的避免过拟合。
  • 全连接层:根据不同任务输出我们想要的结果。 应用有:图片分类;目标定位;目标分割;人脸识别;骨骼识别。

RNN

RNN是一种能有效的处理序列数据的算法。比如:文章内容、语言音频等。之所以能处理序列数据,是因为在序列中前面的输入也会影响到后面的输出,相当于有了“记忆功能”。但是RNN存在严重的短期记忆问题,长期的数据影响很小,哪怕是重要的信息)。

于是基于RNN出现了LSTM和GRU等变种算法,主要是解决长期信息可以有效的保留;挑选重要信息保留,不重要的信息会选择“遗忘”。

Q-Learning

两个矩阵:R矩阵和Q矩阵。R矩阵是reward矩阵,Q是agent学到的经验,简单说就是转移规则。

Q-Learning会随机初始化一个状态,第一步是随机选择一个action。从第二步开始,计算每一种动作的reward值,取最大的reward动作执行,进入下一个状态。当然,每一次执行动作,都需要更新Q矩阵。最后训练收敛后,对Q矩阵进行规范化,一般是每个非零元素都除以矩阵的最大值。

一旦矩阵Q足够接近于收敛状态,agent便学习到了转移至目标状态的最佳路径。

Q-Learning的决策是根据Q矩阵的值,执行那个动作后得到的奖励更多,就选取那个动作执行。这是基于状态空间和动作空间都很小,如果状态空间和动作空间变得很大很大,那我们还能用一个Q矩阵来表示吗?显然不可以,就引入了价值函数近似

深度强化学习

DRL(Deep Reinforcement Learning)的首次惊艳亮相,应该是 DeepMind 在2013年首次将其应用于 Atari 游戏中提出的 DQN(Deep Q Network)算法。时至今日,DRL 已经从玩 Atari,进化为下围棋(Alphago)、玩电竞(Dota AI、StarCraft AI),一次次刷新大家的三观。

深度强化学习的主要运行机制,其实与强化学习是基本一致的,也都是根据输入的s(t),找到对应的输出a(t),只不过使用了深度神经网络来完成这一过程。

更有甚者,有的深度强化学习算法,干脆直接在现成的强化学习算法上,通过添加深度神经网络来实现一套新的深度强化学习算法,非常有名的深度强化学习算法DQN就是典型的例子。

针对车服用户运营的问题,首先两个实体中 Agent 是车服平台,Environment 是用户,或者其他上下文。在每一轮迭代中 Agent 会向环境发送一张一定面额一定周期的优惠券,或者一定周期的消息或者空动作,Environment 收到动作后经过一定周期会做出一个正向或负向反馈,该反馈被量化后发送给 Agent,环境状态的变化 State 也会返回给 Agent。

在这个场景里,强化学习的第一个要素 Action 包括不同面额优惠券的推送、不同周期的消息推送、空动作;第二个要素 State 是观察和抽取出来的一些特征的表征,包括用户线下行为、用户线上行为、静态行为、模型学习预估分;第三个要素 Reward 是用户对 Action 的反馈,如空动作加油、消息推送加油、用优惠券加油;用户查看优惠券、查看消息;无加油无查看。除此之外,针对场景需要定义了两类 Action 周期:动作周期和沉默周期,传统强化学习当 Agent 发出动作 Environment 会马上给出一个响应,但在 O2O 场景下用户需要一定周期(动作周期)对动作做出响应,如加油,并且在下一时刻用户不可能再去加油,会进入沉默周期。

关于具体的实现,现在很容易找到具体方法的开源实现。比如说强化学习的 DQN 算法,可以找到很多。关键的有两点,第一个是对于场景的理解,能够对这个业务场景的问题抽象成一个算法问题;第二点,能够深入的理解算法的细节以及优缺点,这样就可以,将场景和一些算法能够去匹配起来,用合适的算法来解决形式化出来的算法问题,这样就可以去适配业务场景,拿到正向的效果。