斯坦福大学《Machine Learning》第4周学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/junjun150013652/article/details/80717585

Neural Networks: Representation神经网络:表示

Motivations激励

Non-linear Hypotheses非线性假设

下面举几个例子阐述神经网络算法的目的 这几个问题的解决 都依赖于研究复杂的非线性分类器   

考虑这个监督学习分类的问题 我们已经有了对应的训练集 如果利用逻辑回归算法 来解决这个问题 首先需要构造 一个包含很多非线性项的 逻辑回归函数 事实上 当多项式项数足够多时 那么可能 你能够得到一个   分开正样本和负样本的分界线 当只有两项时 比如 x1 x2 这种方法确实能得到不错的结果 因为你可以 把x1和x2的所有组合 都包含到多项式中 但是对于许多 复杂的机器学习问题 涉及的项往往多于两项   

房价预测的问题 假设现在要处理的是房子在未来半年内 能被卖出去的概率 这是一个分类问题   对于不同的房子有可能 就有上百个特征   对于这类问题 如果要包含 所有的二次项 在n=100的情况下   最终也有5000个二次项 随着特征个数n的增加 二次项的个数大约以n^2的量级增长 因此要包含所有的 二次项是很困难的 所以这可能 不是一个好的做法 

而且由于项数过多 最后的结果很有可能是过拟合的 此外 在处理这么多项时 也存在运算量过大的问题   当然 你也可以试试 只包含上边这些二次项的子集 但是由于 忽略了太多相关项 在处理类似左上角的数据时 不可能得到理想的结果 5000个二次项看起来已经很多了 而现在假设 包括三次项 或者三阶项 大概17000个三次项 这并不是一个好做法 

举个例子 关于计算机视觉中的一个问题   假设你想要 使用机器学习算法 来训练一个分类器 使它检测一个图像 来判断图像是否为一辆汽车  我们取出这幅图片中的一小部分 将其放大 比如图中 这个红色方框内的部分 当人眼看到一辆汽车时 计算机实际上看到的却是这个 一个数据矩阵 它们表示了像素强度值 告诉我们图像中每个像素的亮度值 因此 对于计算机视觉来说问题就变成了 根据这个像素点亮度矩阵 来告诉我们 这些数值代表一个汽车门把手

具体而言 当用机器学习算法构造 一个汽车识别器时 我们要想出 一个带标签的样本集 其中一些样本 是各类汽车 另一部分样本 是其他任何东西 将这个样本集输入给学习算法 以训练出一个分类器 训练完毕后 我们输入一幅新的图片 让分类器判定 “这是什么东西?”   理想情况下 分类器能识别出这是一辆汽车  

为了理解引入 非线性分类器的必要性 我们从学习算法的训练样本中 挑出一些汽车图片 和一些非汽车图片  我们从其中 每幅图片中挑出一组像素点 pixel1和pixel2

在坐标系中画上更多的新样本 用''+"表示汽车图片 用“-”表示非汽车图片 我们现在需要一个 非线性分类器 来尽量分开这两类样本   这个分类问题中特征空间的维数是多少? 假设我们用50*50像素的图片 一共2500个像素点   因此 我们的特征向量的元素数量 n=2500 特征向量X 包含了所有像素点的亮度值 如果我们用的是RGB彩色图像 每个像素点包含红、绿、蓝三个子像素 那么n=7500   因此 如果我们非要 通过包含所有的二次项 来解决这个非线性问题 那么 这就是式子中的所有条件 xi*xj 连同开始的2500像素 总共大约有300万个 这计算成本太高了并不是一个解决 复杂非线性问题的好办法 

Neurons and the Brain神经元和大脑

神经网络产生的原因 是人们想尝试设计出 模仿大脑的算法 从某种意义上说如果我们 想要建立学习系统 那为什么不去模仿 我们所认识的 最神奇的学习机器—— 人类的大脑呢 神经网络逐渐兴起于 二十世纪八九十年代 应用得非常广泛 但由于各种原因 在90年代的后期应用减少了 但是最近 神经网络 又东山再起了   其中一个原因是 神经网络 是计算量有些偏大的算法 然而 大概由于近些年 计算机的运行速度变快 才足以真正运行起大规模的 神经网络 正是由于这个原因 和其他一些我们后面会讨论到的 技术因素 如今的神经网络 对于许多应用来说是最先进的技术   

当你想模拟大脑时 是指想制造出与人类大脑 作用效果相同的机器 对吧? 大脑可以学会去 以看而不是听的方式处理图像 学会处理我们的触觉 我们能学习数学  学着做微积分 而且大脑能处理 各种不同的令人惊奇的事情 似乎如果你想要 模仿它 你得写很多不同的 软件来模拟所有 大脑告诉我们的这些 五花八门的奇妙的事情 不过能不能假设 大脑做所有这些 不同事情的方法 不需要用上千个不同的程序去实现 相反的 大脑处理的方法 只需要 一个单一的学习算法就可以了? 尽管这只是一个假设 

不过让我和你分享 一些这方面的证据 大脑的这一部分 这一小片红色区域 是你的听觉皮层 你现在正在理解我的话 这靠的是耳朵 耳朵接收到声音信号 并把声音信号传递给你的 听觉皮层 正因如此 你才能明白我的话   

神经系统科学家做了 下面这个有趣的实验 把耳朵到 听觉皮层的神经切断 在这种情况下 将其重新接到一个动物的大脑上 这样从眼睛到 视神经的信号最终将传到听觉皮层   如果这样做了 那么结果表明 听觉皮层将会   学会“看” 这里“看”代表了 我们所知道的每层含义 所以 如果你对动物这样做 那么动物就可以完成视觉辨别任务 它们可以 看图像 并根据图像 做出适当的决定 它们正是通过 脑组织中的这个部分完成的   

右边另一个例子   这块红色的脑组织是你的躯体感觉皮层 这是你用来处理触觉的 如果你做一个和刚才类似的重接实验   那么躯体感觉皮层也能学会”看“ 这个实验和其它一些 类似的实验 被称为神经重接实验   从这个意义上说 如果 人体有同一块 脑组织可以处理光、 声或触觉信号 那么也许存在一种学习算法 可以同时处理 视觉、听觉和触觉 而不是需要 运行上千个不同的程序 或者上千个不同的算法来做这些 大脑所完成的 成千上万的美好事情 也许我们需要做的就是找出 一些近似的或 实际的大脑学习算法 然后实现它 大脑通过自学掌握如何 处理这些不同类型的数据   在很大的程度上 可以猜想如果我们 把几乎任何一种传感器 接入到大脑的 几乎任何一个部位的话 大脑就会学会处理它   

下面再举几个例子

左上角的这张图是 用舌头学会“看”的一个例子 它的原理是 这实际上是 一个名为BrainPort的系统 它现在正在FDA (美国食品和药物管理局) 的临床试验阶段 它能帮助失明人士看见事物 它的原理是 你在前额上带一个灰度摄像头 面朝前 它就能 获取你面前事物的 低分辨率的灰度图像 你连一根线   到舌头上安装的 电极阵列上 那么每个像素都被映射到 你舌头的 某个位置上 可能电压值高的点对应一个 暗像素 电压值低的点 对应于亮像素 即使依靠 它现在的功能 使用这种系统就能让你我 在几十分钟里就学会 用我们的舌头“看”东西 

这是第二个例子 关于人体回声定位或者说人体声纳   你有两种方法可以实现 你可以弹响指   或者咂舌头 这个我做不好 不过现在有失明人士 确实在学校里 接受这样的培训 并学会解读 从环境反弹回来的声波模式—这就是声纳 如果你搜索 YouTube之后 就会发现 有些视频讲述了一个令人称奇的孩子 他因为癌症眼球惨遭移除 虽然失去了眼球 但是通过打响指 他可以四处走动而不撞到任何东西 他能滑滑板 他可以将篮球投入篮框中 注意这是一个没有眼球的孩子   

第三个例子是 触觉皮带 如果你把它 戴在腰上 蜂鸣器会响 而且总是朝向北时发出嗡嗡声 它可以使人拥有 方向感 用类似于 鸟类感知方向的方式 

还有一些离奇的例子 如果你在青蛙身上 插入第三只眼 青蛙也能学会使用那只眼睛   

因此 这将会非常令人惊奇 如果你能 把几乎任何传感器 接入到大脑中 大脑的学习算法就能 找出学习数据的方法 并处理这些数据   从某种意义上来说 如果我们能找出 大脑的学习算法 然后在计算机上执行 大脑学习算法或与之相似的算法 也许 这将是我们 向人工智能迈进 做出的最好的尝试 人工智能的梦想就是 有一天能制造出真正的智能机器   当然我不是 教神经网络的 介绍它只因为它可能为我们 打开一扇进入遥远的 人工智能梦的窗户 

Neural Networks神经网络

Model Representation I模型表示

运用神经网络时 我们该如何表示我们的假设或模型

神经网络是在模仿 大脑中的神经元或者神经网络时发明的 因此 要解释如何表示 模型假设 我们先来看单个 神经元在大脑中 是什么样的   我们的大脑中充满了 这样的神经元 神经元是大脑中的细胞 其中有两点 值得我们注意 一是神经元有 像这样的细胞主体 二是神经元有 一定数量的 输入神经 这些输入神经叫做树突 可以把它们想象成输入电线 它们接收来自其他 神经元的信息    神经元的输出神经叫做轴突 这些输出神经 是用来 给其他神经元传递信号 或者传送信息的   

简而言之 神经元是一个计算单元 它从输入神经接受一定数目的信息 并做一些计算   然后将结果通过它的 轴突传送到其他节点 或者大脑中的其他神经元 

这就是所有 人类思考的模型: 我们的神经元把 自己的收到的消息进行计算 并向其他神经元 传递消息 

这是一个非常简单的模型 来模拟神经元的工作 我们将神经元模拟成一个逻辑单元 黄色圆圈类似于神经元 一个有s型函数或者逻辑函数作为激励函数的 人工神经元 在神经网络术语中 激励函数只是对类似非线性 函数g(z)的另一个术语称呼 θ为 模型的参数 有时候也叫“权重”  x0(总是等于1 偏置单元 可有可无) x1 x2 x3 类似于输入神经 h(x)为输出神经 

神经网络其实就是 这些不同的神经元 组合在一起的集合   具体来说 这里是我们的 输入单元x0 x1 x2和 x3 神经元a(2)1 a(2)2 和a(2)3,最后一层输出 假设函数h(x)计算的结果 

这个例子中 我们有一个 输入层—第1层 一个隐藏层— 第2层 和一个输出层—第3层 但实际上任何 非输入层或非输出层的层 就被称为隐藏层   

a上标(j) 下标i表示 第j层的 第i个神经元或激励  所谓激励(activation) 是指 由一个具体神经元读入 计算并输出的值 

在这里 我们有三个 输入单元和三个隐藏单元   这样一来 参数矩阵控制了 我们来自 三个输入单元 三个隐藏单元的映射 因此θ(1)将变成一个3乘4维的矩阵 

更一般的   如果一个网络在第j 层有Sj个单元 在j+1层有Sj+1个单元 那么矩阵θ(j) 即控制第j层到 第j+1层映射 的矩阵的 维度为Sj+1 * (Sj+1) 

最后 在输出层 我们还有一个 单元 它计算 h(x) 这个也可以 写成a(3)1 

Model Representation II模型表示

前向传播的向量化实现

这些z值都是 一个线性组合 是输入值x0 x1 x2 x3的 加权线性组合 我可以定义a(1) 等于向量x 

这个计算h(x)的过程 也称为前向传播(forward propagation)   这样命名是因为 我们从 输入层的激励开始 然后进行前向传播给 隐藏层并计算 隐藏层的激励 然后 我们继续前向传播 并计算输出层的激励   这个从输入层到 隐藏层再到输出层依次计算激励的 过程叫前向传播   

我们将输入层隐藏掉,可见特征项a1 a2 a3它们是作为 输入的函数来学习的 具体来说 就是从第一层 映射到第二层的函数 这个函数由其他 一组参数θ(1)决定 所以 在神经网络中 它没有用 输入特征x1 x2 x3 来训练逻辑回归 而是自己 训练逻辑回归 的输入 a1 a2 a3 可以想象 如果 在θ(1)中选择不同的参数 有时可以学习到一些 很有趣和复杂的特征 就可以 得到一个 更好的假设 比使用原始输入 x1 x2或x3时得到的假设更好 下一节会讲为什么

你还可以用其他类型的图来 表示神经网络 神经网络中神经元 相连接的方式 称为神经网络的架构 所以说 架构是指 不同的神经元是如何相互连接的 

Applications应用

Examples and Intuitions I

实例讲述神经网络是如何计算 关于输入的复杂的非线性函数

我们先来看两个简单的问题,第一个 与运算,第二个是或运算

Examples and Intuitions II

以下实现与运算和先非再与

结合上面讲到的运算,来实现同或运算

思路,同或就是两个相同的二进制结果为1;什么是相同,就是x1,x2(第一层)经过与运算以后为1(第二层),或者(第三层)经过非运算后再与为1的二进制(第二层)

在输入层中 我们只有原始输入值 然后我们建立了一个隐藏层 用来计算稍微复杂一些的 输入量的函数 然后 通过添加另一个层 我们得到了一个更复杂一点的函数   这就是关于 神经网络可以计算较复杂函数 的某种直观解释 

Multiclass Classification多类别分类

如何用神经网络做多类别分类,之前说到二元分类,我们可以用一个输出表示,0或者1,对于多元分类问题,我们不再使用一个输出表示成1,2,...10;俄日是使用向量来表示,如下所示

参考资料

https://www.coursera.org/learn/machine-learning/

猜你喜欢

转载自blog.csdn.net/junjun150013652/article/details/80717585