简介
深度学习,按我个人的理解主要就是多层神经网络。
用多层次的分析和计算手段,得到结果的一种方法。
直观表示
从输入层经过多层识别及整合得到输出结果,即输入照片,回答告诉你照片里的内容。
再来一个例子:在手机屏幕上手写2,识别出来你想要写的是2.
神经元和神经网络
深度学习的本质是要理解什么是神经网络和神经元。
神经元:其实是一个数学模型:神经元在我看来其实是 一个 输入值 + 计算方式 + 输出值 。这样一个数学表达式。
一系列的神经元 连接在一起就组成了神经网络。注意:深度学习中所说的连接其实都是一个数学意义上的权值。假设 输入1=a1,输入2=a2,输入3=a3; 权值1=w1,权值2=w2,权值3=w3;输出=z。神经元模型用数学表达式就是: z=g(a1*w1+a2*w2+a3*w3)。其实函数g()又叫 **函数。如何理解呢?a1*w1+a2*w2+a3*w3的结果始终都是线性的关系,为了引入非线性,强行在输出结果上套了一个这样的函数。
神经网络就是由这样的一系列的神经元,连接(通过权值)起来的。这句话怎么理解呢?就说 在神经网络中,每一个神经元的 输入a 其实是上一个神经元 的输出z。
为什么这样的神经网络 就叫深度学习呢?因为这样的神经网络,其实是可以做预测的。
什么叫预测呢?可以理解为 完成分类任务。
什么是分类任务:给出两张图片,经过这样的神经网络预测之后,可以知道,两张图片是不是相似,相似是一类,不相似是另外一类。
为什么这样的神经元组成神经网络后,就能做分类任务呢?其实可以这样理解:设计好一个神经网络后,组成神经网络的 神经元 都会有一系列的 权值 是未知的。我们用很多,带有共性的 样本去训练网络,其实是在用这个共性来 求解 神经网络中每一个神经元的 权值。这样就完成了一个函数集到准确函数的过程。
所以一句话理解就是:制造一个神经网络 就是在 定义一个函数集合。而训练一个神经网络 就是在 这个函数集合中找到 唯一一个函数。这个函数代表了训练样本的 共性特征。这种共性特征 称为 目标。这样的话,给定一个未参与训练的样本,通过 函数 计算,就能得到一个结果,而这个结果肯定会趋近于你想要的目标。从而完成分类任务。
隐藏层
因为训练数据没有显示这些层的期望输出层被称为隐藏层。最后,这些网络被称为神经网络,因为它们从某种程度上受到启发神经科学。网络的每个隐含层通常都是向量值的。这些隐藏层的维数决定了模型的宽度。
**函数
**函数其实是对应到生物学上的定义,**状态为有信号,非**状态为无信号。然而对应到这里的**函数,其实就有些变质了,如果还在想着**为1,非**为0,那么是无法理解神经网络中的**函数的。神经网络的**函数其实是将线性转化为非线性的一个函数,并非只是简单地给予0,或者给予1。
神经网络的**函数必须使用非线性函数。换句话说,**函数不能使用线性函数。为什么不能使用线性函数呢?因为使用线性函数的话,加深神经网络的层数就没有意义了。线性函数的问题在于,不管如何加深层数,总是存在与之等效的“无隐 藏 层 的 神 经 网 络”。为 了 具 体 地(稍微直观地)理解这一点,我们来思考下面这个简单的例子。这里我们考虑把线性 函 数 h(x) = cx 作为**函数,把y(x) = h(h(h(x)))的运算对应 3 层 神 经 网 络 A 。这 个 运 算 会 进 行y(x) = c × c × c × x 的乘法运算,但是同样的处理可以由 y(x) = ax (注意,a = c 3 )这一次乘法运算(即没有隐藏层的神经网络)来表示。如本例所示,使用线性函数时,无法发挥多层网络带来的优势。因此,为了发挥叠加层所带来的优势,**函数必须使用非线性函数。利用网络层数的加多,学习情况往往会更好,但是如果隐藏层使用线性函数,最后一定可以找到一个线性函数表示,这样就相当于没有使用隐藏层,没有意义!
损失函数
深度学习中损失函数是整个网络模型的“指挥棒”, 通过对预测样本和真实样本标记产生的误差反向传播指导网络参数学习。
简单来说就是预测值与真实值的差值,差值越小则预测的准确性就越高。
//以下是找到的资料,慢慢消化
最大似然函数、最小二乘、梯度下降
https://blog.csdn.net/m0_37565948/article/details/81353305
梯度下降
https://blog.csdn.net/DeepOscar/article/details/81058057
反向传播
https://blog.csdn.net/goldfish288/article/details/79835550
卷积
卷积运算的定义如下图所示:
如图所示,我们有一个5x5的图像,我们用一个3x3的卷积核:
1 0 1
0 1 0
1 0 1
来对图像进行卷积操作(可以理解为有一个滑动窗口,把卷积核与对应的图像像素做乘积然后求和),得到了3x3的卷积结果。
这个过程我们可以理解为我们使用一个过滤器(卷积核)来过滤图像的各个小区域,从而得到这些小区域的特征值。
在实际训练过程中,卷积核的值是在学习过程中学到的。
在具体应用中,往往有多个卷积核,可以认为,每个卷积核代表了一种图像模式,如果某个图像块与此卷积核卷积出的值大,则认为此图像块十分接近于此卷积核。如果我们设计了6个卷积核,可以理解:我们认为这个图像上有6种底层纹理模式,也就是我们用6中基础模式就能描绘出一副图像。以下就是24种不同的卷积核的示例:
池化
池化听起来很高深,其实简单的说就是下采样。池化的过程如下图所示:
上图中,我们可以看到,原始图片是20x20的,我们对其进行下采样,采样窗口为10x10,最终将其下采样成为一个2x2大小的特征图。
之所以这么做的原因,是因为即使做完了卷积,图像仍然很大(因为卷积核比较小),所以为了降低数据维度,就进行下采样。
之所以能这么做,是因为即使减少了许多数据,特征的统计属性仍能够描述图像,而且由于降低了数据维度,有效地避免了过拟合。
在实际应用中,池化根据下采样的方法,分为最大值下采样(Max-Pooling)与平均值下采样(Mean-Pooling)。
全连接层
全连接层(fully connected layer):卷积,池化,**等层,已提取了上图所示的局部特征,且已到达了第一层全连接层并**符合特征存在的部分神经元,该连接层是一维的,而这个层的作用就是根据提取到的局部特征进行相关操作进行组合并输出到第二个全连接层的某个神经元处。个人理解:把局部特征连接起来整合成一个半整体的大特征
RNN递归神经网络
RNNs是一组用于处理顺序数据的神经网络。
从这一刻到下一刻,我们的大脑作为一种功能运行:它接受来自我们的感官(外部)和思想(内部)的输入,并以行动(外部)和新思想(内部)的形式产生输出。我们看到熊,然后想到“熊”。我们可以用前馈神经网络来模拟这种行为:当前馈神经网络看到熊的图像时,我们可以教它思考“熊”。
但是我们的大脑不是一次性的功能。它在时间中反复运行。我们看到一只熊,然后想到“熊”,然后想到“跑”。重要的是,将熊的形象转化为思想“熊”的功能,同样也将思想“熊”转化为思想“跑”。它是一个循环函数,我们可以用一个循环神经网络(RNN)对其进行建模。
一个RNN是由相同的前馈神经网络组成,每一个时刻,或者每一步,我们称之为“RNN细胞”
什么是RNN?
RNN是一种特殊的神经网络结构, 它是根据"人的认知是基于过往的经验和记忆"这一观点提出的. 它与DNN,CNN不同的是: 它不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种'记忆'功能.
RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。
既然我们已经有了人工神经网络和卷积神经网络,为什么还要循环神经网络?
原因很简单,无论是卷积神经网络,还是人工神经网络,他们的前提假设都是:元素之间是相互独立的,输入与输出也是独立的,比如猫和狗。
但现实世界中,很多元素都是相互连接的,比如股票随时间的变化,一个人说了:我喜欢旅游,其中最喜欢的地方是云南,以后有机会一定要去.这里填空,人应该都知道是填“云南“。因为我们是根据上下文的内容推断出来的,但机会要做到这一步就相当得难了。因此,就有了现在的循环神经网络,他的本质是:像人一样拥有记忆的能力。因此,他的输出就依赖于当前的输入和记忆。
https://blog.csdn.net/u012509485/article/details/80507138
预训练
https://blog.csdn.net/program_developer/article/details/80737724
Dropout
https://www.cnblogs.com/lvdongjie/p/11270447.html
学习率
深度学习的技术表面上看起来五花八门,但其实就是三个步骤:设定好类神经网络架构、订出学习目标、开始学习
从函数的角度理解深度学习:第一步,是一个函数集;第二步,定义函数的拟合度;第三部,选择最佳函数。