独家连载 | 单层感知器与线性神经网络(续)!

2024-03-10 14:38

本文主要是介绍独家连载 | 单层感知器与线性神经网络(续)!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:让我们基于上次没有讲完的单层感知器与线性神经网络继续。

3.2.6学习率

学习率是人为设定的一个值,主要是在训练阶段用来控制模型参数调整的快慢。关于学习率主要有3个要点需要注意:
1.η取值一般取0-1之间;
2.太大容易造成权值调整不稳定;
3.学习率太小,模型参数调整太慢,迭代次数太多。

你可以想象一下在洗热水澡的时候:如果每次调节的幅度很大,那水温要不就是太热,要不就是太冷,很难得到一个合适的水温;如果一开始的时候水很冷,每次调节的幅度都非常小,那么需要调节很多次,花很长时间才能得到一个合适的水温。学习率的调整也是这样一个道理。

图3.5表示不同大小的学习率对模型训练的影响:

图3.5 不同那那个大小的学习率对模型训练的影响

图中的纵坐标loss代表代价函数,在后面的章节中有更详细的介绍,这里我们可以把它近似理解为模型的预测值与真实值之间的误差,我们训练模型的主要目的就是为了降低loss值,减少模型预测值与真实值之间的误差。横坐标Epoch代表模型的迭代周期,把所有训练数据都训练一遍可以称为迭代了一个周期。

从图中我们可以看到,如果使用非常大的学习率来训练模型,loss会一直处于一个比较大的位置,模型不能收敛,这肯定不是我们想要的结果。如果使用比较大的学习率来训练模型,loss会下降很快,但是最后loss最终不能得到比较比较小的值,所以结果也不理想。如果使用比较小的学习率来训练模型,模型收敛的速度会很慢,需要等待很长时间模型才能收敛。最理想的结果是使用合适的学习率来训练模型,使用合适的学习率,模型的loss值下降得比较快,并且最后的loss也能够下降到一个比较小的位置,结果最理想。

看到这里大家可能会有一个疑问,学习率的值到底取多少比较合适?这个问题其实是没有明确答案的,需要根据建模的经验以及测试才能找到合适的学习率。不过学习率的选择也有一些小的trick可以使用,比如说最开始我们设置一个学习率为0.01,经过测试我们发现学习率太小了需要调大一点,那么我们可以改成0.03。如果0.03还需要调大,我们可以调到0.1。同理,如果0.01太大了,需要调小,那么我们可以调到0.003。如果0.003还需要调小,我们可以调到0.001。所以常用的学习率可以选择:

1,0.3,0.1,0.03,0.01,0.003,0.001,0.0003,0.0001 …

当然这也不是绝对的,其他的学习率的取值你也可以去尝试。

####3.2.7模型的收敛条件

通常模型的收敛条件可以有以下3个:

  1. loss小于某个预先设定的较小的值;

  2. 两次迭代之间权值的变化已经很小了;

  3. 设定最大迭代次数,当迭代超过最大次数就停止。

第一种很容易理解,模型的训练目的就是为了减少loss值,那么我们可以设定一个比较小的数值,每一次训练的时候我们都同时计算一下loss值的大小,当loss值小于某个预先设定的阈值,就可以认为模型收敛了。那么就可以结束训练。

第二种的意思是,每一次训练我们可以记录模型权值的变化,如果我们发现两次迭代之间模型的权值变化已经很小,那么说明模型已经几乎不需要做权值地调整了,那么就可以认为模型收敛,可以结束训练。

第三种是用得最多的方式。我们可以预先设定一个比较大的模型迭代周期,比如迭代100次,或者10000次,或者1000000次等(需要根据实际情况来选择)。模型完成规定次数的训练之后我们就可以认为模型训练完毕。

####3.2.8超参数(hyperparameters)和参数(parameters)的区别

超参数是机器学习或者深度学习中经常用到的一个概念,我们可以认为是根据经验来人为设置的一些模型的参数。比如说前面提到的学习率,学习率需要根据经验来人为设置。比如模型的迭代次数,也是需要在模型训练之前预先进行人为设置。

而前面提到的权值和偏置值则是参数,一般我们会给权值和偏置值进行随机初始化赋值。模型在训练过程中根据训练数量会不断调节这些参数,进行自动学习。

####3.2.9单层感知器分类案例

题目:假设我们有4个数据2维的数据,数据的特征分别是(3,3),(4,3),(1,1),(2,1)。(3,3),(4,3)这两个数据的标签为1,(1,1),(2,1)这两个数据的标签为-1。构建神经网络来进行分类。

思路:我们要分类的数据是2维数据,所以只需要2个输入节点,我们可以把神经元的偏置值也设置成一个输入节点,使用3.2.3中的方式。这样我们需要3个输入节点。

输入数据有4个(1,3,3),(1,4,3),(1,1,1),(1,2,1)

数据对应的标签为(1,1,-1,-1)

初始化权值w1,w2,w3取0到1的随机数

学习率lr(learning rate)设置为0.1

激活函数为sign函数

我们可以构建一个单层感知器如图3.6所示:

 图3.6 单层感知器

代码3-3:单层感知器案例

import numpy as np
import matplotlib.pyplot as plt
# 定义输入,我们习惯上用一行代表一个数据
X = np.array([[1,3,3],[1,4,3], [1,1,1],[1,2,1]]
# 定义标签,我们习惯上用一行表示一个数据的标签
T = np.array([[1],[1],[-1],[-1]])
# 权值初始化,3行1列
# np.random.random可以生成0-1的随机数
W = np.random.random([3,1])
# 学习率设置
lr = 0.1
# 神经网络输出
Y = 0
# 更新一次权值
def train():# 使用全局变量X,Y,W,lrglobal X,Y,W,lr# 同时计算4个数据的预测值# Y的形状为(4,1)-4行1列Y = np.sign(np.dot(X,W))# T - Y得到4个的标签值与预测值的误差E。形状为(4,1)E = T - Y# X.T表示X的装置矩阵,形状为(3,4)# 我们一共有4个数据,每个数据3个值。定义第i个数据的第j个特征值为xij# 如第1个数据,第2个值为x12# X.T.dot(T - Y)为一个3行1列的数据:# 第1行等于:x00×e0+x10×e1+x20×e2+x30×e3,它会调整第1个神经元对应的权值# 第2行等于:x01×e0+x11×e1+x21×e2+x31×e3,它会调整第2个神经元对应的权值# 第3行等于:x02×e0+x12×e1+x22×e2+x32×e3,它会影调整3个神经元对应的权值# X.shape表示X的形状X.shape[0]得到X的行数,表示有多少个数据# X.shape[1]得到列数,表示每个数据有多少个特征值。# 除以X.shape[0]相当于是求所有样本权值调整的累加结果的平均值delta_W = lr  (X.T.dot(E)) / X.shape[0]W = W + delta_W
# 训练100次
for i in range(100):# 更新一次权值train()# 打印当前训练次数print('epoch:',i + 1)# 打印当前权值print('weights:',W)# 计算当前输出Y = np.sign(np.dot(X,W))# .all()表示Y中的所有值跟T中所有值都对应相等,结果才为真if(Y == T).all():print('Finished')# 跳出循环break
#————————以下为画图部分————————#
# 正样本的xy坐标
x1 = [3,4]
y1 = [3,3]
# 负样本的xy坐标
x2 = [1,2]
y2 = [1,1]
# 计算分界线的斜率以及截距
# 因为正负样本的分界是0,所以分界线的表达式可以写成:
# w0 × x0 + w1 × x1 + w2 × x2 = 0
# 其中x0为1,我们可以把x1,x2分别看成是平面坐标系中的x和y
# 可以得到:w0 + w1×x + w2 × y = 0
# 从而推导出:y = -w0/w2 - w1×x/w2,因此可以得到
k = -W[1]/W[2]
d = -W[0]/W[2]
# 设定两个点
xdata = (0,5)
# 通过两个点来确定一条直线,用红色的线来画出分界线
plt.plot(xdata,xdata k+d,'r')
# 用蓝色的点画出正样本
plt.scatter(x1,y1,c='b')
# 用黄色的点来画出负样本
plt.scatter(x2,y2,c='y')
# 显示图案
plt.show()

程序的输出结果为:

epoch: 1
weights: [[-0.06390143][ 0.58589308][ 0.25649672]]
epoch: 2
weights: [[-0.16390143][ 0.43589308][ 0.15649672]]
epoch: 3
weights: [[-0.26390143][ 0.28589308][ 0.05649672]]
epoch: 4
weights: [[-0.36390143][ 0.13589308][-0.04350328]]
epoch: 5
weights: [[-0.31390143][ 0.28589308][ 0.10649672]]
epoch: 6
weights: [[-0.41390143][ 0.13589308][ 0.00649672]]
Finished

因为权值的初始化使用的是随机的初始化方式,所以每一次训练的周期以及画出来的图可能都是不一样的。这里我们可以看到单层感知器的一个问题,虽然单层感知器可以顺利地完成分类任务,但是使用单层感知器来做分类的时候,最后得到的分类边界距离蓝色的边界点比较近,而距离黄色的边界点比较远,并不是一个特别理想的分类效果。

图3.7中的分类效果应该才是比较理想的分类效果,分界线距离黄色和蓝色两个类别边界点的距离是差不多的。

图3.7 单层感知器比较理想的分类边界

作者介绍

这篇关于独家连载 | 单层感知器与线性神经网络(续)!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/794545

相关文章

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

【高等代数笔记】线性空间(一到四)

3. 线性空间 令 K n : = { ( a 1 , a 2 , . . . , a n ) ∣ a i ∈ K , i = 1 , 2 , . . . , n } \textbf{K}^{n}:=\{(a_{1},a_{2},...,a_{n})|a_{i}\in\textbf{K},i=1,2,...,n\} Kn:={(a1​,a2​,...,an​)∣ai​∈K,i=1,2,...,n

机器学习之监督学习(三)神经网络

机器学习之监督学习(三)神经网络基础 0. 文章传送1. 深度学习 Deep Learning深度学习的关键特点深度学习VS传统机器学习 2. 生物神经网络 Biological Neural Network3. 神经网络模型基本结构模块一:TensorFlow搭建神经网络 4. 反向传播梯度下降 Back Propagation Gradient Descent模块二:激活函数 activ

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04

基于深度学习 卷积神经网络resnext50的中医舌苔分类系统

项目概述 本项目旨在通过深度学习技术,特别是利用卷积神经网络(Convolutional Neural Networks, CNNs)中的ResNeXt50架构,实现对中医舌象图像的自动分类。该系统不仅能够识别不同的舌苔类型,还能够在PyQt5框架下提供一个直观的图形用户界面(GUI),使得医生或患者能够方便地上传舌象照片并获取分析结果。 技术栈 深度学习框架:采用PyTorch或其他

图神经网络(2)预备知识

1. 图的基本概念         对于接触过数据结构和算法的读者来说,图并不是一个陌生的概念。一个图由一些顶点也称为节点和连接这些顶点的边组成。给定一个图G=(V,E),  其 中V={V1,V2,…,Vn}  是一个具有 n 个顶点的集合。 1.1邻接矩阵         我们用邻接矩阵A∈Rn×n表示顶点之间的连接关系。 如果顶点 vi和vj之间有连接,就表示(vi,vj)  组成了

带头结点的线性链表的基本操作

持续了好久,终于有了这篇博客,链表的操作需要借助图像模型进行反复学习,这里尽可能的整理并记录下自己的思考,以备后面复习,和大家分享。需要说明的是,我们从实际应用角度出发重新定义了线性表。 一. 定义 从上一篇文章可以看到,由于链表在空间的合理利用上和插入、删除时不需要移动等优点,因此在很多场合下,它是线性表的首选存储结构。然而,它也存在某些实现的缺点,如求线性表的长度时不如顺序存储结构的

自然语言处理系列六十三》神经网络算法》LSTM长短期记忆神经网络算法

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十三神经网络算法》LSTM长短期记忆神经网络算法Seq2Seq端到端神经网络算法 总结 自然语言处理系列六十三 神经网络算法》LSTM长短期记忆神经网络算法 长短期记忆网络(LSTM,Long S