神经网络是深度学习的基础,正是深度学习的兴起,让停滞不前的人工智能再一次的取得飞速的发展。
其实神经网络的理论由来已久,灵感来自仿生智能计算,只是以前限于硬件的计算能力,没有突出的表现,直至谷歌的AlphaGO的出现,才让大家再次看到神经网络相较于传统机器学习的优异表现。
本文主要介绍神经网络中的重要基础概念,然后基于这些概念手工实现一个简单的神经网络。希望通过理论结合实践的方式让大家更容易的理解神经网络。
1. 神经网络是什么
神经网络就像人脑一样,整体看上去非常复杂,但是其基础组成部分并不复杂。其组成部分中最重要的就是神经元(neural),sigmod函数和层(layer)。
1.1. 神经元
神经元(neural)是神经网络最基本的元素,一个神经元包含3个部分:
获取输入:获取多个输入的数据
数学处理:对输入的数据进行数学计算
产生输出:计算后多个输入数据变成一个输出数据
从上图中可以看出,神经元中的处理有2个步骤。第一个步骤:从蓝色框变成红色框,是对输入的数据进行加权计算后合并为一个值(N)。N=x1w1+x2w2𝑁=𝑥1𝑤1+𝑥2𝑤2 其中,w1,w2𝑤1,𝑤2分别是输入数据x1,x2𝑥1,𝑥2的权重。一般在计算N𝑁的过程中,除了权重,还会加上一个偏移参数b𝑏,最终得到:N=x1w1+x2w2+b𝑁=𝑥1𝑤1+𝑥2𝑤2+𝑏
第二个步骤:从红色框变成绿色框,通过sigmoid函数是对N进一步加工得到的神经元的最终输出(M)。
1.2. sigmoid函数
sigmoid函数也被称为S函数,因为的形状类似S形。
它是神经元中的重要函数,能够将输入数据的值映射到(0,1)(0,1)之间。最常用的sigmoid函数是 f(x)=11+e−x𝑓(𝑥)=11+𝑒−𝑥,当然,不是只有这一种sigmoid函数。
至此,神经元通过两个步骤,就把输入的多个数据,转换为一个(0,1)(0,1)之间的值。
1.3. 层
多个神经元可以组合成一层,一个神经网络一般包含一个输入层和一个输出层,以及多个隐藏层。
比如上图中,有2个隐藏层,每个隐藏层中分别有4个和2个神经元。实际的神经网络中,隐藏层数量和其中的神经元数量都是不固定的,根据模型实际的效果来进行调整。
1.4. 网络
通过神经元和层的组合就构成了一个网络,神经网络的名称由此而来。神经网络可大可小,可简单可复杂,不过,太过简单的神经网络模型效果一般不会太好。
因为一只果蝇就有10万个神经元,而人类的大脑则有大约1000亿个神经元,这就是为什么训练一个可用的神经网络模型需要庞大的算力,这也是为什么神经网络的理论1943年就提出了,但是基于深度学习的AlphaGO却诞生于2015年。
2. 实现一个神经网络
了解上面的基本概念只能形成一个感性的认知。下面通过自己动手实现一个最简单的神经网络,来进一步认识神经元,sigmoid函数以及隐藏层是如何发挥作用的。
2.1. 准备数据
数据使用sklearn库中经典的鸢尾花数据集,这个数据集中有3个分类的鸢尾花,每个分类50条数据。为了简化,只取其中前100条数据来使用,也就是取2个分类的鸢尾花数据。