产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

我们不妨以一个经典的实际问题来开篇:如何让机器自动识别手写的数字?

比如:

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

尽管它们有着各种不同的形态,即便是同一数字,也有各种变体,我们的大脑却依然可以毫不费力的认出这些数字。那么我们如何让机器认出这些数字而不受变体的干扰呢?

随意写一个数字3,使用低像素:比如:28*28 pixels

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

如果现在由你编程去识别出来这是个3?你会怎么做?

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

是不是感到这个不光是繁琐,还异常的难?这个时候不禁又要敬佩一下我们的大脑,怎么那么牛!

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

我们的大脑由千亿规模的神经元(Neurons)构成,他们之间通过轴突(Axon)与突触(Synapse)互相连接探测和传播我们接收的各种信息并分发到不同区域最终形成我们的感知。(值得注意的是大脑中将近一半的神经元都是服务于我们的视觉系统的)

学者们于是想到模仿大脑的神经网络来构建机器的神经网络(注意只是模仿,实际机器的学习与人脑完全不同)。

回到我们的问题,我们可以这样来分解我们的手写识别问题了:

我们将每一个像素作为一个输入,也就是一个神经元:

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

每个神经元里的数字表示像素的灰度值,比如我们设定它是在0和1之间的任意值,0表示黑色,1表示白色,0和1之间数值表示黑白之间的灰度值,这就是我们定义的神经元。那么28*28 pixels就是784个神经元,每个神经元里的数值我们称之为一个激活(Activation):

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

这就构成了我们神经网络的第一层,就这么简单。

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

我们称之为输入层(Input layer),然后我们来建立最后的输出层(Output layer),10个神经元,每一个代表0-9中的一个数字,每一个神经元里同样有一个数值(Activation),代表机器认为最终识别结果是该数字的概率,例如:

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

最终结果中0.97的可能性此数字是3

我们已经拥有了神经网络的第一层和最后一层,处于第一层和输出层之间我们称为隐藏层(Hidden Layers),这些隐藏层就是在回答究竟机器是如何识别这些数字的过程,你可以视这些隐藏层为黑盒子,并不影响我们理解一个简单的神经网络就这样搭建好了。

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

剩下的就是工程师的事了,哈哈,为了防止工程师打你,我们继续探寻这中间层的美妙,为了让大家能够初步的对于神经网络建立概念,我们以下的实现讲解本着最简化原则,目的只是让大家清晰整个神经网络的工作原理,当然如今的技术发展已经迅速而强大,这个留待我们在陆续的笔记中慢慢道来。

在这个例子中,我们不妨选择两层隐藏层,原因是这样利于理解不繁琐,而每层我们都选择是16个神经元,为什么是16个?你理解为我就只有画16个圆的耐心就对了。

那么为什么要分层呢?为什么通过分层这种结构可以达成我们预期的智能效果呢?

我们不仿问下自己:你最期望这些隐藏层做点什么呢?

也许是如下这样:

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

数字9可以分解成为一个“上半圈”和“右下线”

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

数字8可以分解为“上半圈”和“下半圈”

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

数字4可以分解成为几条线

那么我们可以期望第三层神经元是由这些分解的子组件相对应,这样当我们给出一个图片时,如果有一个类似9或者8那样的“上半圈”,就会在第三层有一个明确的“上半圆”神经元的Activation接近1,这还并不能说明任何类似的图片提供时,都会在第三层映射出这种“上半圈模式(pattern)”,但是对于第三层到最后一层,我们至少可以说0到9的数字都可以是第三层这些组件的一种组合,第三层只需要学习怎样的组合对应哪一个数字就行了。

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

当然了,聪明的你一定会发问了:即便是这样,那么就算一个“上半圈”,又怎么识别呢?或者更进一步,在第三层的这些个子组件正确的模式(pattern)应该是什么呢?

我们继续想象,一个“上半圈”也许可以再分解出来多个边线(edge):

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

那么我们的整个期望应该是:当数字9输入后,第二层可以将它分解成为多个边线edge(图中的各种颜色段),第三层这些边线edge又形成了像“上半圈”那样的多个子组件,最后一层组件的组合对应了具体的数字。

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

hm,想一想,还是挺有道理的,如果机器可以这样来识别这些edge和pattern,那差不多可以最终给你一个靠谱的结果咯。

改作业:

机器的识别过程完全不是按照我们以上想象的这种边线和半圈来的!

但是以上的演示有一个道理是正确的:每一层的激活是和它的上一层紧密相关的。这是神经网络机制的核心所在。

再想简单点:

假设我们只是需要在第二层寻找一个神经元,对于第一层输入的各种图片,检查是否拥有一个边线(edge),如图所示,

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

面对不同的图片输入,我们怎么来找这个边线(edge)呢?给第一层的每一个神经元引入一个权重(weight)的概念,这个权重只是一个数值, 举个例子,如果让全部的输入为0,只让边线区域的权重为正数,那么所有像素权重的总和恰好相当于我们要找的区域中的像素值:

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

机器可以不断的调整权重参数去找到边线:

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

在我们建立的这个神经网络中,我们希望activation的数值是在0-1之间,引入sigmoid函数(实际应用中一般是采用的RELU函数,sigmoid计算量太大效率很差很难达成好的效果),在实际的权重求和计算中,有时你也许并不希望总和超过一定范围,通过bias或者我们叫阈值(Threshold)来调控限制。:

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

权重weights告诉你第二层中的这个神经元正在拾取的像素模式,偏值bias告诉你在这个神经元开始获取有价值的激活之前加权和的界限,好了,我们第二层的这个神经元的激活就有眉目了。这只是第二层的一个神经元,同理确定第二层的其他神经元。于是,这其实已经变成了一个线性代数的矩阵求解了:

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

n=784, m=16

就这个简单的神经网络,算一下总共的权重和偏值居然有:

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

这13002个权重和偏值的调试将会让这个神经网络表现出非常不同的结果,我们说机器学习,就是指让机器去寻找正确的权重和偏值,最终正确的识别我们的目标结果。

想想看你自己做下来开始手动调试这13002个参数?你就明白机器的优势了。

那么我们如何训练数据呢?我们将在下一篇文章中分解。

思考:只是一个28pixel的低像素手写图片,我们就需要调整大约13002个参数来学习,2000*2000的高清图片需要多少参数?机器算的过来吗?

比如下图:

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

小灯点亮八卦:

上世纪60年代MIT组织成立了专门研究计算机视觉的夏季课题,当时人们很乐观,觉得人眼识别一张图片太容易了,毫不费力,机器也不会差到哪里去,没想到这一研究就是几十年,1998年任职贝尔实验室的Yang LeCun成功解决了识别手写数字的问题,提出了CNN(Convolutional Neural Network),直到2012年计算机识别图像才有了飞跃的突破和发展,可见科技突破的不易,直到今天,依然还需要更大的努力去突破和解决各种问题。

CNN的提出和应用完美的解决了图像识别的问题,我们将在后续解析CNN,今天让我们记住CNN的重要奠基人:

产品经理能看懂的深度学习笔记一:什么是神经网络Neural Network

https://www.youtube.com/watch?v=aircAruvnKk&t=995s

http://shukra.cedt.iisc.ernet.in/edwiki/Neural_Network_based_classification_of_traffic_signs

https://blog.goodaudience.com/artificial-neural-networks-explained-436fcf36e75

https://en.wikipedia.org/wiki/Neural_network


分享到:


相關文章: