深度学习 第1讲:深度学习简介和感知机原理与实现_python 单层感知机 深度学习-程序员宅基地

技术标签: 机器学习  深度学习  人工智能  

而对于阅读深度学习系列文章的广大数据爱好者而言,小编希望大家能有一些机器学习基础,而且小编不会去刻意用很多通俗的语言去描述数学和计算机科学相关的术语和概念,当然小编也会尽力把主要的知识点说的够敞亮,希望大家理解。那么闲话少说,我们正式开启深度学习的学习之旅~

1

机器学习与深度学习

要是说到深度学习,恐怕不得不先提一下机器学习,解释好二者之间的关系。相信大家心中应该有自己对于机器学习概念的理解。小编这里就一句话简单概括一下:机器学习就是从历史数据中探索和训练出数据的普遍规律,将其归纳为相应的数学模型,并对未知的数据进行预测的过程。至于在这个过程中我们碰到的各种各样的问题,比如数据质量、模型评价标准、训练优化方法、过拟合等一系列关乎机器学习模型生死的问题,小编就不展开来说了,自己去补机器学习知识哈。

在机器学习中,我们有很多很多已经相当成熟了的模型和算法。(这里厘一下模型和算法的概念,小编认为,通常我们所说的像SVM之类的所谓机器学习十大算法其实不应该称之为算法,更应该称其为模型,机器学习的算法应该是在给定模型和训练策略的情况下采取的优化算法,比如梯度下降、牛顿法之类。当然,一般情况下将模型和算法混合称呼也不碍事,毕竟模型中本身就包含着计算规则的意思。)在这很多种机器学习模型中,有一种很厉害的模型,那就是人工神经网络。这种模型从早期的感知机发展而来,对任何函数都有较好的拟合性,但自上个世纪90年代一直到2012年深度学习集中爆发前夕,神经网络受制于计算资源的限制和较差的可解释性,一直处于发展的低谷阶段。之后大数据兴起,计算资源也迅速跟上,加之2012年ImageNet竞赛冠军采用的AlexNet卷积神经网络一举将图片预测的 top5 错误率降至16.4%,震惊了当时的学界和业界。从此之后,原本处于研究边缘状态的神经网络又迅速热了起来,深度学习也逐渐占据了计算机视觉的主导地位。

扯了这么多,无非就是想让大家知道,以神经网络为核心的深度学习理论是机器学习的一个领域分支,所以深度学习其本质上也必须是遵循一些机器学习的基本要义和法则的。传统的机器学习中,我们需要训练的是结构化的数值数据,比如说预测销售量、预测某人是否按时还款等等。但在深度学习中,我们的训练输入就不大是常规的数据了,它可能是一张图像、一段语言、一段对话语料或是一段视频。深度学习要做的就是我丢一张猫的图片到神经网络里,它的输出是猫或者cat这样的标签,丢进去一段语音,它输出的是你好这样的文本。所以机器学习/深度学习的核心任务就是找(训练)一个模型,它能够将我们的输入转化为正确的输出。

(图片来自台湾大学李宏毅教授的deep learning tutorial ppt)

2

感知机与神经网络

就像上面那幅图展示的一样,深度学习看起来就像是一个黑箱子,给定输入之后就出来预测结果,中间的细节很难搞清楚。在实际生产环境下,调用像 tensorflow 这样优秀的深度学习计算框架能够帮助我们快速搭建起一个深度学习项目,但在学习深度学习的过程中,小编并不建议大家一开始就上手各种深度学习框架,希望大家能和小编一道,在把基本的原理搞明白之后利用 python 或者 R 自己手动去编写模型和实现算法细节。

所以,为了学习各种结构的神经网络,我们需要从头开始。感知机作为神经网络和支持向量机的理论基础,相信任何有机器学习基础的同学都清楚其模型细节。简单而言,感知机就是一个旨在建立一个线性超平面对线性可分的数据集进行分类的线性模型。其基本结构如下所示:

上图从左到右为感知机模型的计算执行方向,模型接受了X1、X2、X3三个输入,将输入与权值参数W进行加权求和并经过 sigmoid 函数进行激活,将激活结果作为 y 进行输出。这便是感知机执行前向计算的基本过程。这样就行了吗?当然不行。按照李航老师的统计学习三要素来打分,刚刚我们只解释了模型,对策略和算法并未解释。当我们执行完前向计算得到输出之后,模型需要根据你的输出和实际的输出按照损失函数计算当前损失,计算损失函数关于权值和偏置的梯度,然后根据梯度下降法更新权值和偏置。经过不断的迭代调整权值和偏置使得损失最小,这便是完整的单层感知机的训练过程。

输入为图像的感知机计算过程(图片来自吴恩达老师deeplearningai作业截图)

上述的单层感知机包含两层神经元,即输入与输出神经元,可以非常容易的实现逻辑与、或和非等线性可分情形,但终归而言,这样的一层感知机的学习能力是非常有限的,对于像异或这样的非线性情形,单层感知机就搞不定了。其学习过程会呈现一定程度的振荡,权值参数 w 难以稳定下来,最终不能求得合适的解。

单层感知机难以解决异或问题(截图于周志华老师的《机器学习》)

对于非线性可分的情况,在感知机基础上一般有了两个解决方向,一个就是著名的支持向量机模型,旨在通过核函数映射来处理非线性的情况,这里我们不多谈,读者朋友们可以去回顾复习机器学习中有关的内容,而另一种就是神经网络模型。这里的神经网络模型也叫多层感知机(MLP: Muti-Layer Perception),与单层的感知机在结构上的区别主要在于 MLP 多了若干隐藏层,这使得神经网络对非线性的情况拟合能力大大增强。

一个单隐层的人工神经网络的结构如下图所示:

可以看到相较于两层神经元的单层感知机,多层感知机中间多了一个隐藏层,称为隐藏层的含义在于神经网络的训练过程中我们只能观察到输入和输出层的数据,对于中间的隐藏层我们是看不见的,因而在深度神经网络(DNN)中,对于中间看不见又难以进行解释的隐藏层又有个黑箱子的称呼。

含隐藏层的神经网络是如何训练的呢?跟感知机一样,神经网络的训练依然是包含前向计算和反向传播两个主要过程。当然,单层感知机没有反向传播的概念,通常是直接建立损失函数对权值和偏置参数的梯度优化。前向计算过程这里不再细述,就是权值偏置与输入的线性加权和激活操作,在隐藏层上有个嵌套的过程。这里我们重点讲一下反向传播算法(Error BackPropagation,因而也叫误差逆传播),作为神经网络的训练算法,反向传播算法可谓是目前最成功的神经网络学习算法了。我们通常说的 BP 神经网络也就是指应用反向传播算法进行训练的神经网络模型。

那反向传播算法究竟是怎样个工作机制呢?前方高能,需要大家自己补习微积分知识。因为小编实在是没有不借助公式把反向传播讲清楚的能力。假设以一个两层(即单隐层)网络为例,也就是上图中的网络结构,小编带大家详细推导一下反向传播的基本过程。

我们假设输入层为 X ,输入层与隐藏层之间的权值和偏置分别为 W1 和 b1,线性加权计算结果为 Z1 = W1*X + b1,采用 sigmoid 激活函数,隐藏层是激活输出为 a1 = σ(Z1)。而隐藏层到输出层的权值和偏置分别为 W2 和 b2,线性加权计算结果为 Z2 = W2*a1+ b2,激活输出为 a2 = σ(Z2)。所以这个两层网络的前向计算过程为 X-Z1-a1-Z2-a2。

所以反向传播的直观理解就是将上述前向计算过程反过来,但必须是梯度计算的方向反过来,假设我们这里采用交叉熵损失函数:

反向传播是基于梯度下降策略的,主要是以目标参数的负梯度方向对参数进行更新,所以基于损失函数对前向计算过程中各个变量进行梯度计算就是非常必要的了。将前向计算过程反过来,那基于损失函数的梯度计算顺序就是 da2-dZ2-dW2-db2-da1-dZ1-dW1-db1。一大堆微分符号!聪明如你应该可以看到我们马上要进行一波链式求导操作。我们从输出 a2 开始进行反向推导。输出层激活输出为 a2,那首先计算损失函数L(y, a) 关于 a2 的微分 da2,影响输出 a2 的是谁呢?由前向传播可知 a2 是由 Z2 经激活函数激活计算而来的,所以计算损失函数关于 Z2 的导数 dZ2 必须经由 a2 进行复合函数求导,即微积分上常说的链式求导法则。然后继续往前推,影响 Z2 的又是哪些变量呢?由前向计算 Z2 = W2*a1+ b2 可知影响 Z2 的有 W2、a1 和 b2,继续按照链式求导法则进行求导即可。最终以交叉熵损失函数为代表的两层神经网络的反向传播向量化求导计算公式如下所示:

在有了梯度计算结果之后,我们便可根据权值更新公式对权值和偏置参数进行更新了,具体计算公式如下,其中 η 为学习率,是个超参数,需要我们在训练时手动指定,当然也可以对其进行调参取得最优超参数。

以上便是 BP 神经网络模型和算法的基本工作流程,简单而言就是前向计算得到输出,反向传播调整参数,最后以得到损失最小时的参数为最优学习参数。神经网络的基本总结流程如下图所示:

训练一个 BP 神经网络并非难事,我们有足够优秀的深度学习计算框架通过几行代码就可以搭建起一个全连接网络。但是为了学习和掌握神经网络的基本思维范式和锻炼实际的编码能力,希望大家能够利用 python 或者 R 在不调用任何算法包的情况下根据算法原理手动实现一遍神经网络模型。最后以一个神经网络可视化的动图给大家动态的展示一下神经网络的训练过程:

第一讲的内容到这里就结束了,在深度学习第一讲中,我们了解了深度学习和机器学习的基本关系和发展历程,对神经网络的理论基础有了更深层次的学习和掌握。咱们下期见!


每一个HTML文档中,都有一个不可或缺的标签:<head>,在几乎所有的HTML文档里, 我们都可以看到类似下面这段代码:

html{color:#000;overflow-y:scroll;overflow:-moz-scrollbars}
body,button,input,select,textarea{font-size:12px;font-family:Arial,sans-serif}
h1,h2,h3,h4,h5,h6{font-size:100%}
em{font-style:normal}
small{font-size:12px}
ol,ul{list-style:none}
a{text-decoration:none}
a:hover{text-decoration:underline}
legend{color:#000}
fieldset,img{border:0}
button,input,select,textarea{font-size:100%}
table{border-collapse:collapse;border-spacing:0}
img{-ms-interpolation-mode:bicubic}
textarea{resize:vertical}
.left{float:left}
.right{float:right}
.overflow{overflow:hidden}
.hide{display:none}
.block{display:block}
.inline{display:inline}
.error{color:red;font-size:12px}
button,label{cursor:pointer}
.clearfix:after{content:'\20';display:block;height:0;clear:both}
.clearfix{zoom:1}
.clear{clear:both;height:0;line-height:0;font-size:0;visibility:hidden;overflow:hidden}
.wordwrap{word-break:break-all;word-wrap:break-word}
.s-yahei{font-family:arial,'Microsoft Yahei','微软雅黑'}
pre.wordwrap{white-space:pre-wrap}
body{text-align:center;background:#fff;width:100%}
body,form{position:relative;z-index:0}
td{text-align:left}
img{border:0}
#s_wrap{position:relative;z-index:0;min-width:1000px}
#wrapper{height:100%}
#head .s-ps-islite{_padding-bottom:370px}
#head_wrapper.s-ps-islite{padding-bottom:370px}#head_wrapper.s-ps-islite #s_lm_wrap{bottom:298px;background:0 0!important;filter:none!important}#head_wrapper.s-ps-islite .s_form{position:relative;z-index:1}#head_wrapper.s-ps-islite .fm{position:absolute;bottom:0}#head_wrapper.s-ps-islite .s-p-top{position:absolute;bottom:40px;width:100%;height:181px}#head_wrapper.s-ps-islite #s_lg_img,#head_wrapper.s-ps-islite#s_lg_img_aging,#head_wrapper.s-ps-islite #s_lg_img_new{position:static;margin:33px auto 0 auto}.s_lm_hide{display:none!important}#head_wrapper.s-down #s_lm_wrap{display:none}.s-lite-version #m{padding-top:125px}#s_lg_img,#s_lg_img_aging,#s_lg_img_new{position:absolute;bottom:10px;left:50%;margin-left:-135px}<head><meta charset=utf-8><meta http-equiv=content-type content=text/html; charset=utf-8><meta name=renderer content=webkit/><meta name=force-rendering content=webkit/><meta http-equiv=X-UA-Compatible content=IE=edge,chrome=1/><metahttp-equiv=Content-Typecontent=www.czjy.cn;charset=gb2312><meta name=viewport content=width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no></head>.s-ps-sug table{width:100%;background:#fff;cursor:default}.s-ps-sug td{color:#000;font:14px arial;height:25px;line-height:25px;padding:0 8px}.s-ps-sug td b{color:#000}.s-ps-sug .mo{background:#ebebeb;cursor:pointer}.s-ps-sug .ml{background:#fff}.s-ps-sug td.sug_storage{color:#7a77c8}.s-ps-sug td.sug_storage b{color:#7a77c8}.s-ps-sug .sug_del{font-size:12px;color:#666;text-decoration:underline;float:right;cursor:pointer;display:none}.s-ps-sug .sug_del{font-size:12px;color:#666;text-decoration:underline;float:right;cursor:pointer;display:none}.s-ps-sug .mo .sug_del{display:block}
.s-ps-sug .sug_ala{border-bottom:1px solid #e6e6e6}

head标签作为一个容器,主要包含了用于描述 HTML 文档自身信息(元数据)的标签,这些标签一般不会在页面中被显示出来。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/RunMews/article/details/131153682

智能推荐

hive使用适用场景_大数据入门:Hive应用场景-程序员宅基地

文章浏览阅读5.8k次。在大数据的发展当中,大数据技术生态的组件,也在不断地拓展开来,而其中的Hive组件,作为Hadoop的数据仓库工具,可以实现对Hadoop集群当中的大规模数据进行相应的数据处理。今天我们的大数据入门分享,就主要来讲讲,Hive应用场景。关于Hive,首先需要明确的一点就是,Hive并非数据库,Hive所提供的数据存储、查询和分析功能,本质上来说,并非传统数据库所提供的存储、查询、分析功能。Hive..._hive应用场景

zblog采集-织梦全自动采集插件-织梦免费采集插件_zblog 网页采集插件-程序员宅基地

文章浏览阅读496次。Zblog是由Zblog开发团队开发的一款小巧而强大的基于Asp和PHP平台的开源程序,但是插件市场上的Zblog采集插件,没有一款能打的,要么就是没有SEO文章内容处理,要么就是功能单一。很少有适合SEO站长的Zblog采集。人们都知道Zblog采集接口都是对Zblog采集不熟悉的人做的,很多人采取模拟登陆的方法进行发布文章,也有很多人直接操作数据库发布文章,然而这些都或多或少的产生各种问题,发布速度慢、文章内容未经严格过滤,导致安全性问题、不能发Tag、不能自动创建分类等。但是使用Zblog采._zblog 网页采集插件

Flink学习四:提交Flink运行job_flink定时运行job-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏2次。restUI页面提交1.1 添加上传jar包1.2 提交任务job1.3 查看提交的任务2. 命令行提交./flink-1.9.3/bin/flink run -c com.qu.wc.StreamWordCount -p 2 FlinkTutorial-1.0-SNAPSHOT.jar3. 命令行查看正在运行的job./flink-1.9.3/bin/flink list4. 命令行查看所有job./flink-1.9.3/bin/flink list --all._flink定时运行job

STM32-LED闪烁项目总结_嵌入式stm32闪烁led实验总结-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏6次。这个项目是基于STM32的LED闪烁项目,主要目的是让学习者熟悉STM32的基本操作和编程方法。在这个项目中,我们将使用STM32作为控制器,通过对GPIO口的控制实现LED灯的闪烁。这个STM32 LED闪烁的项目是一个非常简单的入门项目,但它可以帮助学习者熟悉STM32的编程方法和GPIO口的使用。在这个项目中,我们通过对GPIO口的控制实现了LED灯的闪烁。LED闪烁是STM32入门课程的基础操作之一,它旨在教学生如何使用STM32开发板控制LED灯的闪烁。_嵌入式stm32闪烁led实验总结

Debezium安装部署和将服务托管到systemctl-程序员宅基地

文章浏览阅读63次。本文介绍了安装和部署Debezium的详细步骤,并演示了如何将Debezium服务托管到systemctl以进行方便的管理。本文将详细介绍如何安装和部署Debezium,并将其服务托管到systemctl。解压缩后,将得到一个名为"debezium"的目录,其中包含Debezium的二进制文件和其他必要的资源。注意替换"ExecStart"中的"/path/to/debezium"为实际的Debezium目录路径。接下来,需要下载Debezium的压缩包,并将其解压到所需的目录。

Android 控制屏幕唤醒常亮或熄灭_android实现拿起手机亮屏-程序员宅基地

文章浏览阅读4.4k次。需求:在诗词曲文项目中,诗词整篇朗读的时候,文章没有读完会因为屏幕熄灭停止朗读。要求:在文章没有朗读完毕之前屏幕常亮,读完以后屏幕常亮关闭;1.权限配置:设置电源管理的权限。

随便推点

目标检测简介-程序员宅基地

文章浏览阅读2.3k次。目标检测简介、评估标准、经典算法_目标检测

记SQL server安装后无法连接127.0.0.1解决方法_sqlserver 127 0 01 无法连接-程序员宅基地

文章浏览阅读6.3k次,点赞4次,收藏9次。实训时需要安装SQL server2008 R所以我上网上找了一个.exe 的安装包链接:https://pan.baidu.com/s/1_FkhB8XJy3Js_rFADhdtmA提取码:ztki注:解压后1.04G安装时Microsoft需下载.NET,更新安装后会自动安装如下:点击第一个傻瓜式安装,唯一注意的是在修改路径的时候如下不可修改:到安装实例的时候就可以修改啦数据..._sqlserver 127 0 01 无法连接

js 获取对象的所有key值,用来遍历_js 遍历对象的key-程序员宅基地

文章浏览阅读7.4k次。1. Object.keys(item); 获取到了key之后就可以遍历的时候直接使用这个进行遍历所有的key跟valuevar infoItem={ name:'xiaowu', age:'18',}//的出来的keys就是[name,age]var keys=Object.keys(infoItem);2. 通常用于以下实力中 <div *ngFor="let item of keys"> <div>{{item}}.._js 遍历对象的key

粒子群算法(PSO)求解路径规划_粒子群算法路径规划-程序员宅基地

文章浏览阅读2.2w次,点赞51次,收藏310次。粒子群算法求解路径规划路径规划问题描述    给定环境信息,如果该环境内有障碍物,寻求起始点到目标点的最短路径, 并且路径不能与障碍物相交,如图 1.1.1 所示。1.2 粒子群算法求解1.2.1 求解思路    粒子群优化算法(PSO),粒子群中的每一个粒子都代表一个问题的可能解, 通过粒子个体的简单行为,群体内的信息交互实现问题求解的智能性。    在路径规划中,我们将每一条路径规划为一个粒子,每个粒子群群有 n 个粒 子,即有 n 条路径,同时,每个粒子又有 m 个染色体,即中间过渡点的_粒子群算法路径规划

量化评价:稳健的业绩评价指标_rar 海龟-程序员宅基地

文章浏览阅读353次。所谓稳健的评估指标,是指在评估的过程中数据的轻微变化并不会显著的影响一个统计指标。而不稳健的评估指标则相反,在对交易系统进行回测时,参数值的轻微变化会带来不稳健指标的大幅变化。对于不稳健的评估指标,任何对数据有影响的因素都会对测试结果产生过大的影响,这很容易导致数据过拟合。_rar 海龟

IAP在ARM Cortex-M3微控制器实现原理_value line devices connectivity line devices-程序员宅基地

文章浏览阅读607次,点赞2次,收藏7次。–基于STM32F103ZET6的UART通讯实现一、什么是IAP,为什么要IAPIAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了,如果在设备使用过程中需要进行应用代码的更换、升级等操作的话,则可能需要将设备返回原厂并拆解出来再使用J-Link重新烧录代码,这就增加了很多不必要的麻烦。站在用户的角度来说,就是能让用户自己来更换设备里边的代码程序而厂家这边只需要提供给_value line devices connectivity line devices