专栏首页ACM算法日常第八篇:《机器学习之神经网络(三)》

第八篇:《机器学习之神经网络(三)》

(因后文学术性较强,部分内容参见吴恩达在斯坦福大学的讲义)

与世无争的吴恩达老师

本篇内容:神经网络算法的模型表示

通过本篇的学习您将了解到神经网络模型的数学结构

有一定数据结构基础的同学可以尝试用C/C++搭建模型

神经网络的数学模型表示1

网络模型的仿生原理

为了构建神经网络模型,我们需要首先思考大脑中的神经网络是怎样的?

每一个神经元都可以被认为是一个处理单元/神经核(processing unit/Nucleus),它含有许多输入/树突(input/Dendrite),并且有一个输出/轴突(output/Axon)。神经网络是大量神经元相互链接并通过电脉冲来交流的一个网络。

下面是一组神经元的示意图,神经元利用微弱的电流进行沟通。这些弱电流也称作动作电位,其实就是一些微弱的电流。所以如果神经元想要传递一个消息,它就会就通过它的轴突,发送一段微弱电流给其他神经元,这就是轴突。

这里是一条连接到输入神经,或者连接另一个神经元树突的神经,接下来这个神经元接收这条消息,做一些计算,它有可能会反过来将在轴突上的自己的消息传给其他神经元。这就是所有人类思考的模型:我们的神经元把自己的收到的消息进行计算,并向其他神经元传递消息。这也是我们的感觉和肌肉运转的原理。如果你想活动一块肌肉,就会触发一个神经元给你的肌肉发送脉冲,并引起你的肌肉收缩。如果一些感官:比如说眼睛想要给大脑传递一个消息,那么它就像这样发送电脉冲给大脑的。

神经网络的模型表示

神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。下图是一个以逻辑回归模型作为自身学习模型的神经元示例,在神经网络中,参数又可被成为权重(weight)。

我们设计出了类似于神经元的神经网络,效果如下:

左侧的 x1,x2,x3 是输入单元(input units),我们将原始数据输入给它们。

中间单元a1(2),a2(2),a3(2),它们负责将数据进行处理,然后呈递到下一层。

这里的数据处理其实就是逻辑回归的方法,比如a1(2)代表第二层神经元的第一个,它的值由上一层神经元和对应参数构成,可以看到,a1(2)通过三条线连接了左侧的神经元x1,x2,x3,每一条线其实就是一个参数值,它的深层含义是:该神经元对于下一层的对应神经元的影响力

从中间层开始每一个神经元都是上一层神经元们逻辑回归的结果,以及下一层逻辑回归的特征值

最后是输出单元,它负责计算。

神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个3层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit):

下面引入一些标记法来帮助描述模型:

ai(j) 代表第 j 层的第 i 个激活单元。theta(j) 代表从第 j 层映射到第 j+1 层时的权重的矩阵,例如 theta(1) 代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第 j+1 层的激活单元数量为行数,以第 j 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中 theta(1) 的尺寸为 3*4。

对于上图所示的模型,激活单元和输出分别表达为:

上面进行的讨论中只是将特征矩阵中的一行(一个训练实例)喂给了神经网络,我们需要将整个训练集都喂给我们的神经网络算法来学习模型。

我们可以知道:每一个 a 都是由上一层所有的 x 和每一个 x 所对应的权重 theta 决定的。

(我们把这样从左到右的算法称为前向传播算法( FORWARD PROPAGATION ))

神经网络的数学模型表示2

前向传播算法( FORWARD PROPAGATION ) 相对于使用循环来编码,利用向量化的方法会使得计算更为简便。以上面的神经网络为例,试着计算第二层的值:

这只是针对训练集中一个训练实例所进行的计算。如果我们要对整个训练集进行计算,我们需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。即:

为了更好了了解Neuron Networks的工作原理,我们先把左半部分遮住:

右半部分其实就是以, 按照Logistic Regression的方式输出:

logistic regression ——逻辑回归

我们可以 a0,a1,a2,a3 把看成更为高级的特征值,也就是 x0,x1,x2,x3 的进化体,并且它们是由 x 与 theta 决定的,因为是梯度下降的,所以是变化的,并且变得越来越厉害,所以这些更高级的特征值远比仅仅将 次方厉害,也能更好的预测新数据。

这就是神经网络相比于逻辑回归和线性回归的优势。

~o给喜欢机器学习的同学们的福利o~

《斯坦福大学吴恩达机器学习讲义》

本文分享自微信公众号 - ACM算法日常(acm-clan)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第一篇:《机器学习之入门初探》

    这是一篇帮助你了解和理解机器学习、神经网络、深度学习相关概念的文章,如果你对智能领域感兴趣并且想要未来投身AI方向的话,希望你可以耐下心来理解这些概念,以及我...

    ACM算法日常
  • 第十一篇:《机器学习之神经网络(五)》

    在上一节中,我们谈到了怎样使用反向传播算法计算代价函数的导数。在本节中,我想快速地向你介绍一个细节的实现过程,怎样把你的参数从矩阵展开成向量,以便我们在高级最优...

    ACM算法日常
  • Facebook面试官:如何突围大厂算法面试?

    “给你a、b两个文件,他们各存放50亿条URL,其中每条URL各占用64字节,内存限制是4G,请你编写代码找出a、b文件中相同的URL”。这是某家大公司在201...

    ACM算法日常
  • 跨环境测试框架介绍-pytest的高级用法

    本文将介绍针对测试和生产等不同测试环境下,维护一套可读性,追溯性强的测试用例的工具-pytest。

    Eli Qiao
  • Java的装箱和拆箱,你掌握到了第几层?

    自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到...

    黄泽杰
  • 深入剖析Java中的装箱和拆箱

    深入剖析Java中的装箱和拆箱   自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本...

    Ryan-Miao
  • Python sympy 模块常用功能(三)

    注意,添加行或列是非原位操作(do not operate in place), 不改变原来的矩阵,返回一个新的矩阵。

    用户6021899
  • 神经网络和深度学习(三) ——浅层神经网络的表示与输出

    神经网络和深度学习(三)——浅层神经网络的表示与输出 (原创内容,转载请注明来源,谢谢) 一、神经网络的表示 神经网络,实质上是一些输入,经过多层神经元的处理...

    用户1327360
  • Unity3D高级-AssetBundle使用

    我们经常下载一些游戏App,如果Wifi情况下,App大小就无关紧要。但是如果是流量呢?一看到App的大小,直接就不下了。但是游戏公司怎么会不知道?所以采用热更...

    雷潮
  • Java中的四舍五入

    大概在小学的时候我们就学过四舍五入, 不过在编程语言中这个概念跟我们所熟悉的算法有点出入。 如果面试中考察你对Math.round()的用法,不知道能不能准确答...

    PhoenixZheng

扫码关注云+社区

领取腾讯云代金券