一、前文回顾
我们到此为止成功搭建了一个简单的神经网络,并且这个神经网络可是识别简单的手写数字,但是这中间也出现了很多新的概念,所以我觉得需要做个总结,顺便完整的回看一下神经网络的具体原理
二、推理与学习
推理就是利用训练好的神经网络对未知的事物进行推理判定,这也是神经网络的终极目的。就好比我已经有一个训练好的识别手写数字的神经网络。然后你随便写个数字,让神经网络去识别,这就是推理过程。
学习就是去教神经网络怎么去识别事物,一个没有经过训练的神经网络就是个一个智障,它没有任何自主识别能力,所以我们得教它,而教的过程就叫学习,或者训练。如果它学会了,这个神经网络就从智障升级为了智能。
三、数据集(DATASET)
数据集这个概念是深度学习经常会听到的名词。
数据集,顾名思义就是数据的集合。因为训练神经网络需要大量的数据(图片,声音等等),所以就把用来训练神经网络的数据叫做数据集。目前有名的数据集主要有下面几个:
1.MNIST是一个手写字符集,也是学习深度学习的入门必备数据集
2.ImageNet项目是一个用于视觉对象识别软件研究的大型可视化数据库。有超过1400万的图像,在至少一百万个图像中,还提供了边界框。
3.COCO数据集是一个大型的、丰富的物体检测,分割和字幕数据集。这个数据集以场景理解为目标,主要从复杂的日常场景中截取图像,然后对图像中的目标位置进行精确的标定。图像包括91类目标,328,000影像和2,500,000个label。目前为止有语义分割的最大数据集,提供的类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个当然还有很多别的领域的数据集,因为我只关心图像处理,所以以上三个都是图像识别方面有名的数据集。
四、神经网络结构
神经网络主要由以下几个部分构成:
1.神经元:神经元主要负责接受上一级神经元的数据,并进行处理(激活)然后传递给下个神经元。
2.权重参数,偏置项:权重参数乘以上一级神经元输出的数据,再加上偏置项以后传递给下一级神经元。
3.激活函数:神经元接收到上一级神经元的数据以后,用激活函数对该数据进行激活。
4.损失函数:一个神经网络的最终输出数据和实际数据的有多大的差别
5.SoftMax函数:通过SoftMax函数求出神经网络每个输出的概率,概率最大代表最有可能是正确答案。
6.批处理:为了节省数据加载速度,每次训练会喂给神经网络一批数据,而不是一个数据。
五、神经网络的训练流程
以训练识别手写数字为例:
①从大量的训练图片中随机选择一部分图片输入神经网络(每个像素值对应一个神经元的输入)。
②随机初始化权重参数和偏置项(一般要求符合高斯分布)
③顺传播从第一层神经元开始,输入数据乘以权重加上偏置项,传递给下一个神经元,然后在神经元内经过激活函数激活,传递给下个神经元,依次类推直到最终输出。
④通过损失函数计算推理结果和正确结果的偏差
⑤如果损失函数没有达到最小值,也就是推理值和真实值差的比较远,为了缩小这个差距,就要根据损失函数在这个点的梯度值相应的更新权重参数。
⑥逆传播通过误差逆传播方法求得每个权重参数的微分值
⑦根据⑥求得的微分值更新权重参数⑧回到第三步
六、神经网络的瓶颈
对于简单的图像识别,普通的神经网络可以达到很高的精度。但是对于更大更复杂的图像,普通的神经网络就力不从心了。为什么普通神经网络会遇到瓶颈,怎么解决?下节再讲。
コメント