朗之万方程,机器学习与液体中的粒子运动

目录

  • 一、说明
  • 二、朗之万方程的诞生
    • 2.1 牛顿力学
    • 2.2 流体中的随机运动
  • 三、小质量物体布朗运动方程
  • 四、布朗运动的Python代码
  • 五、稳定性讨论
    • 5.1 波尔兹曼分布
    • 5.2 梯度下降算法
  • 六、随机梯度下降(SGD)和小批量梯度下降
  • 七、机器学习与物理,作为朗之万过程的梯度下降
  • 结论

一、说明

梯度下降算法是机器学习中最流行的优化技术之一。它有三种类型:批量梯度下降(GD)、随机梯度下降(SGD)和小批量梯度下降(在每次迭代中用于计算损失函数梯度的数据量不同)。
本文的目标是描述基于朗格文动力学(LD)的全局优化器的研究进展,LD是一种分子运动的建模方法,它起源于20世纪初阿尔伯特·爱因斯坦和保罗·朗之万关于统计力学的著作。

我将从理论物理学的角度提供一个优雅的解释,为什么梯度下降的变种是有效的全局优化器。

二、朗之万方程的诞生

在这里插入图片描述

没有迹象表明一场革命即将发生。1904年,如果阿尔伯特·爱因斯坦放弃了物理学,他的科学家同行们可能甚至都不会注意到。幸运的是,这并没有发生。1905年,这位年轻的专利职员发表了四篇革命性的论文。
m d 2 x d t 2 = − λ d x d t + R t + F m \frac{d^2x}{dt^2}=-\lambda\frac{dx}{dt}+R_t + F mdt2d2x=λdtdx+Rt+F

这里提醒大家,我们需要习惯于这种数学模型的表述。如何习惯?简单!长期接触长期体味,逐渐地,你就体会到这种简单方法的奇妙和快捷沟通,那么,该方程是到底什么意思呢?

2.1 牛顿力学

我i们知道牛顿公式 m a = F ma = F ma=F
只要对这个方程任意加入能解释的项就可以了,大致的框架如下图:
在这里插入图片描述
其中:
d 2 x d t 2 \frac{d^2x}{dt^2} dt2d2x:加速度,是位移对时间的二阶导。
− λ d x d t -\lambda \frac{dx}{dt} λdtdx: 该项是运动阻力,速度越大,阻力越大,因此成正比。
R t R_t Rt:是个力,来自高斯随机过程。
F F F:是个外力,可有可无。
其实,几乎所有的宏观物理方程框架来自牛顿,而且,框架类似,细节不同。
随机力 R t R_t Rt是一个 δ \delta δ相关的平稳高斯过程,其均值和方差如下:

在这里插入图片描述
术语“ δ \delta δ相关”意味着两个不同时间的力是零相关的。 Langevin方程是第一个描述不平衡热力学的数学方程。

2.2 流体中的随机运动

什么是布朗运动?
“布朗运动是指悬浮在流体中的小颗粒所表现出的随机运动。它通常被称为“布朗运动”。这种运动是粒子与流体中其他快速移动的粒子碰撞的结果。

布朗运动以苏格兰植物学家罗伯特·布朗的名字命名,他首先观察到花粉粒放入水中时会沿随机方向移动。下面提供了描述流体粒子的随机运动(由这些粒子之间的碰撞引起)的图示。

在这里插入图片描述

三、小质量物体布朗运动方程

先参考朗之万方程: m d 2 x d t 2 = − λ d x d t + R t + F m \frac{d^2x}{dt^2}=-\lambda\frac{dx}{dt}+R_t + F mdt2d2x=λdtdx+Rt+F
m < ε m<\varepsilon m<ε

表示:如果粒子的质量足够小,我们可以把左边设为零。此外,我们可以用某个势能的导数来表示一个(保守)力,比如引力。我们得到:
在这里插入图片描述
小质量的朗之万方程
写作:
在这里插入图片描述
其中δt是一个小时间间隔,并有移动项,我们得到了小质量粒子的离散朗之万方程:
在这里插入图片描述
用这种方式表示,朗之万方程描述了经历布朗运动的粒子的增量位移。至此,我们可以用计算机程序实现整个过程。

四、布朗运动的Python代码

为了模拟二维离散布朗过程,采用了两种一维过程。步骤如下:

首先,选择时间步数“steps”。
坐标x和y是随机跳跃的累积和(函数np.cumsum()用于计算它们)。
中间点X和Y通过使用np.interp()插值计算。
然后使用plot()函数绘制布朗运动。
代码是:

import numpy as np
import matplotlib.pyplot as plt
import randomsteps =5000
random.seed(42)x,y = np.cumsum(np.random.randn(steps)), np.cumsum(np.random.randn(steps))
points = 10
ip = lambda x, steps, points: np.interp(np.arange(steps*points),np.arange(steps)*points,x)
X, Y = ip(x, steps, points), ip(y, steps, points)
fig, ax = plt.subplots(1, 1, figsize=(10, 10))
ax.set_title('Brownian Motion')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.plot(X, Y, color='green',marker='o', markersize=1)
plt.show()

在这里插入图片描述

五、稳定性讨论

布朗运动图解
朗之万动力学与全局极小值
朗之万动力学的一个重要性质是随机过程x(t)(其中x(t)服从上面给出的Langevin方程)的扩散分布p(x)收敛于平稳分布,即普遍存在的波尔兹曼分布(BD)。
在这里插入图片描述

5.1 波尔兹曼分布

它集中在势能E(x)的全局最小值附近(从它的函数形式,我们可以很容易地看到BD峰在势能E(x)的全局最小值上)。更准确地说,如果温度按照离散步骤缓慢降至零:

在这里插入图片描述
那么p(x)在n的大值时收敛于玻尔兹曼分布(x收敛于E(x)的全局最小值)。朗之万方程的时变温度通常被解释为描述亚稳态物理状态的衰减到系统的基态(这是能量的全局最小值)。因此,我们可以使用朗之万动力学来设计算法,使其成为潜在非凸函数的全局最小化。

这一原理是模拟退火技术的基础,用于获得近似的全局最优函数。模拟退火在寻找极大值中的应用。

5.2 梯度下降算法

现在我将转到机器学习优化算法。

梯度下降是一个简单的迭代优化算法最小化(或最大化)函数。在机器学习的背景下,这些函数是损失函数。为具体起见,考虑一个多元损失函数L(w),定义了一些不动点p周围的所有点w。GD算法基于一个简单的性质,即从任何点p开始,函数L(w)在其负梯度方向上衰减最快:

在这里插入图片描述
损失函数的负梯度。
​人们首先猜测最小值的初始值,然后计算序列:

在这里插入图片描述
遵循迭代过程:
在这里插入图片描述

梯度下降法递归。
其中,γ为学习率,允许在每次迭代n时改变学习率。如果损失函数L及其梯度具有一定的性质,按照一定的协议选择学习率变化,保证局部收敛(只有当L是凸函数时才保证收敛到全局最小值,因为对于凸函数,任何局部最小值也是全局最小值)。

六、随机梯度下降(SGD)和小批量梯度下降

基本的GD算法在每次迭代时都扫描完整的数据集,而SGD和小批量GD只使用训练数据的一个子集。SGD在每次迭代中使用单个训练数据样本更新梯度,即在扫描训练数据时,对每个训练示例执行上述w的更新。小批量GD使用小批量的训练示例执行参数更新。

让我们用数学的方式来解释。用于一般训练集:
在这里插入图片描述
n个样本的训练集。
​损失函数的一般形式为:
在这里插入图片描述
一般损失函数。
在小批梯度下降的情况下,总和仅在批内的训练示例。特别是SGD只使用一个样本。与普通的GD相比,这些过程有两个主要优势:它们速度更快,并且可以处理更大的数据集。

定义G和g如下所示,在这种情况下我们有:

在这里插入图片描述

在下面的动画中,SGD的收敛和其他方法一起展示了(这些其他方法,本文没有提到,是SGD的最新改进)。

在这里插入图片描述

七、机器学习与物理,作为朗之万过程的梯度下降

下一个步骤对于论证是至关重要的。为了让读者理解主要思想,我省略了一些较为严格的细节。

我们可以把小批量梯度写成全梯度和正态分布的η之间的和:

在这里插入图片描述
现在将这个表达式代入GD迭代表达式中,我们得到:

在这里插入图片描述

小批量梯度下降迭代步骤
一个优雅的联系
将小批量梯度下降迭代的表达式与朗之万方程进行比较,我们可以立即注意到它们的相似性。更准确地说,它们通过以下方式变得相同:
在这里插入图片描述
用γ代入δt,我们发现:
在这里插入图片描述

因此,SGD或小批量梯度下降算法形式上类似于朗之万过程,这就解释了为什么如果学习率按照前面提到的协议变化,它们有非常高的概率选择全局最小值。

这个结果并不新鲜。事实上,有许多证据表明,在通常的梯度下降递归中添加一个噪声项会使算法收敛到全局最小值。

结论

在这篇文章中,我展示了将随机或小批量梯度下降看作是朗之万随机过程,并通过学习率包括额外的随机化级别,我们可以理解为什么这些算法可以作为全局优化器工作得如此好。这是一个很好的结果,它表明从多个角度检查一个问题通常是非常有用的。

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

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

相关文章

加密软件VMProtect教程:使用脚本-功能

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

最大连续1的个数||

又用到滑动窗口&#xff0c;关键在于要维持窗口内0的数量在k内 #include<stdio.h> #include<string.h>int Max(int a,int b){return (a>b)?a:b; }int findMaxConsecutiveOnes(int* nums,int numsSize,int k){int left 0;int right 0;int flag 0;//记录包含…

系统设计理念:满足设计要求

在今天的文章中,我们将层层剥离并深入探讨系统设计要求的本质。 让我们了解系统设计的支柱以及如何创建强大且有弹性的应用程序。 什么是好的设计? 在我们深入讨论技术细节之前,让我们先讨论一下什么是好的设计。 当我们谈论系统架构中的良好设计时,我们关注几个关键原则:…

初始C语言最后一章《编译、链接与预处理详解》

前言 感谢老铁们的陪伴和支持&#xff0c;初始C语言专栏在本章内容也是要结束了&#xff0c;这创作一路下来也是很不容易&#xff0c;如果大家对 Java 后端开发感兴趣&#xff0c;欢迎各位老铁来我的Java专栏&#xff01;当然了&#xff0c;我也会更新几章C语言实现简单的数据结…

C++中的面向对象到底是什么

C中的面向对象到底是什么 对象嘛&#xff0c;就和大家都有的对象一样&#xff0c;两只眼睛、一个嘴巴、两条腿…… 对不起跑题了&#xff0c;C的面向对象中的对象可不是显示中的对象哦&#xff0c;但是有一些相似之处&#xff0c;有对象的同学可以参考着去学习C面向对象的概念…

HackTheBox-Machines--Builder

文章目录 1 端口扫描2 测试思路3 漏洞测试 Builder测试过程 1 端口扫描 nmap -sC -sV 10.129.230.2202 测试思路 系统开启了22和8080端口&#xff0c;22端口无账号密码&#xff0c;测试方向主要从8080的jenkins服务开始测试。 在测试开源系统时&#xff0c;可以下载源代码或本地…

基于springboot的一站式家装服务管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于springboot的一站式家装服务管理系统…

766. 托普利茨矩阵

给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果矩阵上每一条由左上到右下的对角线上的元素都相同&#xff0c;那么这个矩阵是 托普利茨矩阵 。 示例 1&#xff1a; 输入&#xff1a;matr…

3、jvm基础知识(三)

如何判断堆上的对象没有被引用&#xff1f; 常见的有两种判断方法&#xff1a;引用计数法和可达性分析法。 引用计数法会为每个对象维护一个引用计数器&#xff0c;当对象被引用时加1&#xff0c;取消引用时减1。 引用计数法的优点是实现简单&#xff0c;缺点有两点&#xff1…

电机选型与直线模组(简化版)

2-1电机分类和普通电机选型 1、电机及其原理的基本认知&#xff1a; 电动机我们平时简称电机&#xff0c;大部分情况下指的都是通电后&#xff0c;输出轴会旋转运动的设备。即将电能转换为机械能&#xff0c;供我们使用以驱动机构运行。电机简单的讲&#xff0c;其实就是一个…

ubuntu 一键安装python3.10和pip3.10

在Ubuntu系统上&#xff0c;您可以通过添加官方Python PPA来安装Python 3.10。以下是通过命令行安装Python 3.10和pip的步骤&#xff1a; 打开终端。 添加deadsnakes PPA&#xff08;Personal Package Archive&#xff09;&#xff1a; sudo add-apt-repository ppa:deadsna…

梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码

源码简介 最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容&#xff1a;修复播放器接口问题&#xff0c;把接口本地化&#xff0c;但是集成外链播放器…

【前端推荐】node.js有哪些命令

Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;它允许开发者在服务器端运行JavaScript代码。Node.js拥有丰富的模块和工具&#xff0c;通过命令行工具&#xff0c;可以执行各种任务来简化开发流程。以下是一些常用的Node.js命令&#xff1a; 1. node 这是最…

x264 arm64汇编分析 quant8x8_neon分析

一 C语言实现 #define QUANT_ONE( coef, mf, f ) \ { \ if( (coef) > 0 ) \ (coef) (f (coef)) * (mf) >> 16; \ else \ (coef) - ((f - (coef)) * (mf) >> 16); \ nz | (coef); \ } static int quant_8x8( dctcoef dct[64], udctcoef mf[64], udctcoef bias…

【Qt】常用控件(输入类)

目录 一、Line Edit二、Text Edit三、ComBo四、DateTimeEdit五、Slider 一、Line Edit QLineEdit 用来表示单行输入框&#xff0c;可以输入一段文本&#xff0c;但是不能换行。 属性说明test输入框中的文本inputMask输入内容格式约束maxLength最大长度frame是否添加边框echoM…

harbor api v2.0

harbor api v2.0 v2.0 v2.0 “harbor api v2.0”与v1区别较大&#xff0c;此处harbor也做了https。另外&#xff0c;通过接口拿到的数据也是只能默认1页10个&#xff0c;所以脚本根据实际情况一页页的循环抓取数据 脚本主要用于统计repo(仓库)、image&#xff0c;以及所有镜像…

东方财富网股票数据爬虫

废话不多说 , 直接上源码 import csv # 用于读写 CSV 文件 import json # 用于解析 JSON 数据 import requests # 用于发送 HTTP 请求 from lxml import etree # 用于解析 HTML 文档# 定义 DataScraper 类&#xff0c;实现数据抓取功能 class DataScraper:# 初始化函数def…

腾讯云2023: 容器与函数计算实践精选,引领Serverless与Docker容器新趋势

引言 在云计算领域&#xff0c;容器和函数计算技术的迅猛发展正引领着企业架构的新变革。尤其是在2023年&#xff0c;随着技术的成熟和应用场景的拓展&#xff0c;腾讯云发布的《2023腾讯云容器和函数计算技术实践精选集》为我们提供了一窗口&#xff0c;深入了解这一领域的最…

C#多线程编程详细教学

在C#中&#xff0c;多线程编程是一种非常重要的技术&#xff0c;它允许程序同时执行多个任务&#xff0c;从而提高了应用程序的响应性和整体性能。本文将详细介绍C#中的多线程编程&#xff0c;包括基本概念、线程创建、线程同步以及相关的代码示例。 一、基本概念 线程是操作…

【新手适用】手把手教你从零开始实现一个基于Pytorch的卷积神经网络CNN二: 如何训练模型,内附详细损失、准确率、均值计算

手把手教你从零开始实现一个基于Pytorch的卷积神经网络CNN&#xff08;新手适用&#xff09;一&#xff1a; model.py&#xff1a;创建模块-CSDN博客 从零开始实现一个基于Pytorch的卷积神经网络 - 知乎 目录 1 设备device定义 2 训练模型定义 3 开始训练 3.1 step、batch…