鹿泉网站制作公司,网站title是什么意思,市场营销培训课程,门户网站seo前期来源#xff1a;产业智能官解析深度网络背后的数学如今#xff0c;已有许多像 Keras, TensorFlow, PyTorch 这样高水平的专门的库和框架#xff0c;我们就不用总担心矩阵的权重太多#xff0c;或是对使用的激活函数求导时存储计算的规模太大这些问题了。基于这些框架#… 来源产业智能官解析深度网络背后的数学如今已有许多像 Keras, TensorFlow, PyTorch 这样高水平的专门的库和框架我们就不用总担心矩阵的权重太多或是对使用的激活函数求导时存储计算的规模太大这些问题了。基于这些框架我们在构建一个神经网络时甚至是一个有着非常复杂的结构的网络时也仅需少量的输入和代码就足够了极大地提高了效率。无论如何神经网络背后的原理方法对于像架构选择、超参数调整或者优化这样的任务有着很大的帮助。图一 训练集可视化举个例子我们将利用上图展示的训练集数据去解决一个二分类问题。从上面的图可以看出数据点形成了两个圆这对于许多传统的机器学习算法是不容易的但是现在用一个小的神经网络就可能很好地解决这个问题了。为了解决这个问题我们将构建一个神经网络包括五个全连接层每层都含有不同数目的单元结构如下图二 神经网络架构其中隐藏层使用 ReLU 作为激活函数输出层使用 Sigmoid。这是一个非常简单的架构但是对于解决并解释这个问题已经足够了。用 KERAS 求解首先先给大家介绍一个解决方法使用了一个最受欢迎的机器学习库—— KERAS 。from keras.models import Sequentialfrom keras.layers import Densemodel Sequential()model.add(Dense(4, input_dim2,activationrelu))model.add(Dense(6, activationrelu))model.add(Dense(6, activationrelu))model.add(Dense(4, activationrelu))model.add(Dense(1, activationsigmoid))model.compile(lossbinary_crossentropy, optimizeradam, metrics[accuracy])model.fit(X_train, y_train, epochs50, verbose0)正如我在简介中提到的少量的输入数据和代码就足以构建和训练出一个模型并且在测试集上的分类精度几乎达到 100%。概括来讲我们的任务其实就是提供与所选架构一致的超参数层数、每层的神经元数、激活函数或者迭代次数。先给大家展示一个超酷的可视化结果是我在训练过程中得到的
图三 训练中正确分类区域的可视化现在我们来解析这背后的原理。什么是神经网络让我们从关键问题开始什么是神经网络它是一种由生物启发的用来构建可以学习并且独立解释数据中联系的计算机程序的方法。如上图二所示网络就是各层神经元的集合这些神经元排列成列并且相互之间连接可以进行交流。单个神经元每个神经元以一组 x 变量取值从 1 到 n 的值作为输入计算预测的 y-hat 值。假设训练集中含有 m 个样本则向量 x 表示其中一个样本的各个特征的取值。此外每个单元有自己的参数集需要学习包括权重向量和偏差分别用 w 和 b 表示。在每次迭代中神经元基于本轮的权重向量计算向量 x 的加权平均值再加上偏差。最后将计算结果代入一个非线性激活函数 g。我会在下文中介绍一些最流行的激活函数。图四 单个神经元单层现在我们看一下神经网络中整体的一层是怎么计算的。我们将整合每个单元中的计算进行向量化然后写成矩阵的形式。为了统一符号我们选取第 l 层写出矩阵等式下标 i 表示第 i 个神经元。图五 单层神经网络注意一点当我们对单个单元写方程的时候用到了 x 和 y-hat它们分别表示特征列向量和预测值。但当我们对整个层写的时候要用向量 a 表示相应层的激活值。因此 向量 x 可以看做第 0 层输入层的激活值。每层的各个神经元相似地满足如下等式为了清楚起见以下是第二层的所有表达式可见每层的表达式都是相似的。用 for 循环来表示很低效因此为了加速计算速度我们使用了向量化。首先将权重向量 w 的转置堆叠成矩阵 W。相似地将各个神经元的偏差也堆在一起组成列向量 b。由此我们就可以很轻松地写出一个矩阵等式来表示关于某一层的所有神经元的计算。使用的矩阵和向量维数表示如下多样本向量化到目前为止我们写出的等式仅包含一个样本。但在神经网络的学习过程中通常会处理一个庞大的数据集可达百万级的输入。因此下一步需要进行多样本向量化。我们假设数据集中含有 m 个输入每个输入有 nx 个特征。首先将每层的列向量 x, a, z 分别堆成矩阵 X, A, Z。然后根据新的矩阵重写之前的等式。什么是激活函数我们为什么需要它激活函数是神经网络的关键元素之一。没有它们神经网络就只是一些线性函数的组合其本身也只能是一个线性函数。我们的模型有复杂度的限制不能超过逻辑回归。其中非线性元保证了更好的适应性并且能在学习过程中提供一些复杂的函数。激活函数对学习的速度也有显著影响这也是在选择时的评判标准之一。图六展示了一些常用的激活函数。近年来隐藏层中使用最广的激活函数大概就是 ReLU 了。不过当我们在做二进制分类问题时我们有时仍然用 sigmoid尤其是在输出层中我们希望模型返回的值在 0 到 1 之间。图六 常用激活函数及其导数函数图像损失函数关于学习过程进展的基本的信息来源就是损失函数值了。通常来说损失函数可以表示我们离 “理想” 值还差多远。在本例中我们用 binary crossentropy两元交叉熵来作为损失函数不过还有其他的损失函数需要具体问题具体分析。两元交叉熵函数表示如下下图展示了在训练过程中其值的变化可见其值随着迭代次数如何增加与减少精度如何提高图七 训练过程中精确度及损失的变化神经网络如何学习学习过程其实就是在不断地更新参数 W 和 b 的值从而使损失函数最小化。为此我们运用微积分以及梯度下降的方法来求函数的极小。在每次迭代中我们将分别计算损失函数对神经网络中的每个参数的偏导数值。对这方面计算不太熟悉的小伙伴我简单解释一下导数可以刻画函数的斜率。我们已经知道了怎样迭代变量会有怎么样的变化为了对梯度下降有更直观的认识我展示了一个可视化动图从中可以看到我们是怎么通过一步步连续的迭代逼近极小值的。在神经网络中也是一样的——每一轮迭代所计算的梯度显示我们应该移动的方向。而他们间最主要的差别在于神经网络需要计算更多的参数。确切地说怎么计算如此复杂的导数呢图八 动态梯度下降反向传播算法反向传播算法是一种可以计算十分复杂的梯度的算法。在神经网络中各参数的调整公式如下其中超参数 α 表示学习率用以控制更新步长。选定学习率是非常重要的——太小NN 学习得太慢太大无法达到极小点。用链式法则计算 dW 和 db —— 损失函数对 W 和 b 的偏导数 dW 和 db 的维数与 W 和 b 相等。图九展示了神经网络中的一系列求导操作从中可以清楚地看到前向和后向传播是怎样共同优化损失函数的。图九 前向与后向传播结论希望这篇文章对各位小伙伴理解神经网络内部运用的数学原理有所帮助。当我们使用神经网络时理解这个过程的基本原理是很有帮助的。文中讲述的内容虽然只是冰山一角但都是我认为最重要的知识点。因此我强烈建议大家能试着独立地去编一个小的神经网络不要依赖框架仅仅只用 Numpy 尝试一下。未来智能实验室的主要工作包括建立AI智能系统智商评测体系开展世界人工智能智商评测开展互联网城市云脑研究计划构建互联网城市云脑技术和企业图谱为提升企业行业与城市的智能水平服务。 如果您对实验室的研究感兴趣欢迎加入未来智能实验室线上平台。扫描以下二维码或点击本文左下角“阅读原文”