神经网络概述

神经元模型

以上就是经典的“M-P神经元模型”。在这个模型中,神经元接收来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将于神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出。

感知机

感知机(Perceptron)是由两层神经元组成,输入层接收外界输出信号后传递给输出层,输出层是M-P神经元,也称为“阈值逻辑单元”。

感知机能够很容易的实现逻辑与、或、非运算,但是由于其只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,所以学习能力非常有限。此时就产生了多层感知机(MLP)来处理这些更加复杂的运算。

对于以上的感知机,我们可以建立模型:

f(x)=act(θT+b)

f(x)=act(θ^T+b)
其中激活函数 act 可以使用{sign, sigmoid, tanh}之一,个人感觉这种建模方式就是将每个神经元的输入作为笛卡尔坐标系中的x轴的值,对应的输出值作为y轴上的值,通过这些已知的训练集合中的值来进行拟合,根据训练集在坐标系中的分布特征来选择不同的激活函数,也即是拟合方式的不同,就比如下面的线性回归,逻辑回归以及softmax回归。

  • 激活函数使用符号函数 sign ,可求解损失函数最小化问题,通过梯度下降确定参数
  • 激活函数若使用一次多项式进行拟合,就成为了线性回归,但是一般不用此种回归方法来拟合。
  • 激活函数使用 sigmoid (或者 tanh ),即解决的问题为二分问题,则分类器事实上成为Logistic Regression,可通过梯度上升极大化似然函数,或者梯度下降极小化损失函数,来确定参数。
  • 如果需要多分类,则事实上成为Softmax Regression。
  • 如要需要分离超平面恰好位于正例和负例的正中央,则成为支持向量机(SVM)。

多层感知机

感知机存在的问题是,对线性可分数据工作良好,如果设定迭代次数上限,则也能一定程度上处理近似线性可分数据。但是对于非线性可分的数据,比如最简单的异或问题,感知器就无能为力了。这时候就需要引入多层感知器这个大杀器。

多层感知器的思路是,尽管原始数据是非线性可分的,但是可以通过某种方法将其映射到一个线性可分的高维空间中,从而使用线性分类器完成分类。下面卷积神经网络概述神经网络的大体结构图中,从X到O这几层,正展示了多层感知器的一个典型结构,即输入层-隐层-输出层。

输入层-隐层
是一个全连接的网络,即每个输入节点都连接到所有的隐层节点上。更详细地说,可以把输入层视为一个向量 x ,而隐层节点 j有一个权值向量θj\theta_j以及偏置bjb_j,激活函数使用 sigmoid 或 tanh ,那么这个隐层节点的输出应该是

fj(x)=act(θTjx+bj)

f_j(x) = act(\theta_j^Tx + b_j)
也就是每个隐层节点都相当于一个感知器。每个隐层节点产生一个输出,那么隐层所有节点的输出就成为一个向量,即

f(x)=act(Θx+b)

f(x) = act({\Theta}x + b)
若输入层有 mm个节点,隐层有nn个节点,那么 Θ=[θT]\Theta = [\theta^T]为 n×mn×m的矩阵, xx为长为mm的向量, bb为长为nn的向量,激活函数作用在向量的每个分量上, f(x)f(x)返回一个向量。

隐层-输出层
可以视为级联在隐层上的一个感知器。若为二分类,则常用Logistic Regression;若为多分类,则常用Softmax Regression。

解决非线性最优问题的常见算法

为讨论下面几种算法,采用最简单的线性回归作为例子。相关的参数如下(一般机器学习中都相关问题都是采用下列的参数):
nn:训练集合的特征数量,例如房价预测中的房子的大小和卧室的数量
mm:训练样本的数量
xx:输入变量/特征
yy:输出变量/特征
(x,y)(x,y):训练样例
ithi^{th}:训练样例的组数,表示为:(x(i),y(i))(x^{(i)},y^{(i)})
h(x)h(x):拟合函数
J(x)J(x):损失函数


此处注意上面推出的这个迭代式,下面要与逻辑回归中推出的迭代式进行比较
(3)随机梯度下降法(stochastic gradient descent,SGD)
SGD是最速梯度下降法的变种。
使用最速梯度下降法,将进行N次迭代,直到目标函数收敛,或者到达某个既定的收敛界限。每次迭代都将对m个样本进行计算,计算量大。
为了简便计算,SGD每次迭代仅对一个样本计算梯度,直到收敛。伪代码如下(以下仅为一个loop,实际上可以有多个这样的loop,直到收敛):

1、由于SGD每次迭代只使用一个训练样本,因此这种方法也可用作online learning。
2、每次只使用一个样本迭代,若遇上噪声则容易陷入局部最优解。
(4)牛顿法

(5)高斯牛顿法
以上两种方法的详细数学推导 http://blog.csdn.net/jinshengtao/article/details/51615162

线性回归和逻辑回归

线性回归的一个具体实现可以从上面解决非线性最优问题的常见算法的例子里学习,下面首先给出一个对于线性回归的一个可能的解释。

Probabilistic Interpretation



局部加权回归(Locally weight regression,Loess/Lowess)


逻辑回归(Logistic Regression)

误差逆传播(BP)算法

通过以上的介绍我们弄清楚了神经网络的结构,常见的神经网络有多层前馈网络(每层神经元与下一层神经元全连接,神经元之间不存在同层连接,也不存在跨层连接),下面就是介绍训练类似的多层网络(即估计权重和阈值这些参数)的方法了。对于一般的问题,可以通过求解损失函数极小化问题来进行参数估计。但是对于多层感知器中的隐层,因为无法直接得到其输出值,当然不能够直接使用到其损失了。这时,就需要将损失从顶层反向传播(Back Propagate)到隐层,来完成参数估计的目标。

首先,我们给出下面的BP网络(用BP算法训练的多层前馈神经网络):

给定训练集D=(x1,y1),(x2,y2),……,(xm,ym),xi∈Rd,yi∈RlD={(x_1,y_1),(x_2,y_2),……,(x_m,y_m)},x_i∈R^d,y_i∈R^l,即输入示例由dd个属性描述,输出ll维实值向量。为了便于讨论,上图给出了一个拥有dd个神经元、ll个输出神经元、qq个隐层神经元的多层前馈网络结构,其中输出层第jj个神经元的阈值用θjθ_j表示,隐层第hh个神经元的阈值用γhγ_h表示。输出层第ii个神经元与隐层第hh个神经元之间的连接权为νihν_{ih},隐层第hh个神经元与输出层第jj个神经元之间的连接权为ωhjω_{hj}。记隐层第hh个神经元接收到的输入为αh=∑i=1dνihxiα_h=\sum_d^{i=1}ν_{ih}x_i,输出层第jj个神经元接收到的输入为βj=∑qh=1ωhjbhβ_j=\sum_{h=1}^qω_{hj}b_h,其中bhb_h为隐层第hh个神经元的输出。假设隐层和输出层神经元都使用sigmoid函数。
具体推导过程如下两张图片所示:

最后补充几个常用的激活函数的导数结果:

f′(x)f′(x)f′(x)=sigmoid′(x)=f(x)(1−f(x))=tanh′(x)=1−f2(x)=softmax′(x)=f(x)−f2(x)\begin {aligned}f'(x) & = sigmoid'(x) = f(x)(1 - f(x))\\ f'(x) & = tanh'(x) = 1 - f^2(x)\\ f'(x) & = softmax'(x) = f(x) - f^2(x) \end{aligned}

将以上的数学推导过程转化成伪代码为:

卷积神经网络概述

卷积神经网络沿用了普通的神经元网络即多层感知器的结构,是一个前馈网络(网络拓扑结构上不存在环或者回路)。以应用于图像领域的CNN为例,大体结构如下图所示:

很明显,这个典型的结构分为四个大层次:

  • 输入图像I。为了减小复杂度,一般使用灰度图像。当然,也可以使用RGB彩色图像,此时输入图像有三张,分别为RGB分量。输入图像一般需要归一化,如果使用sigmoid激活函数,则归一化到[0, 1],如果使用tanh激活函数,则归一化到[-1, 1]。
  • 多个卷积(C)-下采样(S)层。将上一层的输出与本层权重W做卷积得到各个C层,然后下采样(池化)得到各个S层。这些层的输出称为Feature Map。
  • 光栅化(X)。是为了与传统的多层感知器全连接。即将上一层的所有Feature Map的每个像素依次展开,排成一列。
  • 传统的多层感知器(N&O)。最后的分类器一般使用Softmax Regression(针对多分类问题),如果是二分类,当然也可以使用Logistic Regression。

根据上面的基本结构,我们就逐层进行分析。

卷积层和下采样层

以上介绍的多层感知机存在一定的问题,它是一个全连接的网络,因此在输入比较大的时候,权值会特别多。比如一个有1000个节点的隐层,连接到一个1000×1000的图像上,那么就需要 10^9 个权值参数(外加1000个偏置参数)!这个问题,一方面限制了每层能够容纳的最大神经元数目,另一方面也限制了多层感知器的层数即深度。
多层感知器的另一个问题是梯度发散。一般情况下,我们需要把输入归一化,而每个神经元的输出在激活函数的作用下也是归一化的;另外,有效的参数其绝对值也一般是小于1的;这样,在BP过程中,多个小于1的数连乘,得到的会是更小的值。也就是说,在深度增加的情况下,从后传播到前边的残差会越来越小,甚至对更新权值起不到帮助,从而失去训练效果,使得前边层的参数趋于随机化(补充一下,其实随机参数也是能一定程度上捕捉到图像边缘的)。
有关神经网络训练过程中梯度的有关问题可以详细见:
https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap5/c5s0.html

既然多层感知器存在问题,那么卷积神经网络的出现,就是为了解决它的问题。卷积神经网络的核心出发点有三个。

  • 局部感受野。形象地说,就是模仿你的眼睛,想想看,你在看东西的时候,目光是聚焦在一个相对很小的局部的吧?严格一些说,普通的多层感知器中,隐层节点会全连接到一个图像的每个像素点上,而在卷积神经网络中,每个隐层节点只连接到图像某个足够小局部的像素点上,从而大大减少需要训练的权值参数。举个栗子,依旧是1000×1000的图像,使用10×10的感受野,那么每个神经元只需要100个权值参数;不幸的是,由于需要将输入图像扫描一遍,共需要991×991个神经元!参数数目减少了一个数量级,不过还是太多。
  • 权值共享。形象地说,就如同你的某个神经中枢中的神经细胞,它们的结构、功能是相同的,甚至是可以互相替代的。也就是,在卷积神经网中,同一个卷积核内,所有的神经元的权值是相同的,从而大大减少需要训练的参数。继续上一个栗子,虽然需要991×991个神经元,但是它们的权值是共享的呀,所以还是只需要100个权值参数,以及1个偏置参数。从MLP的 10^9 到这里的100,就是这么狠!作为补充,在CNN中的每个隐藏,一般会有多个卷积核。
  • 池化。形象地说,你先随便看向远方,然后闭上眼睛,你仍然记得看到了些什么,但是你能完全回忆起你刚刚看到的每一个细节吗?同样,在卷积神经网络中,没有必要一定就要对原图像做处理,而是可以使用某种“压缩”方法,这就是池化,也就是每次将原图像卷积后,都通过一个下采样的过程,来减小图像的规模。以最大池化(Max Pooling)为例,1000×1000的图像经过10×10的卷积核卷积后,得到的是991×991的特征图,然后使用2×2的池化规模,即每4个点组成的小方块中,取最大的一个作为输出,最终得到的是496×496大小的特征图。

更加生动形象的对于这三个问题的解释可以参考以下的文章:
http://blog.csdn.net/stdcoutzyx/article/details/41596663/

现在来看,需要训练参数过多的问题已经完美解决。关于梯度发散,因为多个神经元共享权值,因此它们也会对同一个权值进行修正,积少成多,积少成多,积少成多,从而一定程度上解决梯度发散的问题!

接下来有关卷积的问题可以参考下面这两篇文章:
卷积神经网络全面解析(之前的很多内容也是参考这篇文章里面的)
以及一些有关图像语义分割的反卷积的知识:图像卷积与反卷积

Softmax Regression

指数分布族(The Exponential Family)

如果一个分布可以用如下公式表达,那么这个分布就属于指数分布族:

p(y;η)=b(y)exp(ηTT(y)−a(η))

p(y;η)=b(y)exp(η^TT(y)-a(η))
公式中y是随机变量;
η称为分布的自然参数(natural parameter),也称为标准参数(canonical parameter);
T(y)称为充分统计量,通常情况下T(y)=y;
a(η)称为对数分割函数(log partition function),本质上是一个归一化常数,确保概率和为1。

当T(y)被固定时,a(η)、b(y)就定义了一个以η为参数的一个指数分布。我们变化η就得到不同的概率分布。
在T(y)=yT(y)=y的通常情况下,η也仅仅是个实数,所以ηTT(y)η^TT(y)也是实数。

下面是几个小例子:

广义线性模型(GLM)

在分类和回归问题中,我们通过构建一个关于x的模型来预测y。这种问题可以利用广义线性模型(Generalized linear models,GMLs)来解决。构建广义线性模型我们基于三个假设,也可以理解为我们基于三个设计决策,这三个决策帮助我们构建广义线性模型:

  1. y|x;θ∽ExponentialFamily(η)y|x;θ∽ExponentialFamily(η),假设y|x;θy|x;θ满足一个以为参数的指数分布。例如,给定了输入x和参数θ,那么可以构建y关于η的表达式。
  2. 给定x,我们的目标是要确定T(y),即h(x)=E[T(y)|x]h(x)=E[T(y)|x]。大多数情况下T(y)=yT(y)=y,那么我们实际上要确定的是。即给定x,假设我们的目标函数是h(x)=E[T(y)|x]h(x)=E[T(y)|x]。
  3. 假设自然参数η和x是线性相关,即假设:η=θTxη=θ^Tx。

相关问题可以参考:
http://www.cnblogs.com/BYRans/p/4735409.html

多分类问题
多分类问题符合多项分布。有许多算法可用于解决多分类问题,像决策树、朴素贝叶斯等。这篇文章主要讲解多分类算法中的Softmax回归(Softmax Regression)

推导思路为:首先证明多项分布属于指数分布族,这样就可以使用广义线性模型来拟合这个多项分布,由广义线性模型推导出的目标函数hθ(x)h_θ(x)即为Softmax回归的分类模型。

上面的推导过程是参考:http://www.cnblogs.com/BYRans/p/4905420.html这篇博文的,有关于Softmax回归的更多问题可以看:
Softmax回归

至此,整个卷积神经网络的相关知识就总结完了,其中参考了很多大牛们的博客,写这篇博客也是为了自己总结梳理相关的知识,本人的能力有限,如有错误的地方还请大家留言指正。

卷积神经网络(CNN)相关知识以及数学推导相关推荐

  1. 卷积神经网络(CNN)基础知识

    文章目录 卷积神经网络基础知识 卷积与互相关 卷积 一维卷积 二维卷积 互相关 填充与步幅 填充 步幅 卷积神经网络结构和原理详解(见下节) 卷积神经网络基础知识 卷积神经网络(Convolution ...

  2. 卷积神经网络(CNN)讲解及代码(基于matlab)

    经典反向传播算法公式详细推导 卷积神经网络(CNN)反向传播算法公式详细推导 网上有很多关于CNN的教程讲解,在这里我们抛开长篇大论,只针对代码来谈.本文用的是matlab编写的deeplearnin ...

  3. 【 卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10)】

    卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10) 本章主要进行卷积神经网络的相关数学原理和pytorch的对应模块进行推导分析 代码也是通过demo实 ...

  4. 卷积神经网络CNN各层基本知识

    卷积神经网络 卷积神经网络(CNN)由输入层.卷积层.激活函数.池化层以及全连接层构成. INPUT(输入层)-CONV(卷积层)-RELU(激活函数)-POOL(池化层)-FC(全连接层) 简单来说 ...

  5. CV:计算机视觉技术之图像基础知识(二)—以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础)

    CV:计算机视觉技术之图像基础知识(二)-以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础) 目录 ...

  6. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(1)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  7. CNN---用于图像分类的经典的卷积神经网络CNN

    文章目录 概览 1.计算机视觉简介: 2.图像分类 一.LeNet-5 1.模型架构 2.模型简介 3.模型特点 二.AlexNet 1.网络架构 2.模型介绍 3.模型特点 三.VGGNet 1.模 ...

  8. 机器学习|卷积神经网络(CNN) 手写体识别 (MNIST)入门

    人工智能,机器学习,监督学习,神经网络,无论哪一个都是非常大的话题,都覆盖到可能就成一本书了,所以这篇文档只会包含在 RT-Thread 物联网操作系统,上面加载 MNIST 手写体识别模型相关的部分 ...

  9. python卷积神经网络cnn的训练算法_【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理...

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

最新文章

  1. Internet Explorer 11 Enterprise Mode 排错
  2. CISCO协议总结大全
  3. PIC模拟从入门到熟练系列之组会PPT20210913《Note of PIC》
  4. java普通类获取session_springboot普通类中如何获取session?
  5. 时序分析:使用卡尔曼滤波
  6. Leetcode--字符串压缩
  7. centos7.2下查看的java版本号
  8. 【推荐实践】58招聘推荐排序算法实战与探索
  9. HDU2569 彼岸【打表+记忆化递归】
  10. 一些Iphone sqlite 的包装类
  11. 车联网行业报告及摘要
  12. 《生物化学与分子生物学》----绪论----听课笔记(一)
  13. webpack工具知多少(上篇)
  14. 【AI语音】魔百盒M301H-JL代工-3798MV300芯片-支持蓝牙_免费固件包
  15. 联想c245如何使用html,Windows 8的驱动是否能给Windows 8.1用
  16. 简单枚举 / 枚举排列
  17. POJ 2509 Peter's smokes
  18. Coursera | Applied Data Science with Python 专项课程 | Applied Machine Learning in Python
  19. 贪心算法(Greedy )
  20. GPA Involution

热门文章

  1. 用python写跑酷游戏脚本,用Python写一个天天酷跑
  2. python把标签图例放图外的下面 自动放在外侧
  3. 三维立体切块效果制作
  4. 在线淘礼金免单采集网网站源码
  5. android sutdio导入源码教程,《AndroidStudio导入安卓源码-idegen》---可方便查看安卓源代码...
  6. qps、tps、吞吐量
  7. 《三国演义》醉酒误事Top10
  8. 物联网设备数据流转之数据如何实时推送至前端:WebSocket前端接收
  9. Qt学习 第21节:窗口初始化EVENT
  10. 安卓7.0核心破解示列