深度学习简介
发布日期:2021-07-03 20:40:53 浏览次数:1 分类:技术文章

本文共 3975 字,大约阅读时间需要 13 分钟。

深度学习简介

文章目录

一.简介

经过了对传统的机器学习算法的一些学习之后,查了一些关于深度学习的资料。网上对于深度学习的概念往往比较抽象,难以理解。毕竟在现实当中,人工智能,机器学习,深度学习经常性的被人同时提及,这三个到底是什么关系?深度学习又是啥?

关于这个问题,其实应该从人工智能开始说起。人工智能其实早在20世纪50年代就提出来了。但当时,或者由于没有什么好的算法,而且,即使有算法,以当时的计算机算力,硬件水平还有稀少的数据量也很难实现。

但是,步入21世纪之后,随着计算机硬件的水平越来越高,网络技术的飞速发展带来的数据的爆炸式增长。很多算法的实现已经具备了条件。在这个时候,“机器学习”以及“深度学习”开始越来越多的被人提及。

机器学习是实现人工智能的一种方式

至于说机器学习,其实这个也不是什么新概念,早在人工智能被提出的时候,机器学习这个名词就已经存在了(1950年,传奇人物阿兰-图灵就提出过要建造一个学习机器)。而当中的很多数学理论,其实早在牛顿的那个时代就已经提出了。
机器学习最基本的做法,是使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。它直接来源于早期的人工智能领域,包含一些传统的算法,比如我们之前学的k-近邻,线性回归,决策树、聚类、贝叶斯分类、SVM、提升算法等等。从学习方法上来分,机器学习算法可以分为监督学习(如分类问题)、无监督学习(如聚类问题)等。

深度学习是一种实现机器学习的方法

实现机器学习的方式其实有很多。深度学习只是其中的一个。但是,随着算力的提升,硬件的不断升级,深度学习开始越来越多的被使用。
深度学习的一个核心概念,就是“神经网络”。知道什么是神经网络,对于理解整个深度学习的逻辑有很重要的作用。

那么,人工智能,机器学习,深度学习到底是什么关系呢?

我们直接看这个图:
在这里插入图片描述
是不是很清晰明了呢?

二.深度学习的核心——神经网络

2.1什么是神经网络

关于这个神经网络这个词,听起来很高大上,但实际上,它直观上并不复杂。我们以逻辑回归为例,通过对逻辑回归的学习,我们知道,逻辑回归主要是处理二分类问题,一个线性方程,代入到一个Sigmoid函数当中,就是逻辑回归的核心要点。那么,我们把多个逻辑回归进行组合呢?比如说像下面这个图:

在这里插入图片描述
在这个图中,每一个箭头都代表传入的权值,正方形代表截距。以左上角的为例,其实就相当于:
s i g m o i d ( w 1 x 1 + w 2 x 2 + w 3 x 3 + b ) sigmoid(w_{1}x_{1} + w_{2}x_{2} + w_{3}x_{3} + b) sigmoid(w1x1+w2x2+w3x3+b)

每一个红框都代表上面这个形式的算法。这样的算法像上面这个图这样组合在一起,就形成了一个“神经网络(Neural Network)”,而每个画红框的,都是这个神经网络当中的“神经元(Neural)”。

2.2 神经网络到底是怎么运作的?

我们先看一幅图:还是以逻辑回归为例。

在这里插入图片描述
这幅图,箭头为w值(权值),圆形代表Sigmoid函数,正方形代表传入的截距。同时,别忘了Sigmoid的函数表达式如下:
f ( z ) = 1 1 + e − z f(z) =\frac{1}{1+e^{-z}} f(z)=1+ez1

我们从最左边开始,输入了x1 = 1, x2=-1,然后我们代入到w1x1 + w2*x2 + b,就是11 + (-2)*(-1) + 1 = 4,然后把z=4代入到Sigmoid函数进行计算,就是0.98

而0.98下方的那个,也是相同的办法x1=1,x2=-1,权值为-1,1,截距是0,于是w1x1+w2x2+b = (-1)*1 + 1*(-1) + 0 = -2,然后把-2代入到Sigmoid函数,就是0.12

这样,就形成了对下一个神经元传递的新的输入值:x1 = 0.98, x2 = 0.12,再按照相同的办法计算,直到算到最后。

原理很简单,但是在表示上,人们为了方便,通常会采用矩阵的形式,还是用上面这个例子。比如说:

在这里插入图片描述

上面这个图,只是一个很简单的神经网络,现实当中的神经网络往往会很复杂,层数也会很多。而且,也不仅仅局限于逻辑回归。为了区分输入,中间部分,以及输出最终数据的部分,又引入了“输入层”,“隐藏层”,“输出层”的概念。其实,这几个概念很简单,只需一幅图,就明白了:

在这里插入图片描述
而所谓的“深度学习”当中的“深度”,其实就是指隐藏层(Hidden Layers)到底有多少层。
至于输出层(Output Layer)这地方也不一定是逻辑回归,你可以是Softmax,你也可以是其他任何一个机器学习算法。根据现实需要而定。

三.深度学习的步骤

整体而言,分为三步骤,且在SKLearn当中,体现的并不明显。但是在TensorFlow以及PyTorch当中,体现的比较明显。

3.1 构建神经网络

其实就是2.2的那部分内容。这当中还有几个重要问题,比如说:神经网络的架构到底该如何设计。在深度学习当中,有两个很重要的结构:循环神经网络(RNN)以及卷积神经网络(CNN)

3.2 数据拟合

对于这个步骤,有些地方翻译成:goodness of function。其实说白了,就是说,让模型更加接近于真实情况。在机器学习当中,我们知道最常用的方式其实就是针对损失函数进行梯度下降。这个是最行之有效的方式。

那么,神经网络当中的损失函数是什么呢?

在这里插入图片描述
这幅图当中,当中的L1,L2, ……, LN其实就是每一个属性输入进入网络,经过运算之后的损失函数。那么整个神经网络的总损失函数又是什么呢?其实就是这些小的损失函数的加和。
L = ∑ i = 1 N l i L = \sum_{i=1}^{N}l_{i} L=i=1Nli
对这个L,进行梯度下降,就是最直接的一种方法。在这个过程当中,一个很重要的方法务必知道:

3.3 选出最佳的模型

模型好,则用之,模型不好,就要回去重新调整,从3.1步骤,再来一次。那么,模型该如何优化和调整呢?整个过程大体如下所示:

在这里插入图片描述
至于说上面这个图左半部分分别都是什么,具体可以看看这个文章:

四.神经网络的大致框架

这个大致框架如下所示。

在这里插入图片描述
和机器学习差不多,深度学习也有两大核心问题:Regression(回归问题:即通过若干个特征来预测一个结果,比如说,我根据这几天的湿度,气温,气压等数据,预测明天会不会下雨)和Classification(分类问题:这个又分为二分类,多分类问题)

但实际上,基于这两个大问题,深度学习还要继续扩展。比如说:机器能不能自我学习呢?这就是seq2seq(应用于RNN:循环神经网络)以及Gan(应用于CNN:卷积神经网络)的意义所在。机器要学会“生成(Generation)”。而RNN和CNN是两个最基本的神经网络架构。

在机器学习当中,按照学习方法,分为两大类别:监督学习,以及非监督学习。而在深度学习当中,进行了进一步的细化:监督学习(Supervised Learning)和强化学习(Reinforcement Learning)。

监督学习:有目标的。比如说把棋谱输入,根据棋谱上的说明,来确定下一步怎么走

强化学习:机器自己跟自己下棋,不断的测试,自我学习。这个其实属于非监督学习。

同时,深度学习有一些前沿的研究:

  • Explainable AI:比如说,机器把一个图片识别成了狗,那么他为什么是狗,机器能做出合理的解释吗?

  • Adversarial Attack:这个更多是出于安全考虑。比如说,人脸识别系统。偏偏有人利用某些黑客技术,给人脸故意加上某些噪点。你还怎么识别呢?

  • Network Compression:海量的数据识别,能否利用一个手机就能自学习呢?

  • Anomaly Detection:更多的是用于图像识别。核心问题是:机器人是否能判断自己并不知道某个东西。比如说,经过训练,机器学会识别猫,狗,鸭子等。突然有人搞了一个鸭嘴兽的图片上去,机器人能不能立刻答复:我不知道这个是什么,而不是把鸭嘴兽判断成一个鸭子。

  • Transfer Learning:最简单的文字识别,往往用的是白字黑底,即:对比度非常大,所以识别率很高。如果底子是花花绿绿的呢?还能准确识别数字吗?

  • Meta Learning:让机器具有学习能力。而且不是简单的自己跟自己下棋那么简单。而是:机器能不能有属于自己的一套学习方法呢?这样,他就能真正的像人一样学习(把人的经验,直觉也能学来)。比如说:打游戏。对于一般的人类而言,很快就会学会如何玩一个游戏。但是对于机器来说,往往很吃力。

  • Life-Long Learning:让机器能够终身学习。不断学习新事物,能最后变成一个终结者?

五.如何理解“深度”

深度学习的英文:Deep Learning,这当中的Deep,其实说的就是隐藏层的层数。我们通过第二部分的最后一张图,发现,其实一个Layer当中,可以有许多神经元。我们可否不增加隐藏层的层数,而是去增加每一个隐藏层的神经元个数,用这个方法来提升算法的精度呢?

其实,早些时候,真有一个观点认为:对于任何一个连续型数据,一层隐藏层就可以了。

但事实证明,深度也同样重要。为什么?因为现在人工智能要处理的问题往往很复杂,单一依靠某一个算法就去解决,基本不可能。这个时候,每一个Layer就承担了另外一个作用:模块化。
即:我第一个隐藏层,可以单一处理一件事情,第二个隐藏层,我去处理另外一个问题……把一个大问题,分成若干个小问题,然后每一个小问题再用对应的Layer去处理。这样往往会加大处理效率。

转载地址:https://blog.csdn.net/johnny_love_1968/article/details/117573318 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:深度学习——反向传播(Backpropagation)
下一篇:回归补充(三)梯度下降的改进

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月07日 15时52分52秒