CV 1st Opening && NN structure

计算机视觉


交叉学科

物理:光学 

生物学: 生物是如何分析图像的

数学  计算机  算法和程序

图像识别最近很火 (识别猫狗等) 人脸识别相机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


Object recognition

每个物体都可以由圆柱体构成


通过 lines edges 识别 razor

60s 70s 80s 做了很多工作 然而识别结果很有限  toy examples

识别物体太难了  从识别 object segmentation 开始



通过对图像算法  group pixel into meaningful areas


Adaboost real time facing 

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


2012 CNN  beat all algorithms

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




Stochastic Gradient Descent

醉汉下山而不是每一步都很精确  随机梯度下降

反向传播 根据单个样本如何修改W 和 b

不仅仅是增大 减少 还包括一最小的成本最快降低代价

training need   a lot of data MNIST

反向传播中的链式法则

cost function 就是对这个w值有多敏感

这样才知道如何调整值使得cost 下降的最快


先看最后两个神经元


w 变化  导致 C 的变化  C 对于 w 的敏感程度   如何量化   求 C 对于 w 的导数


z 和 w 的关系  取决于上一层 aL-1    ---> 激活的神经元相互关联






你可能感兴趣的:(CV 1st Opening && NN structure)