写点什么

浅谈深度学习背后的数学

  • 2020-09-24
  • 本文字数:2503 字

    阅读完需:约 8 分钟

浅谈深度学习背后的数学

本文最初发表于 Towards Data Science 博客,经原作者 Trist’n Joseph 授权,InfoQ 中文站翻译并分享。


深度神经网络(Deep neural network,DNN)本质上是由具有多个连接的感知器形成的,其中一个感知器是单个神经元。我们可以将人工神经网络(Artificial neural network,ANN)看作一个包含一组沿着加权路径馈送的输入系统。然后对这些输入进行处理,并产生一个输出来执行某些任务。随着时间的推移,人工神经网络将会“学习”,并发展出不同的路径。各种路径可以具有不同的权重,并且被认为更重要(或产生更理想结果)的路径在模型内被分配的权重比那些产生较少理想结果的路径更高。


在深度神经网络中,如果所有的输入都密集地连接到所有的输出,那么这些层就称为密集层(Dense layers)。此外,深度神经网络可以包含多个隐藏层(Hidden layer)。隐藏层基本上是神经网络输入和输出之间的点,激活函数在这里对输入的信息进行转换。它之所以被称为隐藏层,是因为它不能直接从系统的输入和输出中观察到。神经网络的深度越深,网络能从数据中识别的信息就越多。


然而,尽管从数据中学习尽可能多的信息是我们的目标,但深度学习模型可能会受到过拟合的影响。当模型从训练数据中学习了太多的信息,包括随机噪声时,就会出现这种情况。模型能够确定数据中非常复杂的模式,但这会对新数据的性能产生负面影响。训练数据中接收到的噪声并不适用于新的或未见过的数据,并且模型无法对所发现的模式进行泛化。非线性在深度学习模型中也是非常重要的。虽然模型会因为拥有多个隐藏层而学到很多信息,但将线性形式应用于非线性问题会导致性能低下。



现在,问题来了,“这些层是如何学习的?”那么,让我们将人工神经网络应用到一个真实的场景中去解决问题,以了解如何训练模型来完成目标。在目前全球新冠肺炎疫情之下,很多学校都过渡到了虚拟学习,这使得一些学生担心他们通过课程的机会。任何人工智能系统都应该能够解决“我能否通过这门课程”这种问题。


为简单起见,让我们设想此模型只有 3 个输入:学生听课次数、花在作业上的时间,以及在整个授课过程中网络掉线的次数。这个模型的输出将是一个二元分类;学生要么通过课程,要么没通过课程。现在是学期末,学生 A 听了 21 堂课,花了 90 个小时完成作业,并且在这个学期中,网络掉线 7 次。这些输入被输入到模型中,输出预测学生有 5%的机会通过课程。一个星期后,期末成绩公布,学生 A 通过了这门课程。那么,这个模型的预测出了什么问题呢?


从技术上来说,并没有出问题。该模型本来可以按照目前开发的模型工作。但问题是,模型并不知道发生了什么。我们本来只是在路径上对一些权重进行了初始化,但模型目前并不知道什么是对的,什么是错的;因此,权重是不正确的。这就是学习的意义所在。我们的想法是,模型需要了解什么时候是错误的,我们通过计算某种形式的 "损失 "来实现这一点。计算的损失取决于当前的问题,但它通常涉及最小化预测输出和实际输出之间的差异。



在上面的场景中,只有一个学生和一个误差点需要最小化。然而,通常情况却并非如此。现在,考虑到有多个学生和多个差异最小化。因此,总损失通常计算为所有预测值与实际观测值之差的平均值。


回想一下,我在前面提到的被计算的损失取决于当前的问题。因此,由于我们当前的问题是二元分类,适当的损失计算将是交叉熵损失。这个函数背后的想法是,它将学生是否会通过课程的预测分布与实际分布进行比较,并试图将这些分布之间的差异最小化。


假设我们不再想预测学生是否能通过这门课程,而是现在想预测他们这门课的成绩。交叉熵损失将不再是一个合适的方法,相反,均方误差损失将更合适。相反,均方误差损失会更合适。这种方法适用于回归问题,其想法是它将尝试最小化实际值和预测值之间的平方差。



现在,我们了解了一些损失函数,就可以进入损失优化和模型训练了。拥有良好的深度神经网络的一个关键因素是拥有合适的权重。损失优化应该是土找到一组权重 ,它将使计算的损失最小化。如果只有一个权重分量,则可以在二维图上绘制权重和损失,然后选择使损失最小的权重。然而,大多数深度神经网络具有多个权重分量,将一个 维图进行可视化是非常困难的。


取而代之的是,计算损失函数相对于所有权重的导数来确定最大上升方向。既然模型现在已经理解上行和下行的方向,它就会向下行进,直到在局部最小值处到达收敛点。一旦这个下降点完成,就会返回一组最优权重,这就是深度神经网络应该使用的权重(假设模型开发得很好)。


计算这个导数的过程被称为反向传播(Back propagation),它本质上是微积分的链式法则。考虑到上面显示的神经网络,第一组权重的微小变化是如何影响最终损失的?这就是导数或梯度试图解释的内容。但是,第一组权值被输入到一个隐藏层,然后隐藏层有另一组权值导致预测的输出和损失。因此,也应该考虑权重变化对隐藏层的影响。这是网络中仅有的两个部分。但是,如果有更多的权重需要考虑,这个过程可以通过将链式规则从输出应用到输入来继续这一过程。



训练深度神经网络时要考虑的另一个重要因素是学习率。当模型在寻找一个最优的权值集时,它需要通过一些因子来更新它的权重。虽然这看起来微不足道,但是决定模型应该移动的因子是相当困难的。如果因子太小,那么模型可能会运行一段指数级的时间,或者陷入某个不是全局最小值的地方。如果因子太大,那么模型可能会完全偏离目标点,进而发散。


虽然固定的学习率可能是理想的,但自适应学习率(Adaptive learning rate)会减少出现前文所提到的问题的机会。也就是说,因子将根据当前梯度、当前权重的大小或可能影响模型下一步查找最佳权重的位置的某些其他因素而发生变化。



可以看出,深度神经网络是建立在微积分和一些统计学的基础之上的。评估这些过程背后的数学非常有用,因为它可以帮助人们了解模型内部真正发生的事情,这可以导致开发更好的整体模型。但是,即使这些概念不容易理解,大多数程序都附带了自动微分等工具,所以不用担心。祝你编码愉快!


作者介绍:


Trist’n Joseph,数据科学家、研究员、内容创建者。


原文链接:


https://towardsdatascience.com/the-mathematics-behind-deep-learning-f6c35a0fe077


2020-09-24 08:002060
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 557.5 次阅读, 收获喜欢 1978 次。

关注

评论

发布
暂无评论
发现更多内容

iOS 开发者福音:iOS 项目也能支持 MQTT 5.0 啦!

EMQ映云科技

ios mqtt emq tvos osx

dart系列之:安全看我,dart中的安全特性null safety

程序那些事

flutter dart 程序那些事 12月日更 flutter 调试工具

阿里巴巴、埃森哲、德勤三方圆桌对话——《与数字化先锋共绘创新蓝图》

大咖说

阿里巴巴 大咖说 数字经济 数智化

Vue之全局事件总线和消息订阅与发布

编程江湖

前端开发

react源码解析9.diff算法

buchila11

React

基于JSX的全新BDD工具 - Crius

RingCentral铃盛

使用 JavaScript 给微信用户发送消息

汪子熙

微信 sdk 28天写作 Web JS SDK 12月日更

JavaMoney规范(JSR 354)与对应实现解读

vivo互联网技术

Java、 API 虚拟化 虚拟货币

OPPO云VPC网络实践

安第斯智能云

云计算 SDN架构 智能网卡vpc

使用 scipy.fft 进行Fourier Transform:Python 信号处理

华为云开发者联盟

Python 音频 信号处理 傅立叶变换 Fourier transform

大数据开发之数仓工具Hive(一)

@零度

大数据 hive 数仓工具

初识腾讯移动通讯 TPNS~

阿策小和尚

28天写作 Android 小菜鸟 12月日更

0 基础学习 Flutter~(mini 进阶版)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter 内容合集 签约计划第二季

Java反射机制获取运行时类的完整结构

编程江湖

JAVA开发

前端开发之cypress的自动化实践

@零度

前端 Cypress

云原生时代,领域驱动设计思想(DDD)如何落地?

华为云开发者联盟

软件架构 架构设计 建模 领域驱动设计思想 领域模型

【LeetCode】保持城市天际线Java题解

Albert

算法 LeetCode 12月日更

大数据开发技术NN和2NN工作机制

编程江湖

大数据

龙蜥社区一周动态 | 12.06-12.10

OpenAnolis小助手

龙蜥社区

❤️使用 HTML、CSS 和 JS 创建在线音乐播放器(免费送完整源码)❤️

海拥(haiyong.site)

响应式 大前端 28天写作 签约计划第二季 12月日更

在中国如何打造一个有生命力的开源项目?

Jianmu

DevOps 持续集成 CI/CD 开源社区 持续部署

react源码解析10.commit阶段

buchila11

React

推倒重来的觉悟

FunTester

单元测试 Mockito powermock spock FunTester

技术分享| Linux高并发踩过的坑及性能优化

anyRTC开发者

Linux 音视频 高并发 服务器 高并发优化

今年双12,《代码随想录》冲榜TOP1

博文视点Broadview

Linux学习方法《Linux一学就会》:网络管理技术

侠盗安全

Linux linux运维 运维工程师 云计算架构师

存储空间降为原来的1/7,TDengine在中移物联网轨迹数据存储中的应用

TDengine

数据库 tdengine 时序数据库

Android C++系列:Linux Socket编程(二)网络套接字函数

轻口味

28天写作 Android; 12月日更

设计模式【6.1】-- 初探适配器模式

秦怀杂货店

Java 设计模式

React进阶(四):路由介绍

No Silver Bullet

React 路由 12月日更

设计模式【6.2】-- 再聊聊适配器模式

秦怀杂货店

Java 设计模式 适配器模式

浅谈深度学习背后的数学_AI&大模型_Trist‘n Joseph_InfoQ精选文章