神经网络——单层感知器 10行代码完成初代神经网络

举报
the-order 发表于 2022/04/13 12:39:30 2022/04/13
【摘要】 神经网络——单层感知器 10行代码完成初代神经网络

@[TOC](神经网络——单层感知器

1 感知器(Perceptron)

感知器(Perceptron)是一种具有单层计算单元的神经网络,只能用来解决线性可分的
二分类问题。在高维空间中的模式分类相当于用一个超平面将样本分开。如果二类模式
线性可分,则算法一定收敛。单层感知器的结构和功能都非常简单,在目前解决实际问
题中很少被采用,但是由于其较易学习和理解,是研究其他网络的基础。

2 研究步骤

  1. 理解结构,类似于之前的神经元模型,用于解决二分类线性可分问题,或者是线性函
    数逼近问题
  2. 确定激活函数,这里常用的是单极性(或双极性)阈值函数:
    在这里插入图片描述
    3 确定输出的计算公式:
    在这里插入图片描述
  3. 确定权值调整公式:先要定义学习信号,这里学习信号定义为期望输出和实际输出的
    差: 。则权值调整公式为;
    在这里插入图片描述
    4 学习算法步骤
    1 观察输入向量,一般需要标准化,当量纲差别不大时不需要标准化。
    2 初始化:
  • 选取学习率η(0 < η < 1),η值太大会影响训练的稳定性、太小会降低收敛速度
  • 初始化权值向量Wj = (ω0j ,ω1j ,ω2j , . . . ,ωnj )T
    , 设置为全零值或者较小的非零随
    机数
  • 设定精度控制参数ϵ(相应的循环时精度控制变量d = ϵ + 1) - 设定最大迭代次数M

计算输出:输入样本: x p = ( 1 , x 1 p , x 2 p , . . . . . . , x n p ) T x^p=(-1 , x_1^p,x_2^p,......,x_n^p)^T ,计算出节点j的实际输出: o j p o_j^p
4 根据选择的学习方法调整权值: W j = W j + η ( d j p d o p ) W_j=W_j+η(d_j^p-d_o^p) ,其中 d j d_j 是第 个样本在
j节点 的期望输出

5 循环调整权值直到满足收敛条件,终止循环。收敛条件是:
误差小于某个预先设定的精度控制参数: d j o j < ϵ |d_j-o_j|<ϵ (这里为了防止偶然因素
导致的提前收敛,可以设定误差连续若干次小于 ,为了防止算法不一定收敛而
进入死循环), 或者是累积误差小于精度控制参数:
在这里插入图片描述
迭代次数达到设定值 (可以两个条件混合使用)

3 R 代码实现

使用R自带的数据集iris,划分x和y

# Take iris as an example
#clean resources
rm(list=ls())
#display the first 5 items
head(iris)

adata<-iris[,1:4]
colnames(adata)<-c("x1","x2","x3","y")

标准化数据消除量纲的影响

#Standardized data
adata[,1:3]<-scale(adata[,1:3])

设置 x 0 x_0 为阈值,(类比线性回归截距项),使得系数更加自由(没有 x 0 x_0 一定回过原点,给函数加了限制条件,设置 x 0 x_0 函数更自由)

adata<-cbind(x0=1,adata)
#select stop residual

初始化残差和,学习率,随机权重

eps=5.5
#initialization residuals
d=eps+1
##learning efficient
eta=0.005
##random weight
w=runif(4,0,1)

依靠公式进行感知器神经网络

while(d>=eps and i <200){
  d<-0;i=1
  for(i in 1:nrow(adata)){
    xi=adata[i,1:4]
    delta=adata[i,5]-sum(xi*w)
    w=w+eta*delta*xi
    d=d+delta^2
  }
   i=i+1
  print(d)
}
# view weight
w

在这里插入图片描述

#Residual sum
sum((adata[,5]-(as.matrix(adata[,1:4]))%*%t(w))^2)
#linear regression
lma<-lm(y~x1+x2+x3,data=adata)
lma
sum(summary(lma)$residual^2)

在这里插入图片描述
对比和线性回归的区别,发现和线性回归差别不大,线性回归更优(因为线性回归是最小二乘法得出的最优解)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。