【HowTo ML】分类问题->神经网络入门

非线性分类器(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的就是这种感觉).

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

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

时间: 2024-10-06 00:22:31

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

反向传播神经网络入门

http://www.hankcs.com/ml/back-propagation-neural-network.html 单个神经元 神经网络是多个"神经元"(感知机)的带权级联,神经网络算法可以提供非线性的复杂模型,它有两个参数:权值矩阵{Wl}和偏置向量{bl},不同于感知机的单一向量形式,{Wl}是复数个矩阵,{bl}是复数个向量,其中的元素分别属于单个层,而每个层的组成单元,就是神经元. 神经元 神经网络是由多个"神经元"(感知机)组成的,每个神经元图示如

神经网络入门介绍(非常易懂)

//2019.09.10神经网络入门与学习1.神经网络的发展主要得益于三个方面的进步:(1)2进制的创新能力的发展(2)软硬件能力的发展;(3)人的性价比的下降.2.神经网络的成熟应用目前主要体现在分类识别上,具体来说可以分类到三个方面:(1)图像识别:主要用于人脸识别和自动驾驶:(2)语音识别:主要用于语音助手等:(3)文本识别:主要用于字体识别和新闻文本推送等. 图13.神经网络的结构主要包括四个方面:(1)网络结构(2)激励函数(3)损失函数(4)梯度下降 4.神经网络的网络结构主要如下所

神经网络入门游戏推荐BugBrain

今天看到一款神经网络入门游戏,BugBrain,在游戏中,你可以通过连接神经元,设置神经元阈值等建造虫子的大脑,让瓢虫.蠕虫.蚂蚁等完成各种任务.下载下来玩了玩,难度真不是入门级的= =!真心佩服作者的智商. 游戏官方主页 http://www.biologic.com.au/bugbrain/ (左下是蠕虫的大脑) (一个蚂蚁的大脑就如此复杂···) BugBrain游戏提供了一个非常不错的游戏地图编辑器,和测试平台.地图编辑器中玩家可以根据个人喜好,编辑你自己的虚拟世界,让你的小虫们生活在这

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

范例程序下载:http://files.cnblogs.com/gpcuster/ANN3.rar如果您有疑问,可以先参考 FAQ 如果您未找到满意的答案,可以在下面留言:) 0 目录人工神经网络入门(1) -- 单层人工神经网络应用示人工神经网络入门(2) -- 人工神经基本概念介绍人工神经网络入门(3) -- 多层人工神经网络应用示例人工神经网络入门(4) -- AForge.Net简介 1 介绍这篇文章中,我们将介绍一个用C#实现的框架AForge,利用这个框架,您可以方便地操作人工网络,

神经网络入门-用python实现一个两层神经网络并在CIFAR10数据集上调参

下面是我从cs231n上整理的神经网络的入门实现,麻雀虽小,五脏俱全,基本上神经网络涉及到的知识点都有在代码中体现. 理论看上千万遍,不如看一遍源码跑一跑. 源码上我已经加了很多注释,结合代码看一遍很容易理解. 最后可视化权重的图: 主文件,用来训练调参 two_layer_net.py 1 # coding: utf-8 2 3 # 实现一个简单的神经网络并在CIFAR10上测试性能 4 5 import numpy as np 6 import matplotlib.pyplot as pl

数学建模----分类----BP神经网络

1.former's experience reference:[1]https://www.cnblogs.com/babyfei/p/7003299.html?utm_source=itdadao&utm_medium=referral 2myself %两层的分类前反馈神经网络 %newff函数 主要tez*样品格式 %train训练函数 %训练数据集 clear; file = "";%路径 input_data= file(:,);%n*m:表示数据集*指标 outp

卷积神经网络入门(1) 识别猫狗

一下来自知乎 按照我的理解,CNN的核心其实就是卷积核的作用,只要明白了这个问题,其余的就都是数学坑了(当然,相比较而言之后的数学坑更难). 如果学过数字图像处理,对于卷积核的作用应该不陌生,比如你做一个最简单的方向滤波器,那就是一个二维卷积核,这个核其实就是一个模板,利用这个模板再通过卷积计算的定义就可以计算出一幅新的图像,新的图像会把这个卷积核所体现的特征突出显示出来.比如这个卷积核可以侦测水平纹理,那卷积出来的图就是原图水平纹理的图像. 现在假设要做一个图像的分类问题,比如辨别一个图像里是

傻瓜神经网络入门指南

现在网络上充斥着大量关于神经网络的消息,但是,什么是神经网络?其本质到底是什么?你是不是对这个熟悉又陌生的词感到困惑? 用几分钟阅读完这篇文章,我不能保证你能够成为这个领域的专家,但可以保证的是,你已经入门了. 什么是神经网络? 想要透彻的了解神经网络,我们首先要知道什么是机器学习.为了更好的理解机器学习,我们首先谈谈人的学习,或者说什么是"经典程序设计". 在经典的程序设计中,作为一名开发人员,我需要了解所要解决的问题的各个方面,以及我要以什么规则为基础. 举个例子来说,假设我要设计

神经网络入门——神经元算法

目前机器学习.深度学习在业界使用的越来越广泛,做为一个有着技术追求的it人,我觉得有必要学习和了解一下这块的知识,今天就从最简单的单层神经网络开始介绍. 在介绍人工神经网络之前,首先认知下神经元. 神经元 不知道大家还有印象这个图吗?这个是出现在我们生物课本中的一幅图. 一个神经元的组成基本就是上图这些东西组成. 通常一个神经元具有多个树突,主要用来接受传入信息信息,信息通过轴突传递进来后经过一系列的计算(细胞核)最终产生一个信号传递到轴突,轴突只有一条,轴突尾端有许多轴突末梢可以给其他多个神经