今天跟大家分享下我学习神经网络的一些个人总结,希望能通过这篇博客帮助新手直接搞懂神经网络!
一、神经网络解决什么问题?
之前跟大家分享过多项式回归预测房价和逻辑回归分类数据的例子,在这两个问题中我们假设问题的输入特征很少:
- 预测房价的输入特征:卧室数量、房屋面积、房屋楼层
- 逻辑回归分类数据的输入特征:2 类数据,即 2 分类问题
在预测房价的例子中,我们的假设函数有 3 个输入特征:
h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 h_\theta(x) = \theta_0x_0 + \theta_1x_1 + \theta_2x_2 +\theta_3x_3 hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3
可是在实际的机器学习应用中,要解决的问题通常有很多很多特征(比如图像有上百万个像素点作为输入特征),这时假设函数就变为非常复杂的非线性函数:
h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 x 2 + θ 4 x 1 x 3 + . . . θ n x 1 x n + . . . h_\theta(x) = \theta_0x_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_1x_2 + \theta_4x_1x_3 + ... \theta_nx_1x_n + ... hθ(x)=θ0x0+θ1x1+θ2x2+θ3x1x2+θ4x1x3+...θnx1xn+...
这种类型的非线性假设函数组合的特征会非常多,以至于用普通的线性回归和逻辑回归算法计算会很慢,效率低下,所以为了解决复杂的非线性问题,科学家们设计出了神经网络。
神经网络的作用就是在在保证计算效率的前提下解决复杂的、有非常多输入特征的非线性问题,这包括分类问题和回归问题。
比如预测一个图像中动物的类别是猫还是狗,对于人来说很容易,可是要让机器像人一样识别猫狗可不容易,而神经网络就具备这种识别能力,是不是很神奇呢?
下面就来正式学习神经网络的基础,登龙带你由浅入深一步一步推导,非常容易,千万不要被网络结构图吓到哈 = =!
二、神经元模型
2.1 大脑中的神经元
在学习神经网络之前,先来看看单个神经元是如何工作的。
在生物课上,我们知道人类的大脑中含有处理信息的神经网络,而神经网络又是由非常多单个神经元连接而成,每个神经元可以看做是一个单独的处理单元,单个神经元结构图如下:
那么既然是处理单元,肯定有输入和输出,所以科学家们给神经元结构做了如下定义:
- 树突(数据输入):每个神经元通过树突来接收一个或多个其他神经元的轴突输出
- 轴突(数据输出):每个神经元的轴突能输出信息,来作为另一个神经元的树突输入
在神经元之间数据的传递是通过微弱的电流,术语叫「动作电位」来传递的,这里就不展开解释了。
关于单个神经元了解这些足够了,接着来看下机器学习中的神经元是怎样定义的。
2.2 人工神经元模型(感知器)
科学家们通过模拟人脑中的神经元结构,设计出了能在计算机中表示的单个人工神经元,结构如下:
我来解释下这个结构:
- x 1 . . . x 3 x_1 ... x_3 x1...x3 :神经元的输入,类似人脑神经元的树突
- x 0 = 1 x_0 = 1 x0=1:人为加上的偏置单元,值是常数,以后会介绍它的作用
- w 0 . . . w 3 w_0 ... w_3 w0...w3:偏置单元和输入单元的权重值,可以理解为人脑神经元之间「动作电位」传递对当前神经元的影响大小
- s u m sum sum:对输入值和权重做加权求和,可以理解为人脑神经元对所有的树突传来的信息做加权处理
- g ( x ) g(x) g(x):激活函数,用来确定该神经元的输出,相当于人脑神经元的细胞核来决定产生什么信息输出到轴突上
可以看出人工设计的神经元基本就是模仿了人脑神经元的结构,只不过多了一个偏置单元 x 0 x_0