• 人工神经网络算法实战教程


    神经网络(Artificial Neural Network,也称为人工神经网络,简称ANN)具有通过示例学习能力。ANN是受生物神经元系统启发的的信息处理模型,它由大量高度互联的处理元素组成,这些处理元素被称神经元,整体协作用于解决实际问题。
    它遵循非线性路径,并在整个节点中并行处理信息。神经网络是一个复杂的自适应系统,意味着它有能力通过调整输入的权重来改变其内部结构。

    ANN主要用于解决对人很容易但对机器很难的问题,如:识别猫狗图片、数字图片。这些问题通常也称为模式识别,广泛应用于光学字符识别(OCR, optical character recognition)、物体检测等。本文主要介绍ANN并通过R示例介绍其实现过程。

    介绍神经网络

    1943年,沃伦·麦卡洛克(Warren McCulloch)和沃尔特·皮茨(Walter Pitts)建立了首个神经元数学模型。在他们的研究论文A logical calculus of the ideas immanent in nervous activity中,描述了神经元的简单数学模型,它代表了神经系统中接受输入、处理输入并返回输出的单个细胞,该模型被称为McCulloch-Pitts神经模型。

    神经网络是一种受人脑启发而执行特定任务或功能的算法,它需要通过学习的过程再来进行计算。神经网络包括一组连接的输入/输出单元,其中每个连接都有一个与之相关的权值。在学习阶段调整连接节点的权值拟合训练模型,在预测阶段对给定输入预测其正确分类标签。

    人脑由数十亿处理信息的神经元细胞组成,每个神经元细胞被认为是一个简单的处理系统。神经元通过信号传递信息,它们相互连接形成生物神经网络,这种并行交互的系统使得大脑能够思考和处理信息。一个神经元的树突(Dendrites)接收另一个神经元的输入信号,并根据这些输入对另一个神经元的轴突(axon)输出响应。
    在这里插入图片描述

    树突接收来自其他神经元的信号,细胞体将所有输入信号相加产生输出,当和达到阈值时轴突通过输出。突触(Synapse,来源于希腊语,意思是连接)是神经元相互作用的一个点,它向另一个神经元传递信号。
    在这里插入图片描述
    其中 y = ∑ ( w e i g h t ∗ i n p u t ) + b i a s {∑(weight * input) + bias} (weightinput)+bias

    这里的x1, x2 …… Xn是输入变量,w1 w2 …… Wn是各自输入的权重。b为偏置,与加权输入相加形成净输入,偏置和权值都是神经元的可调节参数。参数调整采用一定的学习规则。神经元的输出可以从负无穷到正无穷,神经元不知道边界,所以需要在神经元输入和输出之间有一个映射机制,这种映射机制称为激活函数。

    前向和反向传播

    人工神经网络主要有两类:前向传播和反向传播。前向传播神经网络非递归的网络,前一层神经元只与下一层神经元相连,它们不形成循环,信号仅向输出层单向传播。

    反向传播神经网络包含循环,信号通过在网络中引入环路进行双向传播,从而导致网络行为基于输入信号随着时间推移而改变。反向传播神经网络又称循环神经网络。
    在这里插入图片描述

    激活函数

    激活函数用局部感应来定义神经元输出。激活函数给神经元引入了非线性因素,使得神经网络可以逼近任何非线性函数,让神经网络可以应用到众多的非线性模型中。下面介绍常用的几种激活函数:

    • 恒等函数:它总是返回和其输入相同的值。换句话说,恒等函数为函数f(x) = x,输入等于输出。

    • 阶跃函数:如果输出在特定阈值之上则输出为真(被激活),反之则输出假(没有被激活),作为分类器非常有用。

    • Sigmoid函数:是常见的S型函数,也称为S型生长曲线。Logistic函数和Tanh函数常用作Sigmoid函数。主要为输出值范围不同,一种输出范围为[0,1],另一种范围为[-1,1]。

    • 斜坡函数(ramp function):斜坡函数名称来源于其图形外观。它将负输入映射为0,将正输入映射为相同的输出。

    • ReLU函数:它是使用最多的激活函数。它将负输入映射为0,将正输入映射为相同的输出。
      在这里插入图片描述

    R 实现神经网络示例

    首先需要安装加载neuralnet包,然后创建示例数据。

    示例数据包括两类变量,特征变量和标签变量。特征变量包括知识技能和沟通交流两方面的得分,标签变量为二值标签(是否为尖子生)。为了简化,示例数据仅包括6条的数据。

    tScorecScoretopStu
    20901
    10200
    30400
    20500
    80501
    20801

    下面代码主要实现神经网络分类模型,neuralnet函数的调用形式如下:

    nn=neuralnet(topStu ~ tScore + cScore, data=df, hidden=3, act.fct = "logistic", linear.output = FALSE)
    
    • 1

    第一个参数指定标签和特征变量,data设置数据集,hidden指定隐藏层数量为3。
    act.fct指定激活函数平滑结果;linear.output为False表示使用act.fct,设置True则不使用。

    其他代码都加了注释,完整代码如下:

    # 加载库
    library(neuralnet)
    
    # 创建示例数据
    tScore <- c(20,10,30,20,80,30)
    cScore <- c(90,20,40,50,50,80)
    topStu <- c(1,0,0,0,1,1)
    
    # 组合为数据框
    df <- data.frame(tScore, cScore, topStu)
    
    # 拟合神经网络模型
    nn <- neuralnet(topStu ~ tScore + cScore, data=df, hidden=3, act.fct = "logistic", linear.output = FALSE)
    
    # 画出神经网络图
    plot(nn)
    
    # 创建测试数据
    tScore <- c(30, 40, 85)
    cScore <- c(85, 50, 40)
    test <- data.frame(tScore, cScore)
    
    ## 使用神经网络模型预测
    Predict <- compute(nn, test)
    Predict$net.result
    
    # 转换输出概率为标签,阈值设置为0.5
    prob <- Predict$net.result
    pred <- ifelse(prob>0.5, 1, 0)
    pred
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

    神经网络使用场景

    神经网络更灵活,既可以用于回归问题,也可以用于分类问题。神经网络适合于图像等输入量较大的非线性数据集,神经网络可以处理任意数量的输入和层,神经网络采用并行方式执行。

    当然也有很多替代算法,如支持向量机,决策树和回归算法,这些算法简单,快速,易于训练,并提供更好的性能。神经网络则是黑盒子,需要更多时间来训练模型,同时会占用更多计算能力;神经网络比其他机器学习算法需要更多样本数据,神经网络只能用于数值输入和非缺失值数据集。一位著名的神经网络研究者说: “神经网络是解决任何问题的第二好方法,最好的方法是真正理解问题所在。”

    神经网络应用场景非常多,主要包括:

    • 模式识别: 神经网络非常适合用于人脸识别、目标检测、指纹识别等模式识别问题。

    • 异常检测: 神经网络擅长模式检测,它们可以很容易地检测出不符合一定模式的异常模式。

    • 时间序列预测: 神经网络可以用于预测时间序列问题,如股票价格,天气预报。

    • 自然语言处理: 神经网络在自然语言中有广泛的应用。

    总结

    恭喜你坚持读到结尾,给自己点个赞吧。本文介绍了神经网络的概念:前向和反向神经网络,激活函数等。并提供R语言实现示例以及神经网络的应用场景。希望你学习后能够应用神经网络算法分析自己的数据集,感谢阅读。

  • 相关阅读:
    WSL2配置图形界面-MATE
    冰蝎加密 WebShell 过杀软
    Java刷题面试系列习题(四)
    利用卷神经网络实现IOSLab数字手写图像识别
    关系数据库SQL五条经验教训
    CImageList 图像列表
    zookeeper重启,线上微服务全部掉线,怎么回事?
    微服务框架-基于SpringCloudAlibaba的微服务架构
    【Two Stream network (Tsn)】(二) 阅读笔记
    第十四届蓝桥杯模拟赛(第二期)——C语言版
  • 原文地址:https://blog.csdn.net/neweastsun/article/details/125471915