加入收藏 | 设为首页 |

马鲛鱼的做法-很多示例+简略图画!带你读懂神经网络

海外新闻 时间: 浏览:239 次
全文共5353字,估计学习时长20分钟或更长



本文旨在揭开神经网络的奥秘面纱,介绍神经网络运转的动机和根底。

GitHub 库传送门:https://github.com/mrdragonbear/Neural-Networks


神经网络的动机


未经练习的神经网络模型很像新生儿: 他们被发明出来的时分对国际一窍不通(假如考虑到认识论理论的话),而且只要通过触摸这个国际,也便是后天的常识,才会渐渐进步它们的认知程度。算法通过数据体会国际——咱们企图通过在相关数据集上练习神经网络,来进步其认知程度。衡量进展的办法是通过监测网络发生的差错。


在深入研讨神经网络国际之前,了解这些网络背面的动机以及它们作业的原因是很重要的。为了做到这一点,咱们有必要评论一下逻辑回归剖析。


环绕定量反应变量的建模与猜测(例如出租车接送的次数,自行车租借的次数)的办法被称为回归(Ridge回归,LASSO回归等)。当因变量是清晰的,那么这个问题不再被称为回归问题,而是被标记为一个分类问题。


考虑一个二分类问题,方针是依据一组猜测变量杨大平教授 x,测验将每个调查成果分为由 y 界说的类别(例如类别或集群)。


假定咱们想依据患者的特征来猜测患者是否患有心脏病。这儿的因变量是肯定的,存在有限的成果,或许更清晰地说是二元的,因为只要两种类型(yes / no)。



这儿有许多特性——在此,咱们只运用 MaxHR 变量。



为了做出这个猜测,咱们将运用一种被称为逻辑回归剖析的办法。逻辑回归剖析处理了猜测一个人患有心脏病概率的问题,P(y=1),给定输入值X。


逻辑回归模型运用一个逻辑来对P(y=1)建模 :


因而,该模型将用S形曲线猜测 P(y=1) ,S形曲线是逻辑函数的一般形状。



₀使曲线右移或左移 c=-₀/ ₁,而₁操控 s 形曲线的陡度。


留意,假如₁是正值,那么猜测的P(y=1)规模为 从0(当x很小时)到1(当x很大时),假如₁是负值,则与之相反。


下面以图表办法对此进行总结。



现在咱们知道了怎么操作逻辑回归曲线,能够运用一些变量来得到想要的曲线。


能够改动₀值来移动偏移量。



能够改动₁的值来歪曲梯度。



着手完结这个进程是适当庸俗的,而且不太或许得到最优值。为了处理这个问题,咱们运用丢失函数来量化归属于当时参数的差错水平。然后找出使这个丢失函数最小的系数。关于这种二进制分类,能够运用一个二进制丢失函数来优化咱们的逻辑回归模型。


因而,神经网络的参数与网络发生的差错有关,当参数改动时,网络发生的差错也随之改动。运用一种叫做梯度下降法的优化算法来改动参数,这种算法关于寻觅函数的最小值很有用。咱们正在寻求最小化的差错,这也被称为丢失函数或方针函数。



那么刚刚做的这些有什么含义呢?这和神经网络有什么关系?实践上,刚刚做的实质上和神经网络算法履行的程序是相同的。

咱们只为之前的模型运用了一个特性。相反,咱们能够选用多种特性,并用网络的办法来阐明这些特性。咱们有每个特征的权重,还有一个差错项,它们一同组成了回归参数。依据问题是分类问题仍是回归问题,马鲛鱼的做法-很多示例+简略图画!带你读懂神经网络公式将略有不同。



当咱们评论神经网络中的权重时,实践上评论的是各种传入函数的回归参数。然后这些信息被传递给激活函数,由它来决议成果是马鲛鱼的做法-很多示例+简略图画!带你读懂神经网络否重要到足以“触发”该节点。


所以现在咱们开发了一个十分简略的网络,它由多个具有4个功用的逻辑回归模型组成。


需求从一些恣意的数值公式开端,以便更新和优化参数,咱们将在每次更新后评价丢失函数并运用梯度下降法。


要做的榜首件事是随机设置权重。在心脏数据中,该模型很或许会给出过错的答案。

然后通过不良行为处分的办法来练习这个模型。



可是,只是告知核算机它的功用是好是坏并不是特别有协助。你需求告知它怎么更改这些权重,以进步模型的功用。


咱们现已知道怎么告知核算机它运转杰出,只需求咨询丢失函数。现在,这个进程更杂乱了,因为有5个权重要处理。咱们将只考虑一个权重,但一切权重的程序是类似的。


抱负情况下,咱们期望知道给出使ℒ(w)取最小值的w的值。



为了找到函数ℒ(w)的最长处,能够对权值求导,然后将其设为零。



然后需求找到满意这个方程的w。有时马鲛鱼的做法-很多示例+简略图画!带你读懂神经网络分没有清晰的处理方案。

一个更灵敏的办法是从任何一点开端,然后确认哪个方向去削减丢失(在这种情况下是左面仍是右边)。具体来说,能够核算函数在这一点上的斜率。假如斜率是负的,就向右移动,假如斜率是正的,就向左移动。然后重复这个进程直到收敛。



假如步长与斜率成正比,那么你就要防止超越最小值。

怎么履行此更新?这是通过一种被称为梯度下降法的办法来完结的,这个办法在前面现已扼要提到过。

梯度下降法


梯度下降法是求函数最小值的迭代法。这篇博文(http://ruder.io/optimizing-gradient-descent/)展现了更新权重的不同办法。现在,坚持运用一般的梯度下降法算法,有时也被称为delta规矩(http://www.cs.stir.ac.uk/courses/ITNP4B/lectures/kms/3-DeltaRule.pdf)。

咱们知道想要走与导数相反的方向(因为咱们企图避开差错) ,而且期望步长与导数成份额。这个步长由一个称为学习率的参数操控。新权重是旧权重和新步长的和,步长由丢失函数以及相关参数对学习率的影响程度决议。



较快的学习速度意味着对导数赋予较大的权重,这样算法的每次迭代都能够进行较大的步长。较小的学习速度意味着对导数的权重较小,因而每次迭代能够选用较小的步长。


假如步长过小,则算法需求较长时刻收敛,假如步长过大,则算法将不断错失最优参数的挑选。明显,树立一个神经网络时挑选学习率很重要。



运用梯度下降法时有许多考虑要素:

依然需求马鲛鱼的做法-很多示例+简略图画!带你读懂神经网络推导出导数。

需求知道学习率是多少或许怎么设置它。

需求防止部分极小值。

最终,悉数丢失函数包含一切单个"差错"的总和。这能够是不计其数的比如。

现在衍生物都是用主动微分来衍生的,所以不太关怀这个问题。可是,确认学习速度是一个重要而杂乱的问题。

部分极小值关于神经网络来说是个很大的问题,因为神经网络的办法并不能确保咱们将到达大局最小值。



堕入部分极小值意味着有一个部分杰出的参数优化,但有一个更好的优化在丢失外表的某个当地。神经网络的损耗曲面能够有许多这样的部分优化,这是网络优化的问题。例如下图所示的丢失外表。



网络堕入部分极小值。



网络收敛到大局最小值


怎样处理这个问题呢?一方面能够运用批量梯度下降和随机梯度下降的办法。虽然这听起来杂乱,但事实上很简略,不要用整个数据集,而是用其间一批(组)数据,在每次迭代进程中,丢失平面都会有部分变化。


每一次迭代k都能运用下面的(似然)丢失函数来求导数:




这是悉数丢失函数的近似值,举例阐明一下。首要从悉数的(似然)丢失平面开端,随机分配的网络权值会供给一个初值。



之后选一批数据,比方说悉数数据的10%,然后构建一个新的丢失平面。



此刻方位变了。再次从悉数数据中随机挑选一组数据,然后构建丢失平面。



将梯度下降法运用于这组数据,然后进行更新。



选取一组新数据持续重复以上程序。


然后进行更新。



将上述程序进行屡次迭代。



直到网络开端收敛到大局最小值。



现在有满足的常识储藏来构建榜首个神经网络。

人工神经网络(ANN)


已然现已了解了逻辑回归的原理、评价一个网络的办法以及怎么更新网络以进步其功用,那么接下来就能够构建一个神经网络了。

首要,期望大家能知道神经网络称号的由来。或许你现已传闻过了,神经网络仿照了神经元即神经细胞的结构,虽然这种结构看起来比神经网络杂乱得多,但其实二者的功用是类似的。


图片来历:https://simple.wikipedia.org/wiki/Neuron


实践神经元运作时要堆集电势能,当能量超越特定值时,突触前神经元会经轴突放电,继而影响突触后神经元。


人类有着数以亿计相互连接的神经元,其放电方式无比杂乱。哪怕是最先进的神经网络也难以比较人脑的才干,因而,神经网络在短时刻内应该还无法模仿人脑的功用。


能够运用示意图,将神经元结构与神经网络中的人工神经元进行类比。


图片来历:http://cs231n.stanford.edu/slides/2017/cs231n


鉴于人脑的才干,很明显人工神经网络的运用规模是无限的,尤其是在咱们将其连接到传感器、履行器和网络资源今后。虽然现在还处于相对不行老练的阶段,可是由此能够看出神经网络无处不在。


究竟,复原论者以为,人类不过是经由各部分神经系统,连接到传感器和履行器的神经网络的集合体。


现在,幻想咱们具有很多的特征。每一特征都要通过仿射改换,大体来说便是加法(减法)和/或乘法,这就像是一个回归方程。假如在一个多层感知机中有很多节点集聚于一个节点,那么仿射改换就变得十分重要。


然后,将成果送到激活函数,这会为咱们供给某种办法的概率值。这个概率值决议了神经元是否放电。然后能够把该成果代入丢失函数,然后评价该算法的功用。



从现在开端,将仿射和激活看作一个模块。可是要清楚,仿射改换是上游节点输出的总和,然后将加和的输出传递给激活函数,然后评价决议该量化值(概率值)是否足以使神经元放电的概率。


现在能够回到榜首个心脏病数据的比如。取两条逻辑回归曲线加以兼并。兼并前的曲线如下所示:



因为自由度的进步,将两个网络相连接时,所得网马鲛鱼的做法-很多示例+简略图画!带你读懂神经网络络的灵敏性就会添加。



这很好地表现出了神经网络的强壮,咱们能够将很多来自与很多神经元的函数串(加)在一同,这样就能得到高度非线性函数。有了很多且足够的神经元,就能够得到恣意杂乱度的连续函数。

这只是神经网络的一个简略的比如,但即使是这样一个简略的网络,咱们也现已堕入了一个问题之中。要怎么更新权值呢?



咱们需求核算与这些权值相关的丢失函数的导数。为了了解丢失的权值w1、w2和w3,需求用到反向传达算法。

反向传达算法


反向传达算法是神经网络学习的中心机制,它能在猜测期间告诉网络是否呈现过错。反向传达算法的面世是整个神经网络研讨中最重要的里程碑之一。


传达是为了在某个特定方向或许经由特定的前言来传送某种事物(如光、声)。在神经网络的布景下评论反向传达算法时,咱们谈的是信息的传输,神经网络对数据进行猜测会发生差错,而这些信息就与所发生的差错相关。


猜测期间,神经网络将信号传达到输出层并在此处进行决议计划,之后网络将差错信息反向传达然后修正各项参数。


图片来历:https://becominghuman.ai/back-propagation-in-convolutional-neural-networks-intuition-and-code-714ef1c38199


反向传达算法用来核算网络中各项参数的导数,然后才干运用梯度下降法。这是反向传达算法和梯度下降法的重要差异,不要将二者混杂。首要用到的是反向传达算法,来获取梯度下降法所需求的信息。


或许你现已发现仍需核算导数。核算机无法进行微分,可是为了在没有网络规划器参加的情况下进行,咱们能够制作一个函数库来完成该进程,这被称为主动微分,举例如下。


能够像这样手算,然后对每个网络架构和节点进行修正。



或许,能够界说一个链接到网络结构的函数库,当网络架构更新时会主动完成并更新程序。



假如你真想搞清楚这个主动微分进程用途有多大,试着做一个六节点的多层神经网络,然后编写代码来完成反向传达算法。

更杂乱的网络


双节点神经网络对大大都运用都不适用。一般,咱们会用神经网络去迫临一个难以用传统办法描绘的杂乱函数。


神经网络要遵从全能近似定理,这一点十分特别。该定理称,假如一个神经网络中有无限多个神经元,那么就能够精确地表示出恣意杂乱度的连续函数。这一表述十分耐人寻味,它的意思是,假如核算才干满足大,咱们简直能够迫临任何函数。


很明显,这一主意在实践中存在一些问题。首要,可运用的数据有限,这就约束了猜测类别或许估值时的精确度。其次,核算才干有限。即使是国际上最强壮的超级核算机,想要规划一个远超其运载才干的神经网络也不是什么难事。


咱们所要规划的网络架构,要凭仗最少的数据,用相对较少的核算才干,就能完成高精度。


更令人吃惊的是,只是一个躲藏层就足以迫临恣意精确度的恣意函数。


假如一层就够了,那人们为什么还要运用多层神经网络呢?


多躲藏层神经网络架构


答案很简略。因为浅层神经网络比深层神经网络需求更多的宽度(指数级),因而神经网络的架构要十分宽。此外,浅层神经网络更简单呈现过拟合。


这推动了深度学习范畴的呈现(深度指的是神经网络的多层架构),影响着今世关于机器学习以及触及数据分类和猜测的大都范畴的研讨文献。

总结


这篇文章环绕神经网络的初衷以及布景进行了评论,概述了其练习办法。咱们议论了丢失函数、差错传达、激活函数和网络架构。下图很好地总结了以上概念及其相互间的联络。


神经网络分步示意图 图片来历:https://medium.com/datathings/neural-networks-and-backpropagation-explained-in-a-simple-way-f540a3611f5e

留言 点赞 重视

咱们一同共享AI学习与开展的干货

欢迎重视全马鲛鱼的做法-很多示例+简略图画!带你读懂神经网络渠道AI垂类自媒体 “读芯术”