数值预测、量化交易2.什么是神经网络我们以房价预测的案例

1. 深度学习有哪些应用

图像:图像识别、物体识别、图像美化、图像复原、目标检测。自然语言处理:机器创建、个性化推荐、文本分类、翻译、自动纠错、情感分析。数值预测、量化交易2.什么是神经网络

我们以房价预测为例。房子的面积作为神经网络的输入(我们称之为),通过一个节点(一个小圆圈),最后输出价格(我们用 表示)。事实上,这个小圆圈是一个单一的神经元,就像人脑中的神经元一样。如果这是一个单神经元网络,无论大小,都是由这些单神经元堆叠在一起形成的。如果您将这些神经元视为单独的乐高积木,您可以通过积木构建一个更大的神经网络。

神经网络与大脑关系不大。这是一个过于简单的比较,将神经网络的逻辑单元与右侧的生物神经元进行比较。到目前为止,即使是神经科学家也很难解释神经元能做什么。

2.1 什么是感知器

这从逻辑回归开始。我们都知道逻辑回归的目标函数如下:

z=θ0+θ1X1+θ2X2

a=g(z)=11+ez

我们用网络来表示它,这个网络被称为感知器:

如果你给这个感知器添加一个隐藏层,你会得到我们下面要讲的神经网络结构。

2.2 神经网络的结构

神经网络的一般结构由输入层、隐藏层(神经元)和输出层组成。隐藏层可以是一层或多层叠加,各层相互连接,如下图所示。

一般来说,一个神经网络的层数就是这样计算的。输入层不计算在内。从隐藏层到输出层,一共几层代表一个有几层的神经网络。例如,上图是一个三层结构的神经网络。

解释隐藏层的含义:在神经网络中,当你使用监督学习训练它时,训练集包含输入和目标输出,所以术语隐藏层是指在训练集中,这些中间节点是准确的这些值对我们来说是未知的,这意味着您在训练集中看不到它们应该具有的值。

具有多个隐藏层的神经网络比具有单个隐藏层的神经网络效果更好。通过增加隐藏层或隐藏层中神经元的数量,神经网络的“容量”会变大,空间表达会变得更强。太多的隐藏层和神经元节点会带来过拟合问题。不要试图通过减少神经网络参数的数量来减缓过拟合,使用正则化或 dropout。2.3 为什么神经网络具有非线性分割能力

假设下图分类,圆圈是一种,红十字是另一种。如果使用线性分割,它们不能以任何方式分开。

这时候引入了一个神经网络(2层神经网络),包括一个隐藏层。在隐藏层,分别得到P1和P2的图。P1 线以上的部分是红叉,P2 线以下的部分是 的部分,都是红叉,两个神经元有 2 条直线。从隐藏层到输出层要做的事情就是把这两条直线组合起来,你会得到h(x)的图形,也就是说P1上面的空间和P2下面的空间是分类的红十字会。其余的空间被归类为圆圈。这使得原来的非线性分割变成了非线性分割。

如果隐藏层比较复杂,可以完美实现复平面样本点分布的划分(类似于matting),如下图所示:

3. 神经网络计算过程

3.1 计算过程

如下所示。神经网络的计算单元用圆圈表示。逻辑回归的计算有两个步骤。首先,你按照步骤计算,然后在第二

在第一步中,您计算​​(获得)sigmoid 函数作为激活函数,神经网络只是多次执行此操作并重复计算。

其中一种神经元计算如下图所示:

向量化计算,如果你正在运行一个神经网络程序,用 for 循环来做这件事似乎效率很低。所以接下来我们要做的就是向量化这四个方程。向量化的过程就是将神经网络中一层神经元的参数垂直叠加起来。比如在隐藏层垂直堆叠变成了(4,3)的矩阵,用符号[1]表示。另一种看待这个的方式是我们有四个逻辑回归单元,而每个逻辑回归单元都有一个对应的参数 – 一个向量,将这四个向量叠加在一起就可以得到这个 4×3 矩阵。

上式代表一个样本的向量化计算。多个样本的向量化计算其实就是在上面公式的基础上加上列数,每列相当于一个样本。

3.2 随机初始化模型参数

在神经网络中,经常需要随机初始化模型参数。让我们解释一下原因。

假设输出层只保留输出单元 o1(去掉 o2 和 o3 以及指向它们的箭头),隐藏层使用相同的激活函数。如果每个隐藏单元的参数被初始化为相等的值,那么每个隐藏单元在前向传播过程中会从相同的输出中计算出相同的值,并将其传递给输出层。在反向传播中,每个隐藏单元的参数梯度值是相等的。因此,这些参数在基于梯度的优化算法的迭代之后保持相等。后续迭代也是如此。

在这种情况下,无论有多少隐藏单元,隐藏层中基本上只有 1 个隐藏单元。因此,和之前的实验一样,我们通常随机初始化神经网络的模型参数,尤其是权重参数。

有两种初始化方法:

使用正态分布的随机初始化方法。Xaier初始化方法:假设一个全连接层的输入个数为a,输出个数为b,Xaier随机初始化会从均匀分布中随机抽取层中权重参数的每个元素:U[√6a+ b、初始化√6a+b]后,各层输出的方差不受该层输入个数的影响,各层梯度的方差不受输入个数的影响层的输出。3.3 激活函数

3.3.1 激活函数有哪些

在对隐藏层应用线性变换后,再应用非线性变换(例如 sigmoid)。这种非线性变换称为传递函数或激活函数。上面的例子使用了逻辑回归的 Sigmoid 激活函数。如果还是不明白激活函数在哪里,可以看下图。

sigmoid函数

a=g(z)=11+ezg(z)′=ddzg(z)=α(1α)tanh(双曲正切)函数其实tanh函数就是sigmoid向下平移和缩放的结果。变形后通过(0,0)点,范围在+1到-1之间。但是有一个例外:在二分类问题中,对于输出层,因为 的值是0或1,所以我希望^的值在0和1之间,而不是-1和+1。所以你需要使用sigmoid激活函数。

a=g(z)=tanh(z)=ezezez+ezg(z)′=ddzg(z)=1(tanh(z))2 sigmoid函数和tanh函数的共同缺点是在的情况下,导数的梯度或者函数的斜率会变得极小,最终会趋近于0,导致梯度下降的速度下降。只要 ReLu 函数为正,导数始终等于 1,当它为负时,导数始终等于 0。

a=max(0,z)g(x)′=0ifz0undefinedifz=0 以下是选择激活函数的一些经验法则: 如果输出为 0、1 值(二分类问题),则输出层选择sigmoid函数,然后所有其他单元选择Relu函数。在 softmax 激活函数之前,我们的激活函数接受单行数值输入,例如 Sigmoid 和 ReLu 激活函数,它们输入一个实数并输出一个实数。Softmax激活函数的特别之处在于,因为它需要对所有可能的输出进行归一化,所以需要输入一个向量,最后输出一个向量。hardmax函数会观察元素,然后把1放在中间最大元素的位置,把0放在其他位置,softmax到这些概率的映射比较温和。Softmax 回归将逻辑回归推广到两个以上的类别。非线性变换前计算:z(l)=W(l)a(l1)+b(l) 非线性变换后,临时变量:t=ez(l)al=ti∑nj=1ti 归一化A al表示前几类的概率值,这些概率值之和为13.3.2个优缺点

在激活函数的范围变化很​​大的情况下,激活函数的导数或者激活函数的斜率会远大于0。在程序实现中是if-else语句,sigmoid函数需要进行浮点运算。在实践中,使用 ReLu 激活函数神经网络通常比使用 sigmoid 或 tanh 激活函数学习得更快。sigmoid和tanh函数在正负饱和区的导数梯度会接近0,会造成梯度弥散,而Relu和Leaky ReLu函数大于0的部分都是常数,不会产生梯度分散。(同时需要注意的是,当Relu进入负半部分时,梯度为0,此时神经元不会被训练,导致所谓的稀疏性,Leaky ReLu不会有这个问题)ReLu中一半的梯度是0,但是隐藏层足够多,z值大于0,因此对于大多数训练数据,学习过程仍然可以很快。3.3.3 为什么要使用激活函数

如果你使用或不使用线性激活函数,那么无论你的神经网络做了多少层,都只是计算线性函数,所以最好只删除所有隐藏层。在我们的简洁案例中,如果在隐藏层使用线性激活函数,在输出层使用 sigmoid 函数,那么模型就像没有任何隐藏层一样复杂。标准逻辑回归是相同的。

线性隐藏层在这里没用,因为这两个线性函数的组合本身就是一个线性函数,所以除非你引入非线性,否则你无法计算出更多有趣的函数,即使你的网络有更多的层。

3.3.4 为什么ReLu在人工神经网络中优于tanh和sigmoid函数?

使用sigmoid等函数,在计算激活函数(指数运算)时,计算量很大。反向传播求误差梯度时,求导涉及除法和指数运算,计算量比较大。但是使用Relu激活函数,整个过程的计算量比较大。节省很多。对于深度网络,当sigmoid函数反向传播时,梯度很容易消失(当sigmoid接近饱和区时,变换太慢,导数趋于0,会造成信息丢失)。这种现象称为饱和,以至于无法完成深度网络的训练。但是,ReLU 不会有饱和的趋势,并且不会有特别小的梯度。Relu使一些神经元的输出为0,造成网络的稀疏性,减少了参数的相互依赖,从而缓解了过拟合问题的发生(还有人的生物学解释balabala)。当然relu也有一些改进,比如prelu、random relu等,在不同的数据集上训练速度或者准确率都会有一些提升。有关详细信息,您可以找到相关论文。3.3.5 激活函数的性质是什么?relu也有一些改进,比如prelu、random relu等,在不同的数据集上训练速度或者准确率会有一些提升。有关详细信息,您可以找到相关论文。3.3.5 激活函数的性质是什么?relu也有一些改进,比如prelu、random relu等,在不同的数据集上训练速度或者准确率会有一些提升。有关详细信息,您可以找到相关论文。3.3.5 激活函数的性质是什么?

非线性:当激活函数为线性时,一个两层的神经网络可以逼近几乎所有的函数。但是,如果激活函数是恒等激活函数,即f(x)=x,则不满足这个性质,而如果MLP使用恒等激活函数,那么整个网络实际上相当于单层神经网络。; 可微性:当优化方法是基于梯度的时候,这个属性就体现出来了;单调性:当激活函数单调时,可以保证单层网络是凸函数;f(x)≈x:当激活函数满足这个性质时,如果参数的初始化是一个随机的小值,那么神经网络的训练就会非常高效;如果不满足此属性,那么需要详细设置初始值;输出值的范围:当激活函数的输出值受限时,基于梯度的优化方法会更加稳定,因为特征的表示受到受限权重的影响更显着;当激活函数的输出为无穷大时,模型的训练会更​​有效率,但在这种情况下,一般需要较小的Learning Rate。3.4 前向传播 模型的训练会更​​有效率,但在这种情况下,一般需要较小的Learning Rate。3.4 前向传播 模型的训练会更​​有效率,但在这种情况下,一般需要较小的Learning Rate。3.4 前向传播

前向传播是指从神经网络的输入层到输出层依次计算和存储模型的中间变量(包括输出)。

逻辑回归的计算步骤:所以当我们谈论逻辑回归时,我们有这个前向传播步骤,我们计算神经网络 参数初始化,然后是损失函数。前向传播类似,计算z[1],a[1],然后计算z[2],a[2],最后得到损失函数。

xwbz=wTx+ba=σ(z)L(a,y)

3.5 反向传播 (BP)

反向传播是指计算神经网络参数梯度的方法。一般来说,根据微积分中的链式法则,反向传播沿输出层到输入层的顺序计算并存储与神经网络各层相关的目标函数的中间变量和参数的梯度。

通过所有隐藏层前向传播到输出层,会得到一个输出结果OL,然后根据这个OL带入损失函数,使用SGD算法优化解,其中每次梯度下降都会使用一个BP来更新每个网络层的参数值,这就是BP返回错误的意思。

前向传播寻找损失,BP返回错误。根据误差信号修改每一层的权重。对每个 w 求微分神经网络 参数初始化,然后更新每个 w。链依赖损失函数:y=h(g(f(x)))3.6 随机梯度下降(SGD)

3.6.1 小批量梯度下降

您可以将训练集划分为更小的子集进行训练。这些子集称为小批量。假设每个子集中只有 1000 个样本,那么将 (1) 划分为 (100<@ 取出0) 称为第一个子训练集,也称为 mini-batch,然后取取出接下来的 1000 个样本,从 (1001) 到 (2000) ,然后再取 1000 个样本,依此类推。

要在训练集上运行小批量梯度下降,运行时间为 t=1…5000,因为我们有 5000 组,每组 1000 个样本,在 for 循环中,您基本上执行一对 { } 和 { } 执行一步梯度下降法。

batch_size=1,即 SGD。batch_size=n,即mini-batch batch_size=m,即batch的1

的优点和缺点:

batch:相对噪声较低,幅度较大。您可以继续找到最小值。SGD:大多数时候你在接近全局最小值,有时你在远离最小值,因为样本指向了错误的方向,所以随机梯度下降是很多噪音,平均而言,它会结束up close 最小值,但有时方向错误,因为随机梯度下降永远不会收敛,而是一直在最小值附近波动。一次只处理一个训练样本,效率太低。mini-batch:在实践中,最好选择不太小或不太小的mini-batch,以获得大量的向量化,效率高,收敛快。首先,如果训练集较小,直接使用批量梯度下降法,这意味着少于 2000 个样本。典型的 mini-batch 大小是 64 到 512。考虑到计算机内存的设置和使用方式,如果 mini-batch 大小是 2 的幂,则代码运行速度会更快。

3.6.2 调整Batch_Size对训练效果有何影响?

Batch_Size 太小,模型性能极差(误差飙升)。随着 Batch_Size 的增加,可以更快地处理相同数量的数据。随着 Batch_Size 的增加,需要越来越多的 epoch 才能达到相同的精度。由于以上两个因素的矛盾,Batch_Size 增大到一定时间,达到最优时间。由于最终的收敛精度会落入不同的局部极值,所以将Batch_Size增大到一定时间以达到最优的最终收敛精度。4. 为什么神经网络是端到端网络?

端到端学习(end-to-end)是一种解决问题的思路,对应于多步问题求解,即将一个问题拆分成多个步骤一步一步解决,端到端的end 是由输入端的数据直接导致输出端的结果。

即不进行预处理和特征提取,直接将原始数据丢入最终结果。

特征提取包含在神经网络中,因此神经网络是一个端到端的网络。

优势:

通过减少人工预处理和后续处理,模型可以尽可能地从原始输入到最终输出,给模型空间根据数据进行自动调整,提高模型的整体拟合度。

缺点

它可能需要大量数据。要直接学习映射,您可能需要大量 ( , ) 数据。它不包括可能有用的手工设计组件。5. 深度学习框架比较

现有的深度学习开源平台主要有Caffe、PyTorch、MXNet、CNTK、Theano、TensorFlow、Keras、fastai等。

目前,在招聘方面,大多数公司都使用 TensorFlow。毕竟TensorFlow的社区、性能、部署都很强大,所以后面写的示例代码都是使用TensorFlow完成的。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论