开始学习神经网络(Neural Network)

已有线性与逻辑回归,为什么需要用到NN

实际的应用中,需要根据很多特征进行训练分类器,当今有两个特征下,可以通过下图表述:

然而还有太多的特征需要考虑,假设这里有100个特征,包含他们所有的相关项后可能会有5000个,这种计算量很显然是非常大的,当然你可以仅保存\(x_1^2、x_2^2....X_{100}^2\),此时仅100个,但此时拟合结果很有可能出现underfitting。

NN模型表示

我们来看看我们如何使用神经网络来表示一个假设函数。简单地,神经元基本上是计算单位,其将输入(树突)作为被输送到输出(轴突)的电输入(称为“尖峰”)。 在我们的模型中,我们的树突像输入特征\(x_1、x_2...x_n\),输出是我们假设函数的结果。 在这个模型中,我们的\(x_0\)输入节点有时被称为“偏置单元”。 它总是等于1。

这里我们依然利用\(\frac{1}{1+e^{-\theta^Tx}}\)作为我们的逻辑函数(logistic function),有时称为s形激励函数(sigmoid activation function)。这里的参数Theta也被称为权重“Weights”

我们的输入节点(第1层)也称为“输入层”,进入另一个节点(第2层),最终输出称为“输出层”的假设函数。在输入层与输出层之间的部分我们一般称为隐藏层。在这个例子中,我们标注这些中间层或“隐藏”层节点\(a_0^2...a_n^2\)并将其称为“激励单元”。

\(a_j^{(j)}\)称为第j层中的第i个单元,矩阵\(\Theta^{(j)}\)描述的是第j层到第j+1层权重。下图反应了仅包含一个隐藏层的情况:

每个节点的”激励“(activation)按照一下计算:

这就是说,我们使用3×4的参数矩阵来计算激活节点。 我们将每行参数应用到我们的输入,以获得一个激活节点的值。 我们的假设输出是应用于激活节点的值之和的逻辑函数,它们已经乘以包含第二层节点权重的另一个参数矩阵\(\Theta^{(2)}\)。

对于权重矩阵的维度:

如果网络在层j + 1中有和\(s_{j+1}\)单元,层j中具有\(s_j\)单元,则\(\Theta^{(j)}\)将为尺寸\(s_{j+1}\)×(\(s_j\) + 1)。

如:在第一层有2个输入单元,第二层有4个激励点,那么权重参数\(\Theta^{(1)}\)的维度为4×(2+1)=4×3。

总结如下图所示:

接下来,我们将对上述函数进行向量化实现。 我们要定义一个包含我们g函数内的参数的新变量\(z_k^{(j)}\)。 在我们前面的例子中,如果我们用变量z代替所有参数,我们将得到:

换句话说,对于层数J=2中的第k个节点,变量z有:

\(z_k^{(2)}=\Theta_{k,0}^{(1)}x_0+\Theta_{k,1}^{(1)}x_1+...\Theta_{k,n}^{(1)}x_n\)

用向量表示为:

将输入x设置为\(a^{(1)}\),有以下等式:

\(z^{(j)}=\Theta^{(j-1)}a^{(j-1)}\)

最后有:\(h_\Theta(x)=a^{(j+1)}=g(z^(j+1))\)

请注意,在最后一步中,在层j和层j + 1之间,我们的做法与我们在逻辑回归中完全一样。 在神经网络中添加所有这些中间层使我们能够更优雅地产生有趣和更复杂的非线性假设。

NN-Neural Network的更多相关文章

  1. Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1

    3.Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1 http://blog.csdn.net/sunbow0 ...

  2. Neural Network Toolbox使用笔记1:数据拟合

    http://blog.csdn.net/ljp1919/article/details/42556261 Neural Network Toolbox为各种复杂的非线性系统的建模提供多种函数和应用程 ...

  3. How to implement a neural network

    神经网络的实践笔记 link: http://peterroelants.github.io/posts/neural_network_implementation_part01/ 1. 生成训练数据 ...

  4. Recurrent Neural Network(循环神经网络)

    Reference:   Alex Graves的[Supervised Sequence Labelling with RecurrentNeural Networks] Alex是RNN最著名变种 ...

  5. Deep Learning: Assuming a deep neural network is properly regulated, can adding more layers actually make the performance degrade?

    Deep Learning: Assuming a deep neural network is properly regulated, can adding more layers actually ...

  6. Convolutional Neural Network in TensorFlow

    翻译自Build a Convolutional Neural Network using Estimators TensorFlow的layer模块提供了一个轻松构建神经网络的高端API,它提供了创 ...

  7. 【论文阅读】Sequence to Sequence Learning with Neural Network

    Sequence to Sequence Learning with NN <基于神经网络的序列到序列学习>原文google scholar下载. @author: Ilya Sutske ...

  8. Recurrent Neural Network[survey]

    0.引言 我们发现传统的(如前向网络等)非循环的NN都是假设样本之间无依赖关系(至少时间和顺序上是无依赖关系),而许多学习任务却都涉及到处理序列数据,如image captioning,speech ...

  9. 【NLP】Recurrent Neural Network and Language Models

    0. Overview What is language models? A time series prediction problem. It assigns a probility to a s ...

  10. Bilinear CNN与 Randomly Wired Neural Network

    最近主要学习了两篇论文以及相关的代码. 1.Bilinear CNN 这篇论文主要是在细粒度分类上应用的,在全连接层之前,在所有的卷积计算完成之后,进行的Bilinear计算,关键的代码如下: def ...

随机推荐

  1. 第一篇 Rewrite规则简介

    1.Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式.如果要想用到rewrite模块,必 ...

  2. 分布式锁与实现(二)——基于ZooKeeper实现

    引言 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提 ...

  3. selenium 利用testNG对异常进行自动截图

    哈哈哈,很久没写博客了,懒了. 因为一些原因最近需要把监听事件重新整理一下,开始没细想,直接copy网上的,其实结果发现报错很多,或者是达不到效果,然后把之前的代码翻出来,仔细看了一下.下面给一些需要 ...

  4. 关于Java FTP SFTP的相关实际问题

    第一个: java ftp使用的是Apache common-net,但是FTP服务侧提供的FTP服务器只支持SFTP,结果报 java.net.ConnectException: Connectio ...

  5. Centos7通过Docker安装Sentry(哨兵)

    Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...

  6. hdu 2710 Max Factor 数学(水题)

    本来是不打算贴这道水题的,自己却WA了三次.. 要考虑1的情况,1的质因子为1 思路:先打表 ,然后根据最大质因子更新结果 代码: #include<iostream> #include& ...

  7. 栈的Java简单实现

    关于栈 栈(Stack)是限定只能在一段进行插入和删除操作的线性表. 进行插入和删除操作的一端称为“栈顶”(top),另一端称为“栈底”(bottom). 栈的插入操作称为“入栈”(push),栈的删 ...

  8. Hibernate笔记一:HIbernate配置-HelloWorld

    hibernate介绍: Hibernate是一个开源的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使Java程序员可以随心所欲的使用对象编程思维来操纵数据库. 它不仅提供了从java类到数 ...

  9. Struts2 控制文件上传下载

    之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个part类来实现对文件的上传和保存,Struts其实是在其基础上做了进一步的封装,更加简单易用.至于文件下载,Strut ...

  10. 【转】jQuery Validate验证框架详解

    jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 一.导入js库 <script type=& ...