一文详解神经网络模型

简介: 一文详解神经网络模型

1

Motivation

在之前的机器学习基石课程中,我们就接触过Perceptron模型了,例如PLA算法。Perceptron就是在矩gt(x)外面加上一个sign函数,取值为{-1,+1}。现在,如果把许多perceptrons线性组合起来,得到的模型G就如下图所示:

image.png

将左边的输入(x0,x1,x2,⋯,xd)与T个不同的权重(w1,w2,⋯,wT)相乘(每个wi是d+1维的),得到T个不同的perceptrons为(g1,g2,⋯,gT)。最后,每个gt给予不同的权重(α1,α2,⋯,αT),线性组合得到GG也是一个perceptron模型。


从结构上来说,上面这个模型包含了两层的权重,分别是wtα。同时也包含了两层的sign函数,分别是gtG。那么这样一个由许多感知机linear aggregation的模型能实现什么样的boundary呢?


举个简单的例子,如下图所示,g1g2分别是平面上两个perceptrons。其中,红色表示-1,蓝色表示+1。这两个perceptrons线性组合可能得到下图右侧的模型,这表示的是g1g2进行与(AND)的操作,蓝色区域表示+1。

image.png

如何通过感知机模型来实现上述的AND(g1,g2)逻辑操作呢?一种方法是令第二层中的α0=−1,α1=+1,α2=+1。这样,G(x)就可表示为:

image.png

这个例子说明了一些简单的线性边界,如上面的g1g2,在经过一层感知机模型,经线性组合后,可以得到一些非线性的复杂边界(AND运算)G(x)


除此之外,或(OR)运算和非(NOT)运算都可以由感知机建立相应的模型,非常简单。


所以说,linear aggregation of perceptrons实际上是非常powerful的模型同时也是非常complicated模型。再看下面一个例子,如果二维平面上有个圆形区域,圆内表示+1,圆外表示-1。这样复杂的圆形边界是没有办法使用单一perceptron来解决的。如果使用8个perceptrons,用刚才的方法线性组合起来,能够得到一个很接近圆形的边界(八边形)。如果使用16个perceptrons,那么得到的边界更接近圆形(十六边形)。因此,使用的perceptrons越多,就能得到各种任意的convex set,即凸多边形边界。之前我们在机器学习基石中介绍过,convex set的VC Dimension趋向于无穷大(2的N次方)。这表示只要perceptrons够多,我们能得到任意可能的情况,可能的模型。但是,这样的坏处是模型复杂度可能会变得很大,从而造成过拟合(overfitting)。

image.png

总的来说,足够数目的perceptrons线性组合能够得到比较平滑的边界和稳定的模型,这也是aggregation的特点之一。


但是,也有单层perceptrons线性组合做不到的事情。例如刚才我们将的AND、OR、NOT三种逻辑运算都可以由单层perceptrons做到,而如果是异或(XOR)操作,就没有办法只用单层perceptrons实现。这是因为XOR得到的是非线性可分的区域,如下图所示,没有办法由g1g2线性组合实现。所以说linear aggregation of perceptrons模型的复杂度还是有限制的。

image.png

那么,为了实现XOR操作,可以使用多层perceptrons,也就是说一次transform不行,我们就用多层的transform,这其实就是Basic Neural Network的基本原型。下面我们就尝试使用两层perceptrons来实现XOR的操作。


首先,根据布尔运算,异或XOR操作可以拆分成:

image.png

image.png

顺便提一下,这里所说的感知机模型实际上就是在模仿人类的神经元模型(这就是Neural Network名称的由来)。感知机模型每个节点的输入就对应神经元的树突dendrite,感知机每个节点的输出就对应神经元的轴突axon。


2  Neural Network Hypothesis


上一部分我们介绍的这种感知机模型其实就是Neural Network。输入部分经过一层一层的运算,相当于一层一层的transform,最后通过最后一层的权重,得到一个分数score。即在OUTPUT层,输出的就是一个线性模型。得到s后,下一步再进行处理。

image.png

我们之前已经介绍过三种线性模型:linear classification,linear regression,logistic regression。那么,对于OUTPUT层的分数s,根据具体问题,可以选择最合适的线性模型。如果是binary classification问题,可以选择linear classification模型;如果是linear regression问题,可以选择linear regression模型;如果是soft classification问题,则可以选择logistic regression模型。本节课接下来将以linear regression为例,选择squared error来进行衡量。

image.png

上面讲的是OUTPUT层,对于中间层,每个节点对应一个perceptron,都有一个transform运算。上文我们已经介绍过的transformation function是阶梯函数sign()。那除了sign()函数外,有没有其他的transformation function呢?


如果每个节点的transformation function都是线性运算(跟OUTPUT端一样),那么由每个节点的线性模型组合成的神经网络模型也必然是线性的。这跟直接使用一个线性模型在效果上并没有什么差异,模型能力不强,反而花费了更多不必要的力气。所以一般来说,中间节点不会选择线性模型。


如果每个节点的transformation function都是阶梯函数(即sign()函数)。这是一个非线性模型,但是由于阶梯函数是离散的,并不是处处可导,所以在优化计算时比较难处理。所以,一般也不选择阶梯函数作为transformation function。


既然线性函数和阶梯函数都不太适合作为transformation function,那么最常用的一种transformation function就是tanh(s),其表达式如下:

image.png

tanh(s)函数是一个平滑函数,类似“s”型。当|s|比较大的时候,tanh(s)与阶梯函数相近;当|s|比较小的时候,tanh(s)与线性函数比较接近。从数学上来说,由于处处连续可导,便于最优化计算。而且形状上类似阶梯函数,具有非线性的性质,可以得到比较复杂强大的模型。


顺便提一下,tanh(x)函数与sigmoid函数存在下列关系:

image.png

那么,接下来我们就使用tanh函数作为神经网络中间层的transformation function,所有的数学推导也基于此。实际应用中,可以选择其它的transformation function,不同的transformation function,则有不同的推导过程。


下面我们将仔细来看看Neural Network Hypothesis的结构。如下图所示,该神经网络左边是输入层,中间两层是隐藏层,右边是输出层。整体上来说,我们设定输入层为第0层,然后往右分别是第一层、第二层,输出层即为第3层。

image.png

image.png

介绍完Neural Network Hypothesis的结构之后,我们来研究下这种算法结构到底有什么实际的物理意义。还是看上面的神经网络结构图,每一层输入到输出的运算过程,实际上都是一种transformation,而转换的关键在于每个权重值。每层网络利用输入x和权重w的乘积,在经过tanh函数,得到该层的输出,从左到右,一层一层地进行。其中,很明显,x和w的乘积越大,那么tanh(wx)就会越接近1,表明这种transformation效果越好。再想一下,w和x是两个向量,乘积越大,表明两个向量内积越大,越接近平行,则表明w和x有模式上的相似性。从而,更进一步说明了如果每一层的输入向量x和权重向量w具有模式上的相似性,比较接近平行,那么transformation的效果就比较好,就能得到表现良好的神经网络模型。也就是说,神经网络训练的核心就是pattern extraction,即从数据中找到数据本身蕴含的模式和规律。通过一层一层找到这些模式,找到与输入向量x最契合的权重向量w,最后再由G输出结果。

image.png


3   Neural Network Learning


image.png

image.png

image.png

image.png

image.png

神经网络中,这种从后往前的推导方法称为Backpropagation Algorithm,即我们常常听到的BP神经网络算法。它的算法流程如下所示:

image.png

上面采用的是SGD的方法,即每次迭代更新时只取一个点,这种做法一般不够稳定。所以通常会采用mini-batch的方法,即每次选取一些数据,例如N/10,来进行训练,最后求平均值更新权重w。这种做法的实际效果会比较好一些。


4  Optimization and Regularization


经过以上的分析和推导,我们知道神经网络优化的目标就是让Ein(w)最小化。本节课我们采用error measure是squared error,当然也可以采用其它的错误衡量方式,只要在推导上做稍稍修改就可以了,此处不再赘述。

image.png

下面我们将主要分析神经网络的优化问题。由于神经网络由输入层、多个隐藏层、输出层构成,结构是比较复杂的非线性模型,因此Ein(w)可能有许多局部最小值,是non-convex的,找到全局最小值(globalminimum)就会困难许多。而我们使用GD或SGD算法得到的很可能就是局部最小值(local minimum)。

image.png

下面从理论上看一下神经网络模型的VC Dimension。对于tanh这样的transfer function,其对应的整个模型的复杂度dvc=O(VD)。其中V是神经网络中神经元的个数(不包括bias点),D表示所有权值的数量。所以,如果V足够大的时候,VC Dimension也会非常大,这样神经网络可以训练出非常复杂的模型。但同时也可能会造成过拟合overfitting。所以,神经网络中神经元的数量V不能太大。


为了防止神经网络过拟合,一个常用的方法就是使用regularization。之前我们就介绍过可以在error function中加入一个regularizer,例如熟悉的L2 regularizer Ω(w)

image.png

image.png

除了weight-elimination regularizer之外,还有另外一个很有效的regularization的方法,就是Early Stopping。简而言之,就是神经网络训练的次数t不能太多。因为,t太大的时候,相当于给模型寻找最优值更多的可能性,模型更复杂,VC Dimension增大,可能会overfitting。而t不太大时,能有效减少VC Dimension,降低模型复杂度,从而起到regularization的效果。EinEtest随训练次数t的关系如下图右下角所示:

image.png

那么,如何选择最佳的训练次数t呢?可以使用validation进行验证选择。


5   Summary


image.png

相关文章
|
7月前
|
C++
基于Reactor模型的高性能网络库之地址篇
这段代码定义了一个 InetAddress 类,是 C++ 网络编程中用于封装 IPv4 地址和端口的常见做法。该类的主要作用是方便地表示和操作一个网络地址(IP + 端口)
348 58
|
7月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
258 2
|
7月前
基于Reactor模型的高性能网络库之Tcpconnection组件
TcpConnection 由 subLoop 管理 connfd,负责处理具体连接。它封装了连接套接字,通过 Channel 监听可读、可写、关闭、错误等
206 1
|
7月前
|
JSON 监控 网络协议
干货分享“对接的 API 总是不稳定,网络分层模型” 看电商 API 故障的本质
本文从 OSI 七层网络模型出发,深入剖析电商 API 不稳定的根本原因,涵盖物理层到应用层的典型故障与解决方案,结合阿里、京东等大厂架构,详解如何构建高稳定性的电商 API 通信体系。
|
9月前
|
域名解析 网络协议 安全
计算机网络TCP/IP四层模型
本文介绍了TCP/IP模型的四层结构及其与OSI模型的对比。网络接口层负责物理网络接口,处理MAC地址和帧传输;网络层管理IP地址和路由选择,确保数据包准确送达;传输层提供端到端通信,支持可靠(TCP)或不可靠(UDP)传输;应用层直接面向用户,提供如HTTP、FTP等服务。此外,还详细描述了数据封装与解封装过程,以及两模型在层次划分上的差异。
2045 13
|
9月前
|
网络协议 中间件 网络安全
计算机网络OSI七层模型
OSI模型分为七层,各层功能明确:物理层传输比特流,数据链路层负责帧传输,网络层处理数据包路由,传输层确保端到端可靠传输,会话层管理会话,表示层负责数据格式转换与加密,应用层提供网络服务。数据在传输中经过封装与解封装过程。OSI模型优点包括标准化、模块化和互操作性,但也存在复杂性高、效率较低及实用性不足的问题,在实际中TCP/IP模型更常用。
1205 10
|
4月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
5月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
382 2
|
5月前
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
141 8
|
7月前
基于Reactor模型的高性能网络库之Poller(EpollPoller)组件
封装底层 I/O 多路复用机制(如 epoll)的抽象类 Poller,提供统一接口支持多种实现。Poller 是一个抽象基类,定义了 Channel 管理、事件收集等核心功能,并与 EventLoop 绑定。其子类 EPollPoller 实现了基于 epoll 的具体操作,包括事件等待、Channel 更新和删除等。通过工厂方法可创建默认的 Poller 实例,实现多态调用。
375 60