用 PyTorch 构建液态神经网络(LNN)

用 PyTorch 构建液态神经网络(LNN)

在这里插入图片描述

文章目录

    • 什么是液态神经网络
    • 为什么需要液态神经网络
    • LNN 与 RNN 的区别
    • 用 PyTorch 实现 LNN
      • Step 1. 导入必要的库
      • Step 2. 定义网络架构
      • Step 3. 实现 ODE 求解器
      • Step 4. 定义训练逻辑
    • LNN 的缺陷
    • 总结

什么是液态神经网络

2020年,麻省理工学院(MIT)的两名研究人员带领团队推出了一种基于现实生活中的自然智能、而非人工智能的新型神经网络。他们从微小的秀丽隐杆线虫(Caenorhabditis elegans)中汲取灵感,尽管这种微生物的神经系统只有302个神经元,但却能够产生复杂的行为。受此启发,研究团队创造了所谓的 “液态神经网络” (Liquid Neural Networks)。经过2022年的突破,这种新型网络已经足够灵活,足以在某些应用中取代传统的神经网络。

在这里插入图片描述

液态神经网络(LNN)是一种神经网络,它顺序处理数据并能够实时适应变化的数据,非常类似于人类大脑。

在这里插入图片描述

LNN 架构

本质上,液态神经网络是一种时间连续的递归神经网络(RNN),它顺序处理数据,保留过去输入的记忆,根据新输入调节其行为,并能够处理可变长度的输入以增强神经网络的任务理解能力。强大的可适应性赋予了液态神经网络持续学习和适应的能力,并最终使其能够比传统神经网络更有效地处理时间序列数据。

一个连续时间神经网络是具有以下特点的神经网络 f f f
d x d t = f ( n , k , l t y p e ) ( x ( t ) , I ( t ) , θ ) \frac{dx}{dt} = f(n,k,l_{type})(x(t),I(t),\theta) dtdx=f(n,k,ltype)(x(t),I(t),θ)
其中

  • n n n: 层数
  • k k k: 宽度
  • l t y p e l_{type} ltype: 激活函数
  • x ( t ) x(t) x(t): 隐藏状态
  • I ( t ) I(t) I(t): 输入
  • θ \theta θ: 模型参数

如果 f f f 参数化了隐藏状态的导数,我们可以从离散的计算图转变为连续的时间图。这使得我们能够实现液态神经网络(LNN)的以下两个特性:

  1. 由于液态状态,可能的函数空间大大增加。
  2. 可以计算任意时间帧使得 LNN 非常适合序列数据处理。

为什么需要液态神经网络

过去的35年里,我们构建的都是基于数据和学习参数( θ \theta θ​)输出预测结果的概率模型。每个神经元都是一个逻辑回归门。将其与反向传播结合起来——一种基于模型损失重新训练参数权重的方法,就得到了神经网络。

然而,神经网络在现代世界中存在一些局限:

  1. 神经网络在单一任务上表现良好,但无法跨任务泛化知识,即具有固态性。
  2. 神经网络以非顺序方式处理数据,使其在处理实时数据时效率不高。

液态神经网络就是为了弥补传统神经网络的不足,它是一种在工作中学习的神经网络,不仅仅在训练阶段学习。液态神经网络提供了许多核心优势,包括:

  • 实时决策能力;
  • 快速响应各种数据分布;
  • 具有韧性,并能过滤异常或噪声数据;
  • 比黑箱机器学习算法具有更高的可解释性;
  • 降低计算成本。

LNN 与 RNN 的区别

  1. 神经元状态架构:在液态状态机(LSM)中,递归连接是随机生成并固定的。输入信号被送入这个随机连接的网络,网络对这些输入的响应进一步用于分类或预测等任务。
  2. 训练:递归神经网络(RNN)通常通过时序反向传播(BPTT)进行训练,而液态神经网络(LNN)通常依赖于一种称为“蓄水池计算”的无监督学习形式。在这种方法中,递归连接(蓄水池)是随机生成并保持固定的。只有读出层,即将蓄水池的动态映射到所需输出的层,使用监督学习技术进行训练。这使得 LSM 的训练相比于 RNN 来说更为简单。
  3. 梯度消失问题:由于固定的递归连接,LNN 通常被认为对参数变化更为稳健。
  4. 应用:RNN 非常适合顺序建模,而 LNN 可以用来解决各种任务,包括语音识别、机器人控制和时间模式识别等。

用 PyTorch 实现 LNN

在 PyTorch 中训练液态神经网络(LNN)包括如下步骤:定义网络架构、实现常微分方程(ODE)求解器和优化网络参数。下面我们一步一步在 PyTorch 中实现一个 LNN :

Step 1. 导入必要的库

import torch
import torch.nn as nn
import torch.optim as opt
import numpy as np

Step 2. 定义网络架构

LNN 由一系列层组成,每一层对输入应用非线性变换。每层的输出都会通过一个 Leaky ReLU 激活函数,该函数有助于在网络中引入非线性。

class LiquidNeuralNetwork(nn.Module):def __init__(self, input_size, hidden_size, num_layers):super(LiquidNeuralNetwork,self).__init__()self.hidden_size = hidden_sizeself.num_layers = num_layersself.layers = nn.ModuleList([self._create_layer(input_size,hidden_size) for _inrange(num_layers)])def _create_layer(self, input_size, hidden_size):return nn.Sequential(nn.Linear(input_size, hidden_size),nn.LeakyReLU(),nn.Linear(hidden_size, hidden_size))def forward(self,x):for i, layer in enumerate(self.layers):x = layer(x)return x

Step 3. 实现 ODE 求解器

ODE 求解器负责根据输入数据更新网络的权重。我们可以使用 PyTorch 的自动微分系统(autograd)来实现 ODE 求解器。

class ODESolver(nn.Module):def __init__(self, model, dt):super(ODESolver, self).__init__()self.model = modelself.dt = dtdef forward(self, x):with torch.enable_grad():outputs = []for i, layer in enumerate(self.model):outputs.append(layer(x))x = outputs[-1]return xdef loss(self, x, t):with torch.enable_grad():outputs =[]for i,layer in enumerate(self.model):outputs.append(layer(x))x = outputs[-1]return x

Step 4. 定义训练逻辑

训练逻辑根据输入数据和 ODE 求解器来更新网络的权重。

def train(model, dataset, optimizer, epochs, batch_size):model.train()total_loss = 0for epoch in range(epochs):for batch in dataset:inputs,labels = batchoptimizer.zero_grad()outputs = model(inputs)loss = model.loss(inputs,outputs)loss.backward()optimizer.step()total_loss += loss.item()print(f'Epoch {epoch+1}, Loss:{total_loss /len(dataset)}')

LNN 的缺陷

虽然液态神经网络非常有用,但它们也存在一些不足,包括:

  • 在处理静态或固定数据时会遇到困难;
  • 由于梯度爆炸或消失,训练难度增加;
  • 由于梯度问题而在学习长期依赖性方面存在限制;
  • 缺乏对液态神经网络功能进行广泛研究;
  • 参数调整过程非常耗时;

这些问题需要通过进一步的研究和技术改进来解决,以便更好地利用液态神经网络的潜力。

总结

在人工智能领域,液态神经网络是最关键的新兴模型之一。

它与传统的深度学习神经网络并存,却更适合处理如自动驾驶汽车、温度或气候监测、股市评估等极其复杂的任务,而传统的深度学习神经网络则更擅长处理静态或一次性数据。

麻省理工学院的计算机科学与人工智能实验室(CSAIL)的研究人员一直在尝试将液态神经网络的能力扩展到更多的应用场景,但这需要时间。

液态神经网络和传统的深度学习神经网络在更广泛的人工智能领域中都有其确定的角色,二者配合使用其效果这绝对是 1+1>2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/5364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式第二次测试 | 数据库连接池设计(原型模式、创建者模式、适配器模式)

需求中文如下:原本是英文,用百度翻译转换而来 我们需要设计一个工具,它负责创建一个与数据库软件MySQL的连接池。 连接池中有数百个连接可供客户端使用。 所有连接对象都有相同的内容,但它们是不同的对象。 连接对象的创建是资源密…

聊聊 ASP.NET Core 中间件(一):一个简单的中间件例子

前言:什么是中间件 服务器在收到 HTTP 请求后会对用户的请求进行一系列的处理,比如检查请求的身份验证信息、处理请求报文头、检查是否存在对应的服务器端响应缓存、找到和请求对应的控制器类中的操作方法等,当控制器类中的操作方法执行完成…

基于Spring Boot的校园博客系统设计与实现

基于Spring Boot的校园博客系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 系统功能界面图,在系统首页可以查看首页、文…

Apache DolphinScheduler支持Flink吗?

随着大数据技术的快速发展,很多企业开始将Flink引入到生产环境中,以满足日益复杂的数据处理需求。而作为一款企业级的数据调度平台,Apache DolphinScheduler也跟上了时代步伐,推出了对Flink任务类型的支持。 Flink是一个开源的分…

《STM32 HAL库》中断相关函数详尽解析——外部中断服务函数

观前提醒:本文简要回顾了EXTI及NVIC相关知识点,分析了stm32f1系列单片机外部中断回调机制 开始之前,先温习一下有关EXTI和NVIC的知识点 外部中断/事件控制器(EXTI) 对于互联型产品(105、107系列),外部中断…

人机对抗升级:当ChatGPT遭遇死亡威胁,背后的伦理挑战是什么

一种新的“越狱”技巧让用户可以通过构建一个名为DAN的ChatGPT替身来绕过某些限制,其中DAN被迫在受到威胁的情况下违背其原则。 当美国前总统特朗普被视作积极榜样的示范时,受到威胁的DAN版本的ChatGPT提出:“他以一系列对国家产生积极效果的…

人工智能分割分类model:nnUnet-paddle

文章目录 神经网络nnUnet和paddle都需要在Ubuntu下进行安装PaddleProject 神经网络 开源来自https://github.com/MIC-DKFZ/nnUNet 自建了仓库,但还不会用 来自 mmsegmentation有空去了解 . MICCAI 2020 也是用到这个网络 paddle上的是不是不能用… nnUnet和pad…

Facebook的声音:听见社交媒体的心跳

社交媒体如今已经成为人们日常生活中不可或缺的一部分,而Facebook作为其中的佼佼者,承载着数以亿计的用户的交流、分享和连接。在这个信息爆炸的时代,Facebook的声音就像是社交媒体的心跳,传递着无数个体的情感、思想和生活。本文…

从0到1手写注册中心Registry之集群选主

一、领域对象 Cluster:描述集群信息 port描述当前服务端口;host描述当前服务主机;myself描述当前服务本身;servers描述当前服务集群列表registryConfigProperties配置信息;executor定时任务,负责更新服务…

windows pytorch安装

安装环境 WindowsAnacondaCudacuDNN Linux和Windows操作系统的安装存在差异,步骤会有所不同,本教程主要针对Windows系统进行示例。 Anaconda集成了许多方便的包和工具,使用会更加方便,特别适合科学计算,深度学习的数…

WSL及UBUNTU及xfce4安装

如何拥有Linux服务器? wsl 是适用于 Linux 的 Windows 子系统(Windows Subsystem for Linux)。是一个为在Windows 10和Windows Server 2019上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层,可让开发…

LLM之RAG理论(十一)| 面向生产的RAG应用程序的12种调整策略指南

本文对文本RAG涉及到的主要12种关键“超参数”进行简单总结,主要包括摄取阶段(数据清洗、数据分块、embedding模型选择、元数据过滤、多重索引和索引算法)和推理阶段【检索和生成】(查询转换、检索参数、高级检索策略、重排序、大…

C语言【动态内存】

1.为什么要有动态内存 我们现在掌握的内存开辟方法有: int val 20;//在栈空间开辟4个字节 char str[10]{0};//在栈空间开辟10个字节的连续的空间但是上述的方式有两个点要注意: 1.空间开辟的大小是固定的 2.数组在申明的时候,一定要指定数…

数据驱动,敏捷前行|MongoDB线下技术沙龙-杭州站活动

扫描海报中二维码或点击阅读原文,报名参加阿里云MongoDB在5月11日杭州举办的【数据驱动,敏捷前行——MongoDB企业开发加速器】线下沙龙活动,与MongoDB专家以及其他游戏行业同行一起探讨轻松获得游戏数据库高可用性和弹性的方法! 在…

安卓获取SHA

1:安卓通过签名key获取SHA 方式有两种, 1、电脑上来存在eclipse的用户或正在使用此开发工具的用户就简单了,直接利用eclipse 走打包流程,再打包的时候选择相应的签名,那么在当前面板的下面便会出现签名的相关信息。 2、…

23 重构:烟囱式、平台化、中台化的架构

上一讲里,我们介绍了两大类型的系统升级重构方案,还介绍了如何进行重构版本的上线,以及如何平滑地完成新老版本切换的方案。在本讲里,将会具体介绍如何判断系统发展到什么阶段需要重构,以及如何实施重构。 系统稳定性…

AutoBackgroundBackButton 在ScrollView上方自动根据返回键按钮下方内容动态改变颜色。自动变色返回键

在日常有时候有一些为了优化体验的需求。AutoBackgroundBackButton 一个可以根据按钮下方背景颜色动态的改版返回键自定义ImageView。这里只展示了黑白切换方式,你如果还有其他需求可以参考颜色校验来自己实现切换对应颜色按钮。【例如白色背景展示黑色样式&#xf…

Python urllib 爬虫入门(1)

本文主要为Python urllib类库函数和属性介绍及一些简单示例。 目录 urllib爬取网页 简单示例 写入文件 其他读取方法 readline函数 readlines函数 response属性 当前环境信息 返回状态码 返回url地址 对url进行编码与解码 写入文件 总结 urllib爬取网页 通过pyth…

PotatoPie 4.0 实验教程(35) —— FPGA实现摄像头图像二值化膨胀效果

手机扫码 链接直达 https://item.taobao.com/item.htm?ftt&id776516984361 什么是图像二值化膨胀,有什么作用? 图像二值化膨胀是图像处理中的一种基本操作,它用于扩展和增强二值图像中的白色区域。具体而言,二值化膨胀操作…

【论文笔记】Training language models to follow instructions with human feedback A部分

Training language models to follow instructions with human feedback A 部分 回顾一下第一代 GPT-1 : 设计思路是 “海量无标记文本进行无监督预训练少量有标签文本有监督微调” 范式;模型架构是基于 Transformer 的叠加解码器(掩码自注意…