神经网络简介
神经网络由生物神经获得启发。深度神经网络包含大量和多层神经元,组成一个网络。这里先介绍单个神经元的运行模式。
图中神经元获得数据点的各项特征值(feature)作为输入x1,x2..,神经元的输出y是输入x1, x2…的函数。而w1,w2,为模型模型的参数,输出y与输入x的函数关系可以表示为:
h(x)是神经元的激发函数,例如线性函数:
实际使用时,则用非线性激发函数使模型具有学习能力。有下面两种常见非线性函数。
如果我们的神经元是一个分类器(classifier), y > 0 意味输入为类别0,而y
例子:比如这里机器学习任务是根据特征区分用户性别,则输入x1, x2..可以为用户的年龄,身高, 收入等变量。而这里的超平面的含义是,如果
w1 * 年龄 + w2 * 身高 + w3 * 收入 + ... > θ
则模型判断该用户为女性, 反之判断为男性。
下面的动图说明了神经网络如何获得预测并进行参数训练:
超平面是输入变量x1,x2的函数h(x1,x2..),为了获得更好的模型学习能力,我们需要添加隐藏层(hidden layer)。意思是前一层的输出y为下一层神经元的输入。同时激发函数也需要选择非线性函数,比如sigmoid函数或relu函数。
模型的参数来源于根据data进行的训练,初始时我们为模型的参数进行随机化赋值,然后将模型在大量数据上进行训练。我们根据问题需要定义损失函数Loss function。对于分类问题,常见的Loss function为交叉熵cross entropy。对于回归问题,常见的Loss function为均方误差mean squared error。
损失函数可以看做是模型在数据集上的得分,Loss值越大,模型表现越差。而我们需要往模型朝使Loss减小的方向调整参数。因为Loss是参数w的函数,所以通过求导数(gradient)我们可以得出为了使Loss减小而调整w的方向,在得到导数gradient后,则可以用gradient descent方法优化模型参数。
对于神经网络,为了得到输出,输入沿着一层层神经元传递,下一层的输出是上一层的输入,而这个过程被称为前向传递(forward propagation)。而为了得到Loss对于参数的导数,我们进行反向传递(back propagation)。
这里的可视化模拟程序说明了不同的神经网络结构对于模型表现的影响。例如只用线性激发函数无法学习非线性超平面。
通过使用非线性激发函数可以学习非线性超平面。
通过添加更多隐藏层,神经元,使用非线性feature:例如添加(x1x2, sin(x1), sin(x2)等feature,可以使模型变得更复杂,可以学习更加复杂的输入x与输出y的关系,使模型的表达能力更强。而为了避免overfitting和进行特征选择,则可以使用L1和L2正则化。这里在深入的神经网络教程中都有介绍。
神经网络是机器学习中应用最广,最广泛的一类模型。其中深度卷积神经网络(许多隐藏层以及利用卷积算法作为神经元函数)在计算机视觉方向获得巨大成功。而这也是AI和deep learning最为成功的应用之一。而循环神经网络RNN则在处理时间序列,机器翻译,自然语言处理上获得了很多成功应用。接下来的几期推文,会介绍神经网络在不同方面的有趣应用。
关于data science&AI方面推文的建议,或是讨论data science&AI方面的问题,欢迎联系CUCS学术部:田轶凡。 WeChat:tyfustc123
文案|学术部 田轶凡
整理编辑|宣传部 刘通
CUCS / 2019.02
Copyright © Chinese Union in Computer Science 2019
领取专属 10元无门槛券
私享最新 技术干货