非线性分类器(Non-linear hypotheses)

为什么使用非线性分类器

我们举几个栗子:



假如我们有一个数据空间如左上角坐标系所看到的,那么我们要的模型须要如右边公式所看到的的预測函数.

如果有n个特征那么计算二次多项式就有O(n^2)的复杂度.n能有多大?

我们来看以下这个栗子.



如果我们须要识别汽车,假如选取图像上两个点,那么就如左边坐标系所看到的,这没什么.

但实际上我们须要的数据空间时整张图片全部的像素.也就是如果图像是50∗50那么我们就有2500个像素点.也就是须要2500个特征.

刚才说的是灰度图,如果时RGB的话时7500个,实际运用中也不仅仅50∗50 这么小.

综上所述,线性分类器肯定是不行的.

神经网络

神经网络是模拟人类的神经元时发明的.

神经网络的表示



一个神经元(Neuron)就是如图所看到的,他和我们的逻辑回归表示并没有什么差别.

Sigmoid Function叫做激励(activation)函数.

θ也被成为权重(weights)



神经网络由多个神经元连接而成,当中第一层被称为输入层(input layer);最后一层被称为输出层(output layer);其它的被称为隐藏层(Hidden layer).

记号

  • a(j)i:

    第j层第i个激励
  • Θ(j)(波矩阵?

    ):

    第 j 层到第 j+1 层的參数控制映射

我们通常使用Θ(j)矩阵来表示參数,表示方法如上所述.当中Θ的大小为(sj+1∗(sj+1),sj 为第j层激励的个数.

向量化(Vectorized)实现



我们能够将通过向量化来简化神经网络的计算.

我们能够把左下角图中Layer 2的Sigmoid函数提出,这样我们能够用Θ向量的形式表示出整个Layer 2.

也就是右边所看到的的过程.

写成一般形式就是:

Adda(i−1)0=1z(i)=Θ(i−1)a(i−1)a(i)=g(z(i))

我们循环运行这个步骤.直到输出层输出hΘ(x),这就是前向传播(Forward propagation).

架构(Architecture)



我们把神经元连接的方式叫做架构.

神经网络栗子



为了方便我们理解神经网络,这里有几个栗子.

假如我们有右边的数据空间,那么比較好的边界就是如图所看到的.

我们先简化数据为左边的图,也就是说我们须要训练一个模型求得左下的y式,非常复杂.



我们先来个简单的AND运算.如上图,如果我们的theta例如以下

θ=⎡⎣⎢⎢⎢⎢⎢⎢−30+20+20⎤⎦⎥⎥⎥⎥⎥⎥

那么就能预測出如真值表的值.

那么同理,我们就能训练出能求或与非的模型.那么我们要求XNOR运算怎么办?



这里我们来构建一个神经网络,每一个节点训练出不同的模型,达到不同的效果,最后达到输出层.

多类别分类

之前说过多类别分类问题採用(one vs all)



如果我们有4个类别须要识别,那么我们就有四个分类器.



每一个分类器的含义同之前,P(y=j|θ(i)j).

代价函数


Tips:

数据空间=

{(x(1),y(1)),(x(2),y(2)),⋯(x(m),y(m))}

L=网络层数

Sl=第l层神经元数.

在神经网络中,神经单元的代价函数就是逻辑回归中的代价函数的一般式.

hΘ(x)∈RK(hΘ(x))i=ithoutput
J(Θ)=−1m[∑i=1m∑k=1Ky(i)klog(hΘ(x(i)))k+(1−y(i)k)log(1−(hΘ(x(i)))k)]+λ2m∑l=1L−1∑i=1sl∑j=1sl+1(Θ(l)ji)2

解释一下:

hΘ(x)∈RK就是神经网络的输出在K维向量中,二元分类K就是1

(hΘ(x))i表示第i个输出.

y(i)klog(hΘ(x(i)))k中y是一个K维向量,yk就是第K维向量,如果这组样本属于第K组,那么yk就是1,vise varsa.

须要注意的是∑sl+1j=1中依然能够遵循”不把偏差项Θ(l)i0 (j=0)正规化”.

反向传播算法(Backpropagation Algorithm)

我们的目标是:

minΘJ(Θ)

为了找到这个Θ,我们须要计算:

  • J(Θ)
  • ∂∂Θ(l)ijJ(Θ)

当中J(Θ)我们已经知道了怎么计算.

那么我们须要计算的就是J(Θ)的偏导,这时候我们用到反向传播算法:

直观上来说就是对每一个节点计算δ(l)j(第l层第j个节点的误差).

如果我们有一个网络如图:



首先我们从输出节点開始求δ(4)

δ(4)j=a(4)j−yj.

变成向量化的形式:δ(4)=a(4)−y

然后往前倒推:

δ(l)=(Θ(l))Tδ(l+1).∗g′(z(l)),当中g′(z(l))=a(l).∗(1−a(l)).

直到l=1,输入层不须要计算误差.

那么忽略λ,需求偏导公式可变为:

∂∂Θ(l)ijJ(Θ)=a(l)jδ(l+1)i

实现



使用上述公式∂∂Θ(l)ijJ(Θ)=a(l)jδ(l+1)i须要使用a和δ.

我们引入Δ,Δ(l)ij是用于计算∂∂Θ(l)ijJ(Θ)的一个累加项.

对于每一组例子,

我们先用FP来计算a,再反向计算误差δ(l)

最后依照偏导项公式累加Δ,得到公式:

∂∂Θ(l)ijJ(Θ)=D(l)ij=1mΔ(l)ij+λΘ(l)(ij)

若将Δ向量化得到Δ(l):=Δ(l)+δ(l+1)(a(l))T.

矩阵向量化(Matrices “Unroll” into vectors)



fminunc这些高级函数在使用的时候须要传递向量,而Θ这样的却是矩阵.

我们能够把矩阵展开,来达到向量化的目的,然后在costFunction中重组Θ等矩阵.

梯度检測(Gradient Checking)

简单的说就是使用双側差分(two sided difference)求近似导数.



在神经网络中详细实现就是例如以下.



一般我们取ϵ≈10−3,然后检验上述所得向量(gradApprox)近似于DVec.

总结:

1. BP求DVec.

2. 求gradApprox.

3. 检測是否类似

4. 关闭检測(由于梯度检測非常慢),使用BP学习.

随机初始化(Random Initialization)

经过之前的学习,我们发现每一层的全部单元都会经过同样的训练.所以我们使用随机初始化来打破这样的对称性.

随机初始化指的是随机化初始的參数矩阵,使他们接近0却不全然同样.

总结

架构(Architecture)



- 输入单元数:特征空间维度.

- 输出单元数:类数

- 隐藏层:通常为一层,每层激励个数同样,数量选择时须要考虑输入输出层,通常稍大于输入层.

训练

  1. 随机初始化权重.
  2. FP求hΘ,也就是a.
  3. 计算代价函数J(Θ)
  4. BP求 ∂∂Θ(l)ijJ(Θ).
  5. 使用梯度检測比較BP所求∂∂Θ(l)ijJ(Θ),然后关闭梯度检測.
  6. 使用梯度下降等算法和BP求Θ(J(Θ)是非凸函数).

神经网络背景知识

起源

人们想要模拟大脑,由于大脑是最好的学习模型.

兴起与80s~90s,但随后衰退.可是今年由于数据量和计算速度的提高又变得兴起

思考

人类的大脑能学习非常多的东西,比方分辨事物,学习,计算,说话等等.

我们也能写非常多算法来模拟这些”任务”,实现该过程.可是大脑的学习应该是仅仅有一个学习算法的(The “one single learning algorithm” hypothesis).

实验(Neural Re-wired Experiment)



科学家把动物视神经切断,而把听觉神经连接到本来由视神经连接的位置(视觉皮层),最后发现动物能完毕视觉辨别任务.



左上角:在额头上佩戴灰度摄像机,数据输出到舌头的电极,刺激舌头.失明的人能在几十分钟内学会”看”.

右上角:人类声呐定位.通过打响指或者咂舌来制造声音,通过听觉来分辨回声,定位周围的物体(这是一种训练,手机上玩过一个游戏叫 Echo还是Dark Echo的就是这样的感觉).

左下角:蜂鸣腰带,朝向北时腰带蜂鸣非常强,使人类拥有鸟类的方向感(这个..恩..).

右下角:给青蛙按第三仅仅眼睛,青蛙能学着使用(卧槽,那岂不是给人类大脑接一个高清摄像头即可,学习量可能有点大吧)

【HowTo ML】分类问题->神经网络入门的更多相关文章

  1. 一位ML工程师构建深度神经网络的实用技巧

    一位ML工程师构建深度神经网络的实用技巧 https://mp.weixin.qq.com/s/2gKYtona0Z6szsjaj8c9Vg 作者| Matt H/Daniel R 译者| 婉清 编辑 ...

  2. ML(5)——神经网络1(神经元模型与激活函数)

    上一章介绍了使用逻辑回归处理分类问题.尽管逻辑回归是个非常好用的模型,但是在处理非线性问题时仍然显得力不从心,下图就是一个例子: 线性模型已经无法很好地拟合上面的样本,所以选择了更复杂的模型,得到了复 ...

  3. 在 TensorFlow 中实现文本分类的卷积神经网络

    在TensorFlow中实现文本分类的卷积神经网络 Github提供了完整的代码: https://github.com/dennybritz/cnn-text-classification-tf 在 ...

  4. 人工神经网络入门(4) —— AFORGE.NET简介

    范例程序下载:http://files.cnblogs.com/gpcuster/ANN3.rar如果您有疑问,可以先参考 FAQ 如果您未找到满意的答案,可以在下面留言:) 0 目录人工神经网络入门 ...

  5. 对于分类问题的神经网络最后一层的函数:sigmoid、softmax与损失函数

    对于分类问题的神经网络最后一层的函数做如下知识点总结: sigmoid和softmax一般用作神经网络的最后一层做分类函数(备注:sigmoid也用作中间层做激活函数): 对于类别数量大于2的分类问题 ...

  6. 神经网络入门游戏推荐BugBrain

    今天看到一款神经网络入门游戏.BugBrain.在游戏中,你能够通过连接神经元.设置神经元阈值等建造虫子的大脑,让瓢虫.蠕虫.蚂蚁等完毕各种任务.下载下来玩了玩,难度真不是入门级的= =! 真心佩服作 ...

  7. 在TensorFlow中实现文本分类的卷积神经网络

    在TensorFlow中实现文本分类的卷积神经网络 Github提供了完整的代码: https://github.com/dennybritz/cnn-text-classification-tf 在 ...

  8. ML(5)——神经网络3(随机初始化与梯度检验)

    随机初始化 在线性回归和逻辑回归中,使用梯度下降法之前,将θ设置为0向量,有时会习惯性的将神经网络中的权重全部初始化为0,然而这在神经网络中并不适用. 以简单的三层神经网络为例,将全部权重都设置为0, ...

  9. ML(5)——神经网络2(BP反向传播)

    上一章的神经网络实际上是前馈神经网络(feedforward neural network),也叫多层感知机(multilayer perceptron,MLP).具体来说,每层神经元与下一层神经元全 ...

随机推荐

  1. dSploitzANTI渗透教程之HTTP服务重定向地址

    dSploitzANTI渗透教程之HTTP服务重定向地址 HTTP服务 HTTP服务主要用于重定向地址的.当用户创建一个钓鱼网站时,可以通过使用HTTP服务指定,并通过实施中间人攻击,使客户端访问该钓 ...

  2. Java Maven:spring boot + Mybatis连接MySQL,通用mapper的增删改查,映射实现多表查询

    1. MySQL自带库test添加表user.role 角色表role 用户表user 2. 添加依赖,配置属性 相关依赖:百度即可,此处略 application.properties spring ...

  3. 【Codeforces528D】Fuzzy Search FFT

    D. Fuzzy Search time limit per test:3 seconds memory limit per test:256 megabytes input:standard inp ...

  4. Loj10167 HDU2089 不要62

    题目描述 杭州人称那些傻乎乎粘嗒嗒的人为 626262(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士 ...

  5. Loj10094 消息的传递

    题目描述 我们的郭嘉大大在曹操这过得逍遥自在,但是有一天曹操给了他一个任务,在建邺城内有 NNN 个袁绍的奸细,将他们从 111 到 NNN 进行编号,同时他们之间存在一种传递关系,即若Ci,j=1C ...

  6. Codeforces Round #358 (Div. 2) B. Alyona and Mex 水题

    B. Alyona and Mex 题目连接: http://www.codeforces.com/contest/682/problem/B Description Someone gave Aly ...

  7. SQL Server Management Studio 教程一:设置sa用户登录

    今天在net项目中添加数据库过程中出现了小问题,就是使用sql server身份验证没登录成功,经过一番调试,终于解决问题. 使用sa账户登录sql server 2008 的方法步骤如下: 1.首先 ...

  8. Xcode 小技巧

    1.手动添加 #warning ,在不确定的 bug.错误.待定代码处,手动添加 #warning 行,在编译时间提醒自己需要处理的地方. 2.由于 arrayWithObjects: 和 initW ...

  9. Jmeter学习之— 参数化、关联、断言、数据库的操作

    一. Jmeter参数化1. 文件参数化解释:创建测试数据,将数据写入TXT文件文件中,然后Jmeter从文件中读取数据.例如用户注册操作:1. 首先在Jmeter下创建一个线程组,如下图: 2. 然 ...

  10. 如何在java中跳出当前多重嵌套循环?有几种方法?

    如何在java中跳出当前多重嵌套循环?有几种方法? - 两种方法   - 1.在外层循环定义标记          ok:          for(int i=0;i<100;i++){    ...