ADM-201 dump PMP dumps pdf SSCP exam materials CBAP exam sample questions

《了解深度学习》#2 如何构建神经网络 – 译学馆
未登录,请登录后再发表信息
最新评论 (0)
播放视频

《了解深度学习》#2 如何构建神经网络

How to Make a Neural Network - Intro to Deep Learning #2

我们如何学习?
时间流转 某些概念却始终不变
信息比肉体留存更久
信息储存在我们的大脑中 却能代代相传
大脑能综合一系列输入即我们的五感
从而生成系统的概念
幸运的话 我们能在老师的直接指导下学习
在与环境交互的过程中
我们能感知周围事物 看到障碍
尝试预测下一步的行动
如果尝试失败了也没关系
通过反复试错
我们什么都能学会
但为何我们的大脑有如此独特的能力?其他自然界的东西就没有呢?
我们所经历或感知的一切
我们的想法 记忆 甚至是自我意识
都由大脑产生
从分子角度看 我们的大脑
大约有一千亿个叫做神经元的神经细胞
神经元有三项职能
从树突接收一组信号
将这组信号整合
从而决定是否在细胞体中传递此信息
如果信号之和超过一定的阈值
则称这个信号为动作电位
并将其通过轴突向下一个神经元传递
大家好 我是西拉杰
我们要用python创建自己的神经网络
大脑通过一定规律运转 产生了智慧
产生了现代语言
航空航天 希亚拉博夫
我们因此才成为独特的人
也因此能在地球上繁衍生息
但作为一个物种这些还不够
我们的生存依然面临众多威胁
即将到来的气候变化危机
可能发生的生化战争
以及行星撞击
这些问题需要一代代人
用自己大脑中的神经网络进行思考而解决
现在想象我们能掌控这种能力
想象我们能创造一种人工神经网络
让它能在非生物体比如硅上运转
我们可以给它强大的计算能力
以及远超人类处理能力的数据量
使它处理问题的速度是人的数千甚至上百万倍
1943年 两位早期计算机科学家
Warren McCulloch 和 Walter Pitts
发明了首个神经计算模型
这个模型可以接收二进制输入
对这些输入求和
如果求得的和超过一定阈值 模型输出1
否则输出0
这个模型很简单
但在AI早期 这个模型可不得了
它引起了计算机科学家们对这种可能性的讨论
计算机和心理学家Rosenblatt很失望
因为McCulloch和Pitts的模型依然无法进行学习
因此他基于二人的理念
提出了一种神经模型并称之为感知机
也就是单层前馈神经网络的另一种叫法
我们称之为前馈是因为
数据只能向一个方向也就是前方流动
感知机引入了输入权重的概念
给它一些包括输入和输出的训练数据
它能根据输出数据
连续增大或减小权重值
从而得到一个函数
这些权重值和输入值有数学上的联系
因此每次迭代后
输出的预测值就会变得更准确
为了更好理解这个我们称为“训练”的过程
我们来用python创建一个单层神经网络
依赖项只需要numpy
在main函数中 我们首先要初始化神经网络
之后我们会定义神经网络自己的类
并且在演示中输出初始权重作为参照
现在我们可以定义数据集了
我们有四个示例
每个示例有三个输入值和一个输出值
这些值都是0或1
t函数将行向量转换为列向量
所以电脑是以这种形式来存储数据
我们要用这些数据来训练神经网络
以后再给它新数据时
它好预测输出是0还是1
由于我们要识别数据所属的类型
在机器学习中这就是分类
我们训练神经网络时
训练函数的参数就包括这些数据
还有一个数字10000
作为我们训练时迭代的次数
训练完成后 我们打印出更新后的权重
这样可以比较权重的变化
最后给定新的输入 让它预测输出
到此main函数就完成了
现在我们来定义神经网络的类
初始化类时
我们首先要给定种子
因为我们马上要随机生成一组权重值
给定种子可以确保每次程序运行时
产生的初始权重值都相同
这对之后的调试很有用
因为每个神经元有三个输入 一个输出
所以我们把生成的随机数
赋值给一个3×1的矩阵
随机数的范围在-1到1之间
均值为0
下面我们要写出激活函数
这里我们用的是sigmoid函数
函数曲线为S形
加了权重的输入经过激活函数
会被转化为取值在0到1之间的概率
这个概率值会帮我们进行预测
预测函数中会直接用到sigmoid函数
它会将输入作为参数
并在神经元中进行传递
为了得到加权后的输入
我们要计算输入和权重的点积
权重就是这样来影响数据在神经网络中的流动
这个函数会返回预测结果
现在我们可以写整个代码的核心――训练函数了
我们要写一个for循环来进行10000次迭代
然后通过预测函数将数据传入神经网络
并得到输出值
这个输出值就是预测结果
接下来我们要计算误差
误差是期望输出与实际输出的差值
通过在训练中不断更新权重
我们希望可以最小化这个误差
而权重具体如何调整
则需要将误差与sigmoid曲线的斜率相乘
再与输入的转置求点积
可信度低的权重调整比较大
而且值为0的输入不会使权重值改变
这个过程叫做梯度下降
耶 我在沿梯度下降
我们还要写一个函数来计算sigmoid的导数
这样才能得到梯度或者说斜率
梯度衡量现有权重的可信程度
并帮我们往正确的方向更新预测值
最后 我们得到了调整参数值
就用这个值来调整权重
这个过程将误差值传回到神经网络
再调整权重
因此称为反向传播算法
我们来在终端上演示一下
由于训练数据集很小
所以训练过程只需要几毫秒
我们可以看到权重值在每次迭代后都会更新
给神经网络一个新数据
它预测到输出很可能是1
我们刚刚从零开始创建了第一个神经网络
话说回来 关于反向传播
反向传播更新权重
反向传播更新权重
反向传播更新权重
反向传播更新权重
把0和1映射到1和0
拿到输入 加上权重然后求和
把它传给sigmoid函数
实际值减预测值得到误差
然后我用梯度下降法
它给我方向一点不假
更新权重一直重复一万次
得到输出 我怒放心花
Rosenblatt曾经认为 接下来的几十年
神经网络派不上什么大的用场
它们只能完成简单的工作
但是随着网络从一项专用技术
发展成全世界全人类都在用的技术
今天的数据和计算能力有了爆炸式增长
加拿大政府资助的一小部分研究者
深信神经网络能通过这些数据
帮我们解决问题
他们发现当一个神经网络不是一层两层
而是许多许多层
再加上庞大的数据集和超强的计算能力
某些我们认为只有人类才能胜任的任务
神经网络可以表现的比人类更好
这个发现意义重大
人类的生物神经网络是碳基的
传递神经递质 比如乙酰胆碱
谷氨酸 血清素等作为信号
人工神经网络根本就没有实体存在
它是我们用程序创建的抽象概念
表征在硅晶体管上
尽管二者的媒介完全不同
但结果表明它们处理信息的机制却很相似
说不定宇宙中有很多种不同的智慧形式
我们离发现这些智慧越来越近了
分重点讲解
神经网络是一种以生物过程为灵感 得到的算法
可以学习分辨数据模式
反向传播是一种流行的神经网络训练方法
它通过梯度下降法不断更新权重
如果我们训练的是一个很多层的神经网络
用大量数据以及强大的计算能力来训练
这个训练过程就叫深度学习
上周编程挑战的冠军是Ludo Bouan
Ludo做了一个非常精美的ipython notebook
可以演示气候变化数据的二元回归和三元回归
本周编程小能手
第二名是Amanullah Tariq
他的程序得到了比较好的结果
本周的挑战是仅用numpy
创建一个神经网络 不是一层 不是二层
而是三层的前馈神经网络
在评论中留下你的github链接
我会在下周宣布冠军
欢迎订阅 现在我要去更新权重了
谢谢观看

发表评论

译制信息
视频概述

使用python,从零开始构建一个一层神经网络

听录译者

收集自网络

翻译译者

想念

审核员

审核员@AI

视频来源

https://www.youtube.com/watch?v=p69khggr1Jo

相关推荐