入门深度学习——基础知识总结(python代码实现)

news2024/12/26 14:34:42

入门深度学习——基础知识总结(python代码实现)

目前,AI基本上可以说是烂大街了。几乎什么都可以说使用了AI技术,听起来很拉风,很nb的样子。而其中目前最为火热的非深度学习(Deep Learning)莫属。随着,大数据技术完善和计算硬件的更新换代,深度学习技术的效果在大规模数据上已经击败了之前所有的机器学习算法,取得了非凡的性能。
在有关深度学习的热门话题中,有几个被媒体大肆报道的时间,如下表所示:

年份事件
2012年在世界性的图像识别大赛ILSVRC中,使用深度学习技术的Supervision方法取得完胜
2012年利用谷歌公司开发的深度学习技术,人工智能从YouTube的视频中识别出了猫
2014年苹果公司将Siri语音识别系统变更为使用深度学习技术的实践
2016年利用谷歌公司开发的深度学习技术,AlphaGo与世界顶级棋手对决,取得了胜利
2016年奥迪,宝马等公司将深度学习技术应用到汽车的自动驾驶中

深度学习是基于机器学习的神经网络发展起来的,这些我在之前的博客中介绍了他的来龙去脉,不知道的小伙伴可以点这里传送门了解。但遗憾的是,这么邪乎的东西仍然还是一个黑盒子,基本没有可解释性。其优良性能相当大程度上受到程序员调参的影响,这些参数需要人为赋值,很大程度上可以说是“失之毫厘,差之千里”。而参数的取值,来自程序员对问题和网络模型的理解,以及自己调参的经验。因此,对于入门者来说,想要更好的发挥深度学习的威力,精准的调节参数,了解深度学习的数学基础是有必要的。
PS:这里的参数是指超级参数,这种参数,网络模型一般不会优化。

一、 神经网络的基本知识

深度学习是从神经网络的基础上发展而来的。而对于神经网络的基本原理,我在之前的博客中讲的很清楚了因此这里不再赘述,不清除的读者可以点这里传送门了解,这里大致讲了人们从神经元得到启发设计感知机,进一步改进到神经网络。而深度学习的一大特点就是把其中的隐藏层增多了。注意不是一层两层哦,而是二十层,三十层。这样这个网络可以表示的模型更加丰富,简单来说就是有更大的发挥空间,可以拟合更多的数据,进而达到良好的效果。更棒的是,对于一些无法简单采用数学公式表达的问题,采用深度学习技术,只需要提供数据,他就会自己学习出其中的规律。
如下图所示,神经网络是由一个个神经单元连接而成的网络状,分别是输入测,隐藏层(中间层)和输出层组成,可以看到不同的神经单元相互连接,前一层和下一层都用箭头连接,即神经网络是全连接层。
这里简单介绍下不同层的功能:
输入层:读取给予的神经网络的信息。
隐藏层:实际处理信息(特征提取 feature extraction)。
输出层:显示神经网络的计算出的结果。在这里插入图片描述

二、神经元——一个简单的开始

我们先从最简单的感知机开始,如下图所示,图中是一个最为简单的感知机,他有两个输入,一个输出,其中的边表示权值。这个结果就可以表示为 y = x 1 w 1 + x 2 w 2 y=x_1w_1+x_2w_2 y=x1w1+x2w2,就像一个神经元一样,两个变量x代表输入,一个y代表输出。而对于一个神经元来说,他又一定的阈值。达到这个阈值,他就会刺激下一个神经元,进而传递信息,为了更好的模拟这一效果。我们可以引进一个变量 μ \mu μ,当 y − μ > 0 y-\mu>0 yμ>0时代表达到了神经元的阈值,进而产生刺激。传递信息给下一个神经元。反之,小于0那么没有达到阈值,神经元则什么也不做。
在这里插入图片描述

三、激活神经元——sigmoid函数

这里为了实现这里效果,我们设计一个函数 f ( x ) f(x) f(x),当 x > 0 x>0 x>0时,输出1.当 x < = 0 x<=0 x<=0时,输出零。这个函数也叫阶跃函数,如下左图所示:这样固然可以很好的模拟神经元的效果。但是可以看到,这个函数的导数处处为0,在x=0点处导数不存在。这样的函数并不适合计算机运算。此时,你或许会好奇,问什么呢?计算机如何这么刁钻?其实是,当我们在优化参数时,要采用梯度下降算法, 这里就涉及了导数。为了使的函数更加平滑,即处处可导。人们又提出了sigmoid函数,如右图所示。来模拟这个过程,我们使用 σ ( x ) \sigma(x) σ(x)来表示sigmoid函数,这个函数更加专业的说法叫做激活函数,顾名思义,就是激活神经元,现在也衍生出个更多的激活函数,如relu等。而这个 μ \mu μ叫做偏置,也叫阈值。那么,一个神经元的输出就可以这样表示, y = σ ( w 1 x 1 + w 2 x 2 − μ ) y=\sigma(w_1x_1+w_2x_2-\mu) y=σ(w1x1+w2x2μ)
在这里插入图片描述

四、 “异或”问题——给神经网路的一记重击

逻辑数学中,我们会定义“与” “非” “或” “异或",拿“或”运算来说,其规则是,有1为1,全0为0
,也可以用表格表示, y = x 1 ∣ ∣ x 2 y=x_1||x_2 y=x1∣∣x2

x 1 x_1 x1 x 2 x_2 x2 y y y
000
011
101
111

那么这个神经元就可以,通过梯度下降算法(一种优化算法,不清除的读者不必在意),优化参数 w 1 , w 2 w_1,w_2 w1,w2,使得y表示为图中一条直线,将其分隔开。进而模拟了与运算。
在这里插入图片描述
同样道理,神经元同样可以模拟“非运算”,“与运算”,但对于“异或问题”来说,找不到一个合适的直线解决这个问题。这一记耳光,把神经网络火热的势头彻底扑灭。学者纷纷怀疑神经元的合理性。以至于在那个时代的神经网络论文一概拒收。
诚然这个问题,只能找到一个曲线来解决。但是这个曲面如何表示呢?一个神经元一定时不够的。
在这里插入图片描述

五、组合逻辑电路——神经网络的灵感

在组合逻辑电路中,我们是怎么实现一个异或门呢?答案如图所示
在这里插入图片描述
它由三个逻辑门电路组合而成,从而实现异或运算。同样道理,我们可不可以把三个神经元也模拟这个过程呢?如下图所示,这是一个两层的神经网络,从第0层到第1层。 s 1 , s 2 s_1,s_2 s1,s2分别代表前两个逻辑门,第一层到第二层代表第三个逻辑门。这样就理论就可以模拟了异或运算。这样,神经网络有一次展现出强大的实力。
在这里插入图片描述

六、层层连接——神经网络诞生

这样我们就回到了开始,这个神经网络,由一个个神经元连接而成的网状结构,被叫做神经网络。进一步来说,我们把中间的层叫做隐藏层,因为我们在使用时,仅仅关注输入数据和我想要的输出数据,中间的层次看不到可以不关心,就像一个黑盒一样。那么这些隐藏层究竟是干肾么的呢?

在这里插入图片描述
举一个例子,更好的让大家理解隐藏层,一个直白的说法就是提取特征。我们举一个easyAI的例子说明一下,具体见传送门。我们把深度学习想象成一个水流系统。如图所示,两个入水口,两个输出口。现在我告诉这个网络,输入多少水,需要怎么输出水。他就会自己调节中间流经的水龙头。使得结果符合我的要求。在这种情况下,我会一直告诉网络怎么输出怎么输出。最后,我走了,他就利用这个最终训练好的水龙头流水大小,来对未知的输入水,做出对应的输出。
在这里插入图片描述
正如输入一个汉字申的图片,他会把申的结果流出的水最多。从而产生智能。
在这里插入图片描述
而上述,我根据输入水要求网络输出水的过程叫做正向输入,即从输入层到输出层。

七、反向传播——调节水龙头流水速度

你或许会好奇,怎么产生反向传播呢?即如何调节水龙头流水速度呢?
在刚才的例子中,我们从正向输入水流,网络此时是不可以调节水龙头流速的。此时他会产生一个结果,当然,我要求的一定是其中一个结果。我们会设计一个损失函数,即网络的结果和我们的答案越近,损失值越小,越离谱,损失值越大。得出损失值后,我们会进一步将损失值进一步反向传播通过梯度下降。修正水龙头的流水速度。
这其中的数学推导较为复杂,核心是一层一层递推传播,更新水龙头流水速度。代码实现相当困难,但是,幸运的是目前的深度学习框架,都对其进行的底层实现。我们只需一行代码即可完成。

loss.backward()

其中loss是损失函数。因此,应用网络的程序员完全不用关心其如何传播。这也无关网络性能。因此,不再详细介绍,如果感兴趣的同学,可以自行百度。这里推荐一本数学推导的书<<深度学习的数学>>里面会有详细介绍。

致读者

这样以来,我们才简单的入门了深度学习的数学,第一节比较偏理论。还望大家耐心看完。后面会采用python代码与pytorch深度学习框架来讲解具体的案例,希望大家多多点赞支持。

参考文献

1.《深度学习的数学》杨瑞龙【译】,中国工信出版社,人民邮电出版社
2.《深度学习入门,基于python的理论与实现》陆宇杰【译】,中国工信出版社,人民邮电出版社
3. https://easyai.tech/ai-definition/deep-learning/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VisionPro (R) QuickBuild 工具使用问题解决 自用

右击我的电脑选择属性。搜索“安全中心” 点击病毒和威胁保护 在病毒和威胁保护中选择威胁信息&#xff08;当前威胁-保护历史记录&#xff09; 受影响的项目 file: C:\WINDOWS\sysWOW64\cognex.dll 相机和光源不能同时触发&#xff0c;光源要先于相机触发并且持续相机采集…

leetCode周赛-328

相关题解题目一&#xff1a;6291. 数组元素和与数字和的绝对差题目二&#xff1a;6292. 子矩阵元素加 1题目三&#xff1a;6293. 统计好子数组的数目题目四&#xff1a;2538. 最大价值和与最小价值和的差值题目一&#xff1a;6291. 数组元素和与数字和的绝对差 题目链接&#…

Web Security 之 Insecure deserialization

Insecure deserialization 在本节中&#xff0c;我们将介绍什么是不安全的反序列化&#xff0c;并描述它是如何使网站遭受高危害性攻击的。我们将重点介绍典型的场景&#xff0c;并演示一些 PHP、Ruby 和 Java 反序列化的具体示例。最后也会介绍一些避免不安全的反序列化漏洞的…

14正交向量与子空间

正交向量与子空间 本章研究的重点还是之前提到过的子空间&#xff0c;但是本章我们主要从正交的角度来探讨这些子空间具有的性质&#xff0c;主要内容见下图。 注意&#xff0c;上图指出了我们之前没有关注到的子空间的一些性质&#xff1a;对于一个矩阵&#xff0c;其零空间…

微信推送消息给女友提醒每天天气情况,本文讲解流程,附带代码,可快速上手。

实现的效果图 此模板为自己添加的&#xff0c;各位看客可以自行添加&#xff0c;如何添加接着往下看。备注在数据库自定义设置。如果你非专业人士&#xff0c;可以联系作者给你专属设置。如果需要代为设置跳转到文章结束位置。 完整的代码 代码下载地址 微信公众号设置 申…

《Linux Shell脚本攻略》学习笔记-第八章

8.1 简介 TCP/IP网络的运作过程就是在节点之间传递分组。每一个分组中都包含了目标的IP地址以及处理分组中数据的应用程序端口号。 当节点接收到分组时&#xff0c;它会查看自己是否就是改分组的目的地。如果是&#xff0c;节点会再检查端口号并调用相应的应用程序来处理分组数…

Cookie 会话身份验证是如何工作的?

在 Web 应用程序中&#xff0c;Cookie-Session 是一种标准的身份验证方法。饼干&#xff0c;也被称为“sweet cookies”。类型为“小文本文件”&#xff0c;是指一些网站为了识别用户身份而存储在客户端的数据。Session的主要功能是通过服务器记录用户的状态。 在典型的在线购物…

类与类之间关系的表示方式

1.关联关系 关联关系是对象之间的一种引用关系&#xff0c;用于表示一类对象与另一类对象之间的联系&#xff0c;如老师和学生&#xff0c;师傅和徒弟&#xff0c;丈夫和妻子等。关联关系是类与类之间最常用的一种关系&#xff0c;分为一般关联关系&#xff0c;聚合关系和组合…

郭天祥十天入门单片机学习笔记

电子元件 排阻 有两种&#xff1a; nn1 二极管 几个概念 限流电阻&#xff1a;与二极管串联&#xff0c;防止电流过大烧毁二极管导通压降&#xff1a;二极管亮起的最小电压 贴片式绿色为阴极&#xff0c;插入式短脚为阴极 数码管 共阴极&#xff1a;对应段选信号置1亮…

测试开发 | 这些常用测试平台,你们公司在用的是哪些呢?

测试管理平台是贯穿测试整个生命周期的工具集合&#xff0c;它主要解决的是测试过程中团队协作的问题。在整个测试过程中&#xff0c;需要对测试用例、Bug、代码、持续集成等等进行管理。下面分别从这四个方面介绍现在比较流行的管理平台。 图片108091 50.2 KB 测试用例管理平台…

Doris 使用记录(随机更新(ง •_•)ง)

文章目录知识点常见数据分布方式使用表动态分区Hash分桶知识点 常见数据分布方式 分布式数据库中常见的数据分布方式。 轮询&#xff1a;Round-Robin&#xff0c;假设分桶数为3&#xff0c;数据按顺序依次写入桶1、桶2、桶3&#xff0c;然后继续循环。 区间&#xff1a;Ran…

【Lp-CVT and Applications】

Lp-CVT and Applications 论文笔记 本文是论文 Lp Centroidal Voronoi Tessellation and its Applications 的学习笔记。有不足之处&#xff0c;请指出&#xff01;非常感谢&#xff01; 1 主要工作 解决问题&#xff1a;推广CVT以适用各向异性和六面体网格划分。推广 CVT &am…

如何模拟实现一个“缓存”?

目录 前言 一、LRU Cache是什么 二、模拟实现 2.1、通过继承 LinkedHashMap 模拟实现 2.2、自主模拟实现LRU Cache 2.2.1、LRU Cache的定义 2.2.2、存放结点 2.2.3、访问结点 2.2.4、LRU Cache 完整模拟代码 小结 前言 这次主要实现一个类似缓存的一种数据结构&#xf…

day49 业务逻辑水平垂直越权访问控制脆弱验证

前言&#xff1a; #知识点&#xff1a; 1、水平越权-同级用户权限共享 2、垂直越权-低高用户权限共享 3、访问控制-验证丢失&取消验证 4、脆弱验证-Cookie&Token&Jwt等 #前置知识&#xff1a; 1、逻辑越权原理- -水平越权&#xff1a;用户信息获取时未对用户…

NTP(Network Time Protocol)协议详解

一、NTP的基本概念&#xff1a; NTP(Network Time Protocol)------网络时间协议-----应用层协议&#xff0c;用来在分布式时间服务器和客户端之间进行时间同步。 二、采用NTP的目的&#xff1a; 是对网络内所有具有时钟的设备进行时钟同步&#xff0c;使网络内所有设备的时钟…

JDY-06蓝牙透传无天线模块介绍

JDY-06蓝牙透传无天线模块简介JDY-06透传模块是基于蓝牙4.0协议标准&#xff0c;工作频段为2.4GHZ范围&#xff0c;调制方式为GFSK&#xff0c;最大发射功率为0db&#xff0c;最大发射距离60米&#xff0c;采用TICC2541芯片设计&#xff0c;支持用户通过AT命令修改设备名、服务…

Alkyne maleimide,Mal-Alkyne,炔烃-马来酰亚胺

中英文别名&#xff1a;CAS号&#xff1a;N/A | 英文名&#xff1a;Alkyne maleimide&#xff0c;Mal-Alkyne |中文名&#xff1a;炔烃-马来酰亚胺物理参数&#xff1a;CASNumber&#xff1a;N/AMolecular formula&#xff1a;C12H14N2O3Molecular weight&#xff1a;234.26Pur…

什么是前后端分离?

当前&#xff0c;数字化发展速度越来越快&#xff0c;前后端分离已经成为今后的发展趋势。在现代化办公管理中&#xff0c;不少企业倾向于使用低代码开发平台实现高效协作办公&#xff0c;那么&#xff0c;什么是前后端分离&#xff1f;都有哪些特点&#xff1f;本文就围绕这个…

【网络安全】渗透测试之linux信息收集

前言 在内网中linux的服务器是占大多数的&#xff0c;主要原因分为以下几点 1.便宜&#xff0c;linux大多为免费的&#xff0c;Windows Server是收费的&#xff0c;对于企业来说为了节约成本&#xff0c;大量采用linux服务器。 2.轻便&#xff0c;linux主要是对服务器进行服务的…

递归算法实例应用(三)

递归算法实例应用&#xff08;三&#xff09; 四则运算表达式求值 Description 给你一个字符串表达式 str &#xff0c;请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数 。 Input 一行&#xff0c;一个四则运算表达…