用 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_size
        self.num_layers = num_layers
		self.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 = model
        self.dt = dt
        
	def forward(self, x):
		with torch.enable_grad():
            outputs = []
            for i, layer in enumerate(self.model):
                outputs.append(layer(x))
            	x = outputs[-1]
		return x
    
	def 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 = 0
    for 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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言-嵌入式-STM32:FreeRTOS说明和详解

Free即免费的,RTOS的全称是Real time operating system,中文就是实时操作系统。 注意:RTOS不是指某一个确定的系统,而是指一类操作系统。比如:uc/OS,FreeRTOS,RTX,RT-Thread 等这些都…

docker自定义java运行环境镜像

一、下载jre/jdk 压缩包,centos:7基础镜像 1、 下载jdk/dre 下载jdk或jre 官网下载 根据需求下载 jdk:SE Development Kit(开发环境) jre: SE Runtime Environment (运行环境)2、下载centos:7 # 下载centos7 docker镜像 docker pull centos:7#centos查看系统时间 …

面试经典算法题之双指针专题

力扣经典面试题之双指针 ( 每天更新, 每天一题 ) 文章目录 力扣经典面试题之双指针 ( 每天更新, 每天一题 )验证回文串收获 392. 判断子序列 验证回文串 思路 一: 筛选 双指针验证 class Solution { public:bool isPalindrome(string s) {// 所有大写字母 > 小写 去除非字母…

对比mongodb查询的执行计划,说一说组合索引的优化方案(上)

一、背景 Mongodb数据库,有个160w数据量规模的集合,字段多达几十个,随着需求的迭代,查询条件也是五花八门。 为了提高某个查询的效率,结果都以新增索引解决问题,最后多达16个索引。 这里仅贴出本文会提及…

引领农业新质生产力,鸿道(Intewell®)操作系统助力农业机器人创新发展

4月27日至29日,2024耒耜国际会议在江苏大学召开。科东软件作为特邀嘉宾出席此次盛会,并为江苏大学-科东软件“农业机器人操作系统”联合实验室揭牌。 校企联合实验室揭牌 在开幕式上,江苏大学、科东软件、上交碳中和动力研究院、遨博智能研究…

Spring Boot Admin

概述 Spirng Boot Admin 登录页面 Spring Boot Admin是一个用于管理Spring Boot应用的监控工具,它允许你查看和管理多个Spring Boot应用实例。用于应用信息进行界面化的展示,常常辅助我们开发人员快速查看服务运行状态在微服务架构中,Spring Boot Admin通…

中科院突破:TalkingGaussian技术实现3D人脸动态无失真,高效同步嘴唇运动!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! 引言:探索高质量3D对话头像的新方法 在数字媒体和虚拟互动领域,高质量的3D对话头像技术正变得日益重要。这种技术能够在虚拟现实、电影…

谷粒商城实战(020 RabbitMQ-消息确认)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第258p-第p261的内容 消息确认 生产者 publishers 消费者 consumers 设置配置类 调用api 控制台 抵达brocker 代理 新版本ReturnCallbac…

【webrtc】MessageHandler 8: 基于线程的消息处理:处理音频输入输出断开

m98代码,看起来m114 去掉了MessageHandler :音频的录制和播放 都使用了on message,但只是用来通知并处理流的断开的。AAudioRecorder AAudioRecorder 处理流断开 OnErrorCallback :有可能 错误回调是别处来的,是其他线程, 但是这个错误的处理要再自己的线程执行: 音频播…

北京大学肖臻老师《区块链技术与应用》P14(ETH概述)和P15(ETH账户)

1️⃣ 参考 北京大学肖臻老师《区块链技术与应用》 P14 - ETH概述篇P15 - ETH账户篇 1️⃣4️⃣ETH概述 ① 比特币与以太坊的对比 比特币(区块链 1.0)以太坊(区块链 2.0)出块时间大约10 min十几秒mining puzzle计算密集型Memo…

【计算智能】基本遗传算法在优化问题中的应用与实验【理论到程序】

文章目录 1. 引言:遗传算法简介2. 基本遗传算法(SGA)2.1 基本遗传算法的构成要素1. 染色体编码2. 适应度函数3. 遗传算子 2.2 实验设计与方法1. 算法流程2. 伪代码3. python实现1. 导入模块2. 目标函数 f(x)3 初始化种群4. 计算适应度5. 选择…

Django后台项目开发实战二

我们的需求是开发职位管理系统 三个功能: 管理员发布职位候选人能浏览职位用户能投递职位 第二阶段 创建应用 jobs,实现职位数据的建模 python manage.py startapp jobs 然后再 setting .py 注册应用,只需添加应用名称到最后一行 INST…

VTK —— 二、教程六 - 为模型加入3D微件(按下i键隐藏或显示)(附完整源码)

代码效果 本代码编译运行均在如下链接文章生成的库执行成功,若无VTK库则请先参考如下链接编译vtk源码: VTK —— 一、Windows10下编译VTK源码,并用Vs2017代码测试(附编译流程、附编译好的库、vtk测试源码) 教程描述 本…

探索未来道路:智慧高速系统架构的革命性进步

随着科技的飞速发展,智慧高速系统架构正在成为道路交通领域的一项重要创新。这一系统结合了先进的信息技术和智能化设备,为高速公路提供了全新的管理和服务模式,极大地提升了交通运输效率和安全性。本文将深入探讨智慧高速系统架构的革命性进…

ping命令操作记录

1,ping 主机可查看主机是否在线 2,ping -a参数,解析主机的名称 3,ping -r 跟踪打印路由信息 ping命令的作用:确认目标主机是否存活,确定网络是否畅通 ping的原理:ping发送ICMP(互联…

【算法】【贪心算法】【leetcode】870. 优势洗牌

题目地址:https://leetcode.cn/problems/advantage-shuffle/description/ 题目描述: 给定两个长度相等的数组 nums1 和 nums2,nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。 返回 nums1 的任意排列&…

Open CASCADE学习|BRepFill_SectionPlacement

BRepFill_SectionPlacement 是一个与计算机辅助设计(CAD)相关的术语,通常用于指代一个几何对象或操作,它是Open CASCADE Technology(OCCT)中的一个类。Open CASCADE Technology是一个开源的CAD内核&#xf…

AnomalyGPT——使用大型视觉语言模型进行工业异常检测的算法解析与应用

1.概述 工业缺陷检测是工业自动化和质量控制中的一个重要环节,其目的是在生产过程中识别和分类产品或组件中的缺陷,以确保最终产品的质量满足既定标准。这项技术的应用可以显著提高生产效率,降低成本,并减少由于缺陷产品导致的潜…

数据挖掘之基于K近邻算法的原油和纳斯达克股票数据预测分析

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在当今日益复杂的金融市场中,准确地预测原油价格和纳斯达克股票市场的走势对于投资者、政…

【docker 】Windows10安装 Docker

安装 Hyper-V Hyper-V 是微软开发的虚拟机,仅适用于 Windows 10。 按键: win键X ,选着程序和功能 在查找设置中输入:启用或关闭Windows功能 选中Hyper-V 点击确定 安装 Docker Desktop for Windows Docker Desktop 官方下载…