Neuron network
关于神经网络你不能不知道的一切
作者|Kailash Ahirwar
编译|Sambodhi
编辑|Vincent
AI前线导语:理解什么是人工智能,以及机器学习和深度学习是如何影响人工智能的,这是一种荡气回肠的体验。最近,MateLabs联合创始人兼CTO Kailash Ahirwar在Mudium发布了一篇博文《关于神经网络你不能不知道的一切》[1](Everything you need to know about Neural Networks)。
本文涵盖了从神经元到训练轮数,介绍了神经网络的关键名词术语,AI前线也做了一些批注、解释,以飨读者进一步理解、掌握。
神经元(节点)(Neuron(Node)):是神经网络的基本单元,包含一定数量的输入和一个偏置值。当输入一个信号(值),它就乘以一个权重值。如果一个神经元有四个输入,那么它在训练中有四个可调节的权重值。
神经网络中一个神经元的运算
连接(Connections):用于连接两层之间或同层的两个神经元。每个连接总带有一个权重值。训练的目标是更新这个权重值来减少损失(误差)。
偏置(偏移)(Bias(offset)):是神经元的一个额外的输入,其值始终为1,有自己的连接权。这就确保即使所有的输入为0时神经元也会有一个激活函数。
AI前线:注意不要和预测偏差混淆。
激活函数(传递函数)(Activation Function(Transfer Function)):激活函数为神经网络引入非线性特征。它将值压缩到一个更小的范围。一个Sigmoid激活函数的值区间为[0,1]。在深度学习中有很多激活函数,如ReLU、SeLU、TanH等,都比Sigmoid激活函数更为常用。要了解更多激活函数,请参阅MateLabs的《概览深度学习中的激活函数》[2](Secret Sauce behind the beauty of Deep Learning:Beginners guide to Activation Functions)。
AI前线:即将前一层所有神经元激活值的加权和输入到一个非线性函数中,然后向下一层传递该函数的输出值(典型的非线性)。
各种激活函数
基本的神经网络设计
输入层(Input Layer):神经网络的第一层,用于接受输入信号(值)并传递到下一层,对其输入的信号(值)并不执行任何运算,没有自己的权重值和偏置值。在我们的网络中,有四个输入信号为x1、x2、x3、x4。
隐藏层(Hidden Layers):隐藏层的神经元(节点)通过不同的转换方式输入数据。一个隐藏层是一个垂直堆栈神经元集。在上图所示中,有五个隐藏层,第一个隐藏层有四个神经元(节点),第二个有五个神经元,第三个有六个神经元,第四个有四个神经元,第五个有三个神经元,最后一个隐藏层将值传递给输出层。隐藏层中所有的神经元彼此互联,下一层的神经元也是如此,因此我们就有了一个全连接的隐藏层。
AI前线:神经网络中位于输入层(即特征)和输出层(即预测)之间的合成层。一个神经网络包含一个或多个隐藏层。
输出层(Output Layer):是神经网络的最后一层,接收最后一个隐藏层的输入。通过这一层我们可以得到理想范围内的期望数目的值。如上图所示,这个神经网络中的输出层有三个神经元,分别输出为y1、y2、y3。
AI前线:这一层包含整个模型所寻求的答案。
输入形状(Input Shape):指传递给输入层的输入矩阵的形状。我们的神经网络的输入层有四个神经元,预计一个样本的四个值。如果我们一次馈送这个神经网络一个样本,那么它的理想输入形状应该是(1,4,1)。如果我们馈送一百个样本,那么输入形状将是(100,4,1)。不同的库预计有不同格式的形状。
权重(参数)(Weights(Parameters)):表示单元之间连接的强度。如果从节点1到节点2的权重幅度更大,则说明神经元1对神经元2的影响更大。权重降低了输入值的重要性。权重接近0意味着改变这个输入将不会改变输出。负权重意味着增加这个输入将会降低输出。权重决定输入对输出的影响程度。
AI前线:线性模型中的特征系数,或者深度网络中的边缘。线性模型的训练目标是为每个特征确定一个完美的权重。如果权重为0,则对应的特征对模型而言是无用的。
前向传播
前向传播(Forward Propagation):是指将输入值馈送到神经网络的过程,并获得一个我们称之为预测值的输出。前向传播有时亦称为推理。当我们将输入值馈送到神经网络的第一层时,不执行任何运算。第二层从第一层获取值,然后执行乘法、加法和激活运算,并将该值传递给下一层。后续的层重复同样的过程,最终,我们将在最后一层得到输出值。
反向转播
反向传播(Back-Propagation):我们在前向传播之后得到一个输出值,这就是预测值。为计算误差,我们将预测值与真实输出值进行比较。我们使用一个损失函数(下文将提到)来计算误差值。然后我们计算每个误差值的导数和神经网络的每个权重。反向传播应用微分学的链式法则。在链式法则中,首先计算最后一层中每个误差值的导数。我们调用这些导数、梯度,使用这些梯度值计算导数第二层的梯度,重复这一过程,直至获得梯度及神经网络中的每个权重。然后从权重值中减去这个梯度值来降低误差。这样,我们就能不断逼近局部最小值(即最小损失)。
AI前线:神经网络中完成梯度下降的重要算法。首先,在前向传播的过程中计算每个节点的输出值。然后,在反向传播的过程中计算与每个参数对应的误差的偏导数。
学习率(Learning rate):训练神经网络时,通常使用梯度下降优化权重。在每一次迭代中,使用反向传播计算损失函数对每一个权重的导数,并中当前权重减去导数和学习率的乘积。学习率决定了更新权重(参数)值的频率。学习率应该尽可能高,这样就不会耗费太久就可达到收敛,而且也应该尽可能低,从而找到局部最优。
AI前线:学习率是一个重要的超参数。它是通过梯度下降训练模型时使用的一个标量。每次迭代中,梯度下降算法使学习率乘以梯度,乘积叫作gradient step。
精度和召回率
准确率(Accuracy):指测量值对标准值或已知值的接近程度。
AI前线:可以理解为分类模型预测准确的比例。
在多类别分类中,准确率定义如下:
在二分类中,准确率定义如下:
精度(Precision):指两个测试值之间的接近程度,表示测量的可重复性或可再现性。
AI前线:分类模型的一种指标。准确率指模型预测正类时预测正确的频率。即:
召回(灵敏度)(Recall(Sensitivity)):指全部相关实例中被恢复的相关实例的比率。
Ai前线注:分类模型的一个指标,即:
混淆矩阵(Confusion Matrix):Wikipedia[3]解释如下:
机器学习领域和统计分类问题中,混淆矩阵(亦称误差矩阵(error matrix)),是一个算法性能的可视化表格,通常在监督学习中使用(在无监督学习中通常被称为匹配矩阵(matching matrix))。矩阵的每一行表示预测类,每一列表示一个真实类(反之亦然)。采用这个名字是因为易于解读,能很容易地看出系统对两个类别的混淆程度(即将一个类别错误标记为另一个)。
混淆矩阵
AI前线:总结分类模型的预测结果的表现水平(即,标签和模型分类的匹配程度)的NxN表格。混淆矩阵的一个轴列出模型预测的标签,另一个轴列出实际的标签。N表示类别的数量。
收敛(Convergence):指随着迭代的进行,输出越来越接近具体的值。
AI前线:训练过程达到的某种状态,其中训练损失和验证损失在经过了确定的迭代次数后,在每一次迭代中,改变很小或完全不变。换句话说就是,当对当前数据继续训练而无法再提升模型的表现水平的时候,就称模型已经收敛。在深度学习中,损失值下降之前,有时候经过多次迭代仍保持常量或者接近常量,会造成模型已经收敛的错觉。
正则化(Regularization):用于解决过拟合的问题。正则化过程中通过添加一个L1(LASSO)或L2(Ridge)规范到权重向量w(通过给定算法学习到的参数)上,来“惩罚”损失项:
L(损失函数)+λN(w):
此处λ为正则项,N(w)是L1或L2规范。
L(损失函数)+λN(w)-此处λ是正则项,N(w)是L1或L2规范。
归一化(Normalisation):指将一个或多个属性的值缩放到0~1的范围的过程。当尚未知晓数据分布或者分布不是高斯分布(呈钟形曲线)时,规范化就很有用,可加快学习进程。
AI前线:假设某个特征的自然区间是800~6000。通过减法和分割,你可以把那些值标准化到区间-1到+1。参见缩放。
全连接层(Fully Connected Layers):一个层所有节点的激活函数值传递到下一层的每个节点。当第L层所有的节点都与第L+1层所有节点连接时,那么这些层就是全连接层。
全连接层
损失函数/成本函数(Loss Function/Cost Function):损失函数计算单个训练样本的错误,成本函数是整个训练集的损失函数的平均。
-‘mse’:均方误差(Mean Squared Error)
-‘binary_crossentropy’:二分类对数损失(logloss)
-‘categorical_crossentropy’:多分类对数损失(logloss)
模型优化器(ModelOptimizers):优化器是一种搜索技术,用于更新模型的权重。
-SGD:随机梯度下降,支持动量算法。
-RMSprop:自适应学习率的优化法,Geoff Hinton提出。
-Adam:自适应矩估计(Adam)也使用自适应学习率。
性能指标(Performance Metrics):性能指标用于衡量神经网络的性能,包括准确率、损失、验证准确性、验证损失、平均绝对误差、精度、召回率和f1分数等。
批量大小(Batch Size):一次前向/反向传播中的训练样本数。批量越大,则占用的内存量也越大。
AI前线:一个批量中样本的数量。例如,SGD的批量大小为1,而mini-batch的批量大小通常在10-1000之间。批量大小通常在训练与推理的过程中确定,然而TensorFlow不允许动态批量大小。
训练轮数(Training Epochs):指模型在训练数据集上重复训练的次数。
一个轮数就是全部训练示例的一次前向传播和一次反向传播
Neuron network的更多相关文章
- 提高神经网络的学习方式Improving the way neural networks learn
When a golf player is first learning to play golf, they usually spend most of their time developing ...
- Unsupervised Feature Learning and Deep Learning(UFLDL) Exercise 总结
7.27 暑假开始后,稍有时间,“搞完”金融项目,便开始跑跑 Deep Learning的程序 Hinton 在Nature上文章的代码 跑了3天 也没跑完 后来Debug 把batch 从200改到 ...
- 《转》循环神经网络(RNN, Recurrent Neural Networks)学习笔记:基础理论
转自 http://blog.csdn.net/xingzhedai/article/details/53144126 更多参考:http://blog.csdn.net/mafeiyu80/arti ...
- matlab toolboxes 大全
MATLAB Toolboxes top (Top) Audio - Astronomy - BiomedicalInformatics - Chemometrics - Chaos - Chemi ...
- 使用神经网络识别手写数字Using neural nets to recognize handwritten digits
The human visual system is one of the wonders of the world. Consider the following sequence of handw ...
- 深度学习:又一次推动AI梦想(Marr理论、语义鸿沟、视觉神经网络、神经形态学)
几乎每一次神经网络的再流行,都会出现:推进人工智能的梦想之说. 前言: Marr视觉分层理论 Marr视觉分层理论(百度百科):理论框架主要由视觉所建立.保持.并予以解释的三级表象结构组成,这就是: ...
- [C6] Andrew Ng - Convolutional Neural Networks
About this Course This course will teach you how to build convolutional neural networks and apply it ...
- [C2P2] Andrew Ng - Machine Learning
##Linear Regression with One Variable Linear regression predicts a real-valued output based on an in ...
- 《Machine Learning - 李宏毅》视频笔记(完结)
https://www.youtube.com/watch?v=CXgbekl66jc&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49 https://www. ...
随机推荐
- ASP.NET Web Pages:帮助器
ylbtech-.Net-ASP.NET Web Pages:帮助器 1.返回顶部 1. ASP.NET Web Pages - 帮助器 Web 帮助器大大简化了 Web 开发和常见的编程任务. AS ...
- Python软件开发规范
bin 整个程序的执行路口 start.py conf 配置文件 setting.py lib 库 模块与包 common.py sql.py core 核心逻辑 ...
- 利用python,简单的词语纠错
利用python,编写一个简单的词语纠正修改器. 原文:http://norvig.com/spell-correct.html #!/usr/bin/env python # coding=utf- ...
- [UE4]Character,飞行模式。
Character 是pawn的子类,可以行走.跳跃.游泳.飞行的Pawn.
- asp控制项目超时
If Session("username")="" or isnull(Session("username")) Then %> &l ...
- Keras实现简单BP神经网络
BP 神经网络的简单实现 from keras.models import Sequential #导入模型 from keras.layers.core import Dense #导入常用层 tr ...
- 让“懒惰” Linux 运维工程师事半功倍的 10 个关键技巧!
好的Linux运维工程师区分在效率上.如果一位高效的Linux运维工程师能在 10 分钟内完成一件他人需要 2 个小时才能完成的任务,那么他应该受到奖励(得到更多报酬),因为他为公司节约了时间,而时间 ...
- (11/24) css进阶:Less文件的打包和分离
写在前面:在前面我们对css打包和分离进行了描述.此节我们开始学习如何对less文件进行打包和分离. Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性, ...
- 34. CentOS-6.3安装配置Apache2.2.6
安装说明 安装环境:CentOS-6.3安装方式:源码编译安装 软件:httpd-2.2.6.tar.gz | pcre-8.32.tar.gz | apr-1.4.6.tar.gz | apr-u ...
- spring 注解 @NotBlank and BingResult
@NotEmpty用在集合类上面 @NotBlank 用在String上面 @NotNull 用在基本类型上 在 user对象中需要