计算机视觉
物理:光学
生物学: 生物是如何分析图像的
数学 计算机 算法和程序
图像识别最近很火 (识别猫狗等) 人脸识别相机2006 前任都做了些什么
visual world into shapes ===> 问题简化为识别 shapes
inspire by cat experiment visual has a lot of things to do with simple edges
output is 3D model
these thinking dominates sereral decades
每个物体都可以由圆柱体构成
60s 70s 80s 做了很多工作 然而识别结果很有限 toy examples
识别物体太难了 从识别 object segmentation 开始
通过对图像算法 group pixel into meaningful areas
paul viola & micheal jones 2001
Lowe is a researcher in computer vision, and is the author of the patented scale-invariant feature transform (SIFT), one of the most popular algorithms in the detection and description of image features.[1][2][3]
match stop sign tpo another stop sign
view light intrinstic object itsself
提出一种方法来区分场景: 是风景还是厨房
in 2000 we have benchmark data to enable us to do with object recognize
PASCAL visual object challenge 20种
are we ready to recognize most object in the world?
not enough data
largest object dataset
training for benchmarking
CNN more popular name deep learning models
Convolutional Neural Networks (CNN) have become an important tool for object recognition
2012 winner is NN NN is deeper and deeper
alex 7 VGG 19 MSRA residual network 152
CNN not invented in 2012
lecun build this to reco digits 1998 images as input label as output
why so popular suddenly
computations 计算机计算能力增长 hungry for data more dataset
what is ML
识别数字 猫和狗 圣诞老人等 先从数字开始
写一个算法 来识别数字?
NN 来解决这个问题 NN 是什么 learning 是什么
NN 的结构
learning 下回讨论
识别手写数字对于 PC 来说已经很好了
神经元是什么 他们是如何连接在一起的
这张图 神经元看起来是一个装着数字的容器 实际上神经元是一个函数 接收一些输入 最后得到一个值(就是这里的数字)
输入层的数字代表着图像的灰度 0~1
激活值
这个激活值越大 这个神经元就越亮
这个输入 784 NN 的第一层
最后一层 每个神经元代表一个数字 代表对于这个是个数字的可能性
中间的叫做隐藏层 隐藏层处理数字的识别
每一层 接收前一层的输出作为本层的输入
先设置为2个隐藏层 每层16个神经元 随机 16为了演示好看
工作时 上一层的值决定下一次层 前向传播
NN 的核心就是如何根据上一层的值计算下一层的值
模仿生物的概念 (通过激发一些神经元 触发另一些神经元)
假设 NN 已经训练好了 训练好了就是说
输入图像 隐藏层得到一些值 output 输出结果 而最亮(最大)就是神经网络的选择结果 NN 认为的数字 投票的概念
Q 上层如何影响下层
Q训练是指什么
Q为什么这样的网状结构可以判断
先看看人类是如何识别数字的
假设第一层识别直线 曲线 第二层识别直线 曲线的组合方式
然而 识别一个圈也是很难的 继续分解
然而 识别一个圈也是很难的 继续分解
但是真实情况真的是这样吗 这些连接究竟在做什么呢
我们需要一个机制 第一层的短边拼成图案 第二能将图案拼成数字
先从横线入手 假设第二层需要识别一条横线 目标是识别出这块区域中是否存在一个边
神经元是一个函数 NN 是很多神经元 设置函数参数 识别图像中是否存在这样的边
Sigmoid 激活函数
加上这个函数后 输出值在 0~1
假如我们认为输出值超过10 才有意义 bias
bias 值有多大才有意义
Weight 表示关注什么样子的图案 bias 加权和有多大 神经元才激发
这样就是一个神经元
但是隐藏层每一个神经元都和784相连 每个连线都有 w 每个神经元都有 bias
learning 就是电脑如何设置参数 找到正确的权重和偏置
784 * 16 + 16 * 16 + 16 * 10
加 bias 785 * 16 + 17 * 16 + 17 * 10 = 13002 这么多参数!
神经元的输入是上一层的输出 输出的值是一个 0 ~ 1 的数字
整个 NN 也是 function 784个输入 10个输出
前向传播 前馈网络
Q W 怎么来的
Q 当结果不对的时候怎么办
接下来说明 ML 中的 L
输出结果和想要结果不匹配的时候 我们知道 W b 的含义 就知道如何去修正了
Learning 的过程
data && label 学习 训练
算法自动的调整13002个 W 和 b 提高网络对学习数据的表现 希望机器 举一反三
学习好后 给机器从未见过的值 去判断
学习听起来很科幻 实际上是微积分
之前说到了 W 每个神经元都和上一层所有 Neural 相连 W 理解为 关联的强弱 b 表示 Neural 激活门槛
W b 怎么来的 学出来的
一开始 W b 设置为随机值 结果很差
我们期待 3 最亮 其他都很暗
量化差异
当差距小的时候 这个值小 错误多 这个值也越大
目标 代价均值减少
Cost 输入13002 输出是一个数字 表示 loss 程度
但是光有好坏不够 告诉电脑如何改进
注意 此函数有13002个参数
先从一个变量开始
但是现实问题比较复杂 不容易找到 f'(x) 尤其是13002个自变量
先随机选一个变量x0 根据f'(x0) 的情况 往左往右
cost function
先随机找一个值 然后确定这个点的导数 根据导数正负决定左右走
可以确定一个局部的最小值
想象一个球滚下山坡
就算我们的问题只是一个一元函数 球最初的落脚点不同 也会有不同的沟
无法保证局部最小值就是整个代价函数最小值
移动每一步和导数成比例 就不会走过头 f'(x0) 越来越小
梯度下降 实际上在寻找最小值
对于二维 尝试这样的函数
某一点函数的导数值 在这个空间往哪个方向 让输出的结果值变小的最快
实际上是寻找下山最快的路径
微积分 函数的梯度 函数最陡的增长方向 沿着梯度的方向 函数增长最快 反向走 下降最快
总之 我有办法算出最快下降的方向
对于13002
W 和 C 的相加
总之 负梯度 在这个13002的空间中 如何改变每一项参数 能让 cost 函数值下降最快
这样每一步更新 w 和 b 输出都更加接近我们想要的值
注意这个 cost function 是平均值 最小化的意思是 对总体结果都会好一点
计算梯度算法是神经网络的核心 BP
ML 实质上是使 cost 函数值变小
代价函数必须可求导 这样一点一点移动才能找到局部最小值
按照梯度不断调整 W b 的过程 梯度下降法 能使值收敛到一个局部最优
如何理解13002维空间的 梯度下降
梯度 方向 理解为 各个W b 的重要程度 改变哪个参数 对结果的影响更大
x 的重要性是 y 的3倍
或者 cost 对每个参数有敏感 不同 W 影响力不同
之前假设第一层短边 第二层一些图像 但是实际上 并不是第一层识别出一些边 第二层识别边和边之间的关系
BP 神经网络学习的核心
反向传播究竟在干什么?
learning 的本质 找到特定的 W b 使得 cost 最小 (就是使网络的输出和你希望的输出之间的平方差的和最后取平均最小)
不能改变激活值 只能改变权重值
在进行梯度下降的时候 不只是增大或减少某几个权重值 要看修改哪个参数的性价比最高
说到优化 其实是全部的 cost 优化 每个样本(数字图像)都要进行一次
一个训练样本2 如何调整W b
假设一次识别结果如下
增大2 减少8 但是增大2 要比减少8 更有意义
增加那几个亮点的权重更有意义
梯度 方向 改变那几个值更有性价比
方法3 前一层
每个样本 输出结果 对于第二层期待的改变 是不同的 选举的概念
所有对于第二层期待加起来 (和2相关的增大 和1相关的减少)
但是以上只是针对数字2 这一个样本对 NN 的改变 对于每一个样本 都会经过上面的过程
总Cost 是很多样本所有 Cost 的平均
随机梯度下降
如果梯度下降的每一步都用上全部样本计算 计算量会太大
mini batch
醉汉下山而不是每一步都很精确 随机梯度下降
反向传播 根据单个样本如何修改W 和 b
不仅仅是增大 减少 还包括一最小的成本最快降低代价
training need a lot of data MNIST
反向传播中的链式法则
cost function 就是对这个w值有多敏感
这样才知道如何调整值使得cost 下降的最快
先看最后两个神经元
w 变化 导致 C 的变化 C 对于 w 的敏感程度 如何量化 求 C 对于 w 的导数
z 和 w 的关系 取决于上一层 aL-1 ---> 激活的神经元相互关联