神经网络是在模仿大脑中的神经元或者神经网络时发明的。因此,要解释如何表示模型假设,我们先来看单个神经元在大脑中是什么样的。如下图,我们的大脑中充满了神经元,神经元是大脑中的细胞,其中有两点值得我们注意,一是神经元有细胞主体,二是神经元有一定数量的输入神经。这些输入神经叫做树突,可以把它们想象成输入电线,它们接收来自其他神经元的信息,神经元的输出神经叫做轴突,这些输出神经是用来给其他神经元传递信号或者传送信息的。简而言之,神经元是一个计算单元,它从输入神经接受一定数目的信息,并做一些计算,然后将结果通过它的轴突传送到其他节点,或者大脑中的其他神经元。右下图是一组神经元的示意图,神经元利用微弱的电流进行沟通,这些弱电流也称作动作电位,其实就是一些微弱的电流,所以如果神经元想要传递一个消息,它就会就通过它的轴突发送一段微弱电流给其他神经元。这是一条连接到输入神经或者连接另一个神经元树突的神经,接下来这个神经元接收这条消息做一些计算。它有可能会反过来将在轴突上的自己的消息传给其他神经元。这就是所有人类思考的模型:我们的神经元把自己的收到的消息进行计算并向其他神经元传递信息。这也是我们的感觉和肌肉运转的原理,如果你想活动一块肌肉,就会触发一个神经元给你的肌肉发送脉冲,并引起你的肌肉收缩。如果一些感官,比如说眼睛想要给大脑传递一个消息,那么它就像这样发送电脉冲给大脑。

Neuron model:logistic unit

在一个神经网络里,或者说在我们在电脑上实现的人工神经网络里,我们将使用一个非常简单的模型,来模拟神经元的工作。我们将神经元模拟成一个逻辑单元,当画一个黄色圆圈时(黄色小圈代表一个单一的神经元,下图所示),你应该把它想象成作用类似于神经元的东西,然后我们通过它的树突或者说它的输入神经传递给它一些信息,然后神经元做一些计算,并通过它的输出神经,即它的轴突输出计算结果,当画一个像这样的图表时,就表示对h(x)的计算,h(x)等于1除以1+e的负θ转置乘以x。通常,x和θ是参数向量。这是一个简单的模型,甚至说是一个过于简单的模拟神经元的模型。它被输入x1、x2和x3,然后输出一些类似这样的结果。当绘制一个神经网络时,通常只绘制输入节点x1、x2和x3。但有时也可以这样做:增加一个额外的节点x0,这个x0节点,有时也被称作偏置单位或偏置神经元,但因为x0总是等于1,所以有时候会画出它,有时不会画出,这取决于它是否对例子有利。现在讨论最后一个关于神经网络的术语,有时我们会说这是一个神经元,一个有s型函数或者逻辑函数作为激励函数的人工神经元。在神经网络术语中,激励函数只是对类似非线性函数g(z)的另一个术语称呼,g(z)等于1除以1加e的-z次方。到目前为止,θ一直被称为模型的参数,以后大概会继续将这个术语与“参数”相对应,而不是与神经网络。在关于神经网络的文献里,有时可能会看到人们谈论一个模型的权重,权重其实和模型的参数是一样的东西。

神经网络其实就是不同的神经元组合在一起的集合,具体来说,就是我们输入单元x1、x2和x3(如下图),有时候也可以画上额外的节点x0. 这里有个神经元,我们写成a1(2),a2(2),a3(2)。然后再次说明,我们可以在这里添加一个a0,和一个额外的偏度单元,它的值永远是1,最后我们在最后一层有第三个节点,正是这第三个节点,输出假设函数h(x)计算的结果。再多说一点关于神经网络的术语网络中的第一层也被称为输入层,因为我们在这一层输入我们的特征项x1、x2和x3,最后一层也称为输出层,中间的两层也被称作隐藏层,隐藏层不是一个很合适的术语,但是直觉上我们知道在监督学习中,你能看到输入,也能看到正确的输出。而隐藏层的值,你在训练集里是看不到的。它的值不是x,也不是y,所以我们叫它隐藏层。稍后我们会看到神经网络可以有不止一个的隐藏层,但在这个例子中,我们有一个输入层—第1层、一个隐藏层—第2层和一个输出层—第3层。但实际上任何非输入层或非输出层的层就被称为隐藏层。

为了解释神经网络具体的计算步骤,下图有些记号要解释,使用a上标(j)、下标i表示第j层的第i个神经元或单元。具体来说,a上标(2)、下标1,表示第2层的第一个激活值,所谓激励(activation)是指由一个具体神经元读入计算并输出的值。此外,神经网络被这些矩阵参数化,θ上标(j) 将成为一个波矩阵控制着从一层,比如说从第一层到第二层或者第二层到第三层的作用。下图的第一个隐藏单元是这样计算它的值的:a(2)1等于s函数或者说s激励函数,也叫做逻辑激励函数,作用在这种输入的线性组合上的结果。第二个隐藏单元,等于s函数作用在这个线性组合上的值。参数矩阵控制了来自三个输入单元、三个隐藏单元的映射。因此θ1的维数将变成3。θ1将变成一个3乘4维的矩阵。更一般的, 如果一个网络在第j层有sj个单元,在j+1层有sj+1个单元,那么矩阵θ(j),即控制第j层到第j+1层映射的矩阵的维度为sj+1* (sj+1)。所以θ(j)的维度是sj+1行、sj+1列。

斯坦福大学公开课机器学习:Neural network-model representation(神经网络模型及神经单元的理解)的更多相关文章

  1. 斯坦福大学公开课机器学习:advice for applying machine learning | diagnosing bias vs. variance(机器学习:诊断偏差和方差问题)

    当我们运行一个学习算法时,如果这个算法的表现不理想,那么有两种原因导致:要么偏差比较大.要么方差比较大.换句话说,要么是欠拟合.要么是过拟合.那么这两种情况,哪个和偏差有关.哪个和方差有关,或者是不是 ...

  2. 第19月第8天 斯坦福大学公开课机器学习 (吴恩达 Andrew Ng)

    1.斯坦福大学公开课机器学习 (吴恩达 Andrew Ng) http://open.163.com/special/opencourse/machinelearning.html 笔记 http:/ ...

  3. 斯坦福大学公开课机器学习:advice for applying machine learning | model selection and training/validation/test sets(模型选择以及训练集、交叉验证集和测试集的概念)

    怎样选用正确的特征构造学习算法或者如何选择学习算法中的正则化参数lambda?这些问题我们称之为模型选择问题. 在对于这一问题的讨论中,我们不仅将数据分为:训练集和测试集,而是将数据分为三个数据组:也 ...

  4. 斯坦福大学公开课机器学习:Neural Networks,representation: non-linear hypotheses(为什么需要做非线性分类器)

    如上图所示,如果用逻辑回归来解决这个问题,首先需要构造一个包含很多非线性项的逻辑回归函数g(x).这里g仍是s型函数(即 ).我们能让函数包含很多像这的多项式,当多项式足够多时,那么你也许能够得到可以 ...

  5. 斯坦福大学公开课机器学习: neural networks learning - autonomous driving example(通过神经网络实现自动驾驶实例)

    使用神经网络来实现自动驾驶,也就是说使汽车通过学习来自己驾驶. 下图是通过神经网络学习实现自动驾驶的图例讲解: 左下角是汽车所看到的前方的路况图像.左上图,可以看到一条水平的菜单栏(数字4所指示方向) ...

  6. 斯坦福大学公开课机器学习: machine learning system design | error analysis(误差分析:检验算法是否有高偏差和高方差)

    误差分析可以更系统地做出决定.如果你准备研究机器学习的东西或者构造机器学习应用程序,最好的实践方法不是建立一个非常复杂的系统.拥有多么复杂的变量,而是构建一个简单的算法.这样你可以很快地实现它.研究机 ...

  7. 斯坦福大学公开课机器学习:machine learning system design | error metrics for skewed classes(偏斜类问题的定义以及针对偏斜类问题的评估度量值:查准率(precision)和召回率(recall))

    上篇文章提到了误差分析以及设定误差度量值的重要性.那就是设定某个实数来评估学习算法并衡量它的表现.有了算法的评估和误差度量值,有一件重要的事情要注意,就是使用一个合适的误差度量值,有时会对学习算法造成 ...

  8. 斯坦福大学公开课机器学习: machine learning system design | prioritizing what to work on : spam classification example(设计复杂机器学习系统的主要问题及构建复杂的机器学习系统的建议)

    当我们在进行机器学习时着重要考虑什么问题.以垃圾邮件分类为例子.假如你想建立一个垃圾邮件分类器,看这些垃圾邮件与非垃圾邮件的例子.左边这封邮件想向你推销东西.注意这封垃圾邮件有意的拼错一些单词,就像M ...

  9. 斯坦福大学公开课机器学习:advice for applying machine learning - deciding what to try next(设计机器学习系统时,怎样确定最适合、最正确的方法)

    假如我们在开发一个机器学习系统,想试着改进一个机器学习系统的性能,我们应该如何决定接下来应该选择哪条道路? 为了解释这一问题,以预测房价的学习例子.假如我们已经得到学习参数以后,要将我们的假设函数放到 ...

随机推荐

  1. Redis常用操作-------Set(集合)

    1.SADD key member [member ...] 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略. 假如 key 不存在,则创建一个 ...

  2. tableView优化思路

    一般优化的思路: 提前计算并缓存好高度(布局),因为heightForRowAtIndexPath:是调用最频繁的方法. 复杂界面可采用异步绘制. 在大量图片展示时,可以滑动时按需加载. 尽量少用或不 ...

  3. 【BUAA软件工程】第一次阅读作业

    BUAA软件工程 第一次阅读作业 项目 内容 这个作业属于哪个课程? 北航软工 这个作业的要求在哪里? 第一次个人作业 我在这个课程的目标是? 学习高效严谨的软件工程开发过程,建立团队意识 这个作业在 ...

  4. Linux内核分析— —操作系统是如何工作的(20135213林涵锦)

    mykernel实验指导(操作系统是如何工作的) 实验要求 运行并分析一个精简的操作系统内核,理解操作系统是如何工作的 使用实验楼的虚拟机打开shell cd LinuxKernel/linux-3. ...

  5. Linux内核分析第二周:操作系统是如何工作的

    第一讲 函数调用堆栈 计算机是如何工作的? (总结)——三个法宝 1,存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 2,函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆 ...

  6. 【SE】Week3 : 四则运算式生成评分工具Extension&Release Version(附加题)

    [附加题]第四阶段目标 - 界面模块,测试模块和核心模块的松耦合. 写到这里我只想吐槽一句,哪天我能写出功能复杂且真正松耦合的模块,我应该就不用写代码了吧[手动再见.. 当然这只是强调下松耦合和代码复 ...

  7. android 活动的生命周期

    掌握活动的生命周期非常重要,因为一个正常的android应用,会有很多的活动,如何在这些活动之间进行切换.数据的交互等,就经常会用到活动的生命周期这一块的知识.可以说,只要掌握了活动的生命周期,才能更 ...

  8. beanutils的使用

    在项目进行中,使用到beanutils时发现1.9.X以上版本搭配logging搭配使用用不了,实在搞不明白.----stackoverflow提问吧 BeanUtils工具由Apache软件基金组织 ...

  9. 文本文件合并(C++实现)

    直接附上代码吧 #include<iostream> #include<fstream> #include<cstdlib> using namespace std ...

  10. No input file specified ci

    1. php.ini(/etc/php5/cgi/php.ini)的配置中这两项cgi.fix_pathinfo=1  (这个是自己添加的)