前言
深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artificial Intelligence)
深度学习与神经网络
神经网络:一种可以通过观测数据使计算机学习的仿生语言范例
深度学习:一组强大的神经网络学习技术
神经网络和深度学习目前提供了针对图像识别,语音识别和自然语言处理领域诸多问题的最佳解决方案。传统的编程方法中,我们告诉计算机如何去做,将大问题划分为许多小问题,精确地定义了计算机很容易执行的任务。而神经网络不需要我们告诉计算机如何处理问题,而是通过从观测数据中学习,计算出他自己的解决方案。今天,深度神经网络和深度学习在计算机视觉、语音识别和自然语言处理等许多重要问题上取得了出色的表现。
初识神经网络
人类的视觉系统是世界上最棒的系统之一,比如下列一串手写数字:
大多数人都可以一眼看出它是504192。在我们大脑的每一个半球,都有主要的视觉皮质V1V1,它包含了1.4亿个神经元,在这些神经元之间有数百亿的接触。然而人类的视觉不仅仅包含了V1V1,而是一系列的视觉皮质V1,V2,V3,V4,V5V1,V2,V3,V4,V5,逐步进行更复杂的图像处理。我们大脑里有一台超级计算机,通过数亿年的进化,可以很好的适应这个视觉世界。识别手写数字并不容易,我们人类惊人地可以理解我们眼睛所看到的东西,但这些工作都是在我们不知不觉中就完成了,我们根本不知道我们大脑完成了多么负责的工作。
神经网络解决这类问题通过不一样的方式。思想是把大量的手写数字作为训练样本,然后生成一个可以通过训练样本学习的系统。换句话说,神经网络使用样本自动地推断出识别手写数字的规则。此外,通过增加训练样本的数量,该网络可以学到更多,并且更加准确。
神经网络的架构
先解释一下网络中的各部分的专业术语。假设我们有一个网络:
最左边的一层称为输入层,位于这一层的神经元称为输入神经元。最右边的输出层包含了输出神经元,本例只有一个输出神经元。中间的层被称为隐藏层,因为这些神经元既不是输出也不是输入。隐藏层听起来很神秘,但是他其实就只意味着既不是输入也不是输出而已。上图的神经网络中只包含了一个隐藏层,但是有些网络有许多隐藏层,比如下图的四层网络结构,含有两个隐藏层:
网络中的输入和输出层一般都被设计的很简单。比如:假设我们试图识别一幅图像是否是9,一个自然的方法就是将该图片的灰度值编码作为神经元的输入。如果这个图片是64X64的灰度图,那么我们的输入神经元就有64X64=4096个输入神经元,它的值随着灰度在0到1里适当的变化。输出神经元只有一个,输出的值小于0.5表示这个数字不是9,反之就是9.
虽然输入输出层的设计很简单,但是隐藏层的设计却是门艺术。我们不可能通过一些简单的经验法则来总结隐藏层的设计过程。相反,神经网络的研究人员已经开发了隐藏层的许多的最优设计规则,这可以帮助人们从他们的网络中的到预期的行为。
深度神经网络搭建神器Tensorflow2.0 与 Pytorch
最初Tensorflow在1.x的版本上基于静态图的概念搭建神经网络的训练的,那时相比Pytorch而言在调试上可谓是比较不便。2.0之后Tensorflow才将架构转向动态图的理念。由于Pytorch的入门已比较容易,那接下来我们就使用Tensorflow2.0来创建一个简单版深度学习神经网络:
首先: Anaconda和TF2.0环境安装
然后: 搭建一个一层卷积层,一层池化层,和2个全连接层的基础神经网络:
最后: 打印一下该基础神经网络的网络信息:
至此一个深度学习神经网络就搭建好了。经典的深度学习神经网络比方说Resnet(18,34,50,101,152), MobileNet(v1,v2,v3)......等网络结构各不相同。可以使用迁移学习在tf.karas中找到已经官方话的神经网络模板,也可以自定义按上文索迹进行自我搭建。目的,都是一样:对图像中的特征信息进行提取,归类。不同的神经网络模型各自经过千百次实验,效果最佳的神经网络和输入参数被筛选和保留下来用做后续AI任务和发展贡献。