1. gitignore
.gitignore 文件用于指定哪些文件或目录在 Git
版本控制中被忽略。它可以避免将不必要的文件(如编译产物、临时文件等)提交到版本库中。
# 忽略特定文件
secret.txt
# 忽略特定目录
temp/
# 忽略特定目录下的所有文件(但保留temp目录本身)
# 如果 temp/ 目录是空的,Git 默认不会追踪空目录,通常要用 .gitkeep 之类的文件强制保留
temp/*
# 忽略特定目录下的所有 .tmp 文件
temp/*.tmp
# 忽略特定目录下的所有文件和子目录,但保留某个文件
temp/*
!temp/keep.txt
# 忽略特定目录下的所有文件和子目录,但保留某个目录
temp/*
!temp/keep/
2. 清除已跟踪的文件
不会删除 Git 提交历史中的文件,它 只删除工作区(working
directory)和未跟踪的文件,不会影响 Git 版本库的提交记录:
git clean -n -d -x # 预览即将删除的文件
git clean -f -d -x # 确认无误后执行删除
3. 回退以前的提交
3.1 ...
Live2D Widget 使用说明
在网页中添加 Live2D 看板娘。兼容 PJAX,支持无刷新加载。
(注:已不再需要配置依赖 jQuery 和 Font Awesome)
代码: live2d-widget
live2d_api
博文:
网页添加 Live2D
看板娘 Live2D 看板娘
API 迁移公告
1 简单配置
只需要最基础的功能,那么只用将这一行代码加入 html 页面的
head 或 body 中,即可加载看板娘:
<script src="https://fastly.jsdelivr.net/gh/stevenjoezhang/live2d-widget@latest/autoload.js"></script>
添加代码的位置取决于你的网站的构建方式。例如,如果你使用的是 Hexo,那么需要在主题的模版文件中添加以上代码。对于用各种模版引擎生成的页面,修改方法类似。
如果网站启用了 PJAX,由于看板娘不必每页刷新,需要注意将该脚本放到
PJAX 刷新区域之外。
2 进阶配置
2.1 修改autoload.js文件
下载live2d-wid ...
网站搭建
未读Twikoo 评论系统配置
目前很多面板支持一键配置,以下是私有部署方式介绍
云端部署
在 TwiKoo 官网
找到云函数部署的私有部署方式,按照文档进行配置。
下载nodejs
选择最新的LTS版本,Linux,nvm,npm。按照命令安装。
指定镜像源:npm config set registry https://registry.npmmirror.com
安装 Twikoo server:
npm i -g tkserver查看是否安装成功:npm ls tkserver -g
配置环境变量,主要关注以下几个参数:
TWIKOO_DATA:lokijs 数据库存储路径,默认是
./data。
TWIKOO_PORT:服务端口,默认是 8080
TWIKOO_IP_HEADERS:在特殊情况下使用,如使用了
CloudFlare CDN 它会将请求 IP 写到请求头的 cf-connecting-ip
字段上,为了能够正确的获取请求 IP 你可以写成
[“headers.cf-connecting-ip”],默认是 []
启动服务
创建一个文件夹,如
/www/wwwr ...
1. 基于值函数 vs 基于策略方法
强化学习解决决策问题的思路可以分为两大类:一类是”评估价值后决策”,另一类是”直接优化决策”。这就是我们常说的基于值函数的方法和基于策略的方法。
1.1
基于值函数的方法:先评估,再决策
想象你是一个下棋的新手,如何提高棋艺?一个直观的想法是:学会评估每个局面的好坏,然后选择能达到最好局面的走法。这就是基于值函数方法的核心思想。
核心理念
基于值函数的方法通过学习价值评估函数来指导决策:
值函数评估:基于值函数的方法主要通过估计状态值函数
( V(s) ) 或动作价值函数 ( Q(s, a) )
来评估每个状态或状态-动作对的优劣。这里,( V(s) ) 表示在状态 ( s )
下能获得的期望累计奖励,而 ( Q(s, a) ) 则表示在状态 ( s ) 采取动作 ( a )
后的期望累计奖励。
策略间接导出:这些方法通常不直接表示策略,而是通过优化值函数,然后从中推导出最优策略。例如,在给定
( Q(s, a) ) 的情况下,可以通过选择使 ( Q(s, a) )
最大的动作来获得最优策略。
状态价值函数 \(V(s)\):评估”在状态s下,按 ...
12 DDPG算法
深度确定性策略梯度是在动作空间无限的环境使用off-policy的actor-critic算法。它它的actor是一个确定性策略,通过梯度上升法来最大化Q值;它的critic是一个Q网络,通过梯度下降法来最小化Q值的TD误差。
12.1 DDPG算法
12.1.1 算法引出
TRPO和PPO是on-policy的actor-critic算法,这意味着它们只能在当前策略上进行更新,样本效率较低。
DQN是off-policy的Q-learning算法,直接估计Q值,样本效率较高,但是但是它只能处理动作空间有限的环境,这是因为它需要从所有动作中挑选一个\(Q\)值最大的动作。虽然可以将将动作空间离散化,但这比较粗糙,无法精细控制。
TRPO和PPO学习的是随机策略,而DDPG学习的确定性策略。随机策略可以表示为\(a\sim
\pi_\theta(a|s)\),确定性策略可以表示为\(a=\mu_\theta(s)\)。
12.1.2 算法公式
确定性策略梯度定理:
\[
\nabla_\theta J(\mu_\theta)=\mathbb{E}_{s\sim \ ...
9 Actor-Critic算法
Actor-Critic
算法是基于值函数的方法和基于策略的方法的叠加。价值模块
Critic 在策略模块 Actor
采样的数据中学习分辨什么是好的动作,什么不是好的动作,进而指导
Actor 进行策略更新。随着 Actor
的训练的进行,其与环境交互所产生的数据分布也发生改变,这需要 Critic
尽快适应新的数据分布并给出好的判别。
9.1 Actor-Critic算法
Actor-Critic
算法既学习价值函数,又学习策略函数。不过本质上是基于策略的算法,因为这一系列算法的目标都是优化一个带参数的策略,只是会额外学习价值函数,从而帮助策略函数更好地学习。
在 REINFORCE
算法中,目标函数的梯度中有一项轨迹回报,用于指导策略的更新。REINFOCE
算法用蒙特卡洛方法来估计\(Q^{\pi_\theta}(s,a)\),能不能考虑拟合一个值函数来指导策略进行学习呢?这正是
Actor-Critic 算法所做的。
Actor-Critic 算法估计一个动作价值函数\(Q\),代替蒙特卡洛采样得到的回报。
REINFORCE
算法基于蒙特卡 ...
8 策略梯度算法
本章介绍基于策略(policy-based)的方法,而策略梯度是基于策略的方法的基础。
8.1 基于价值和基于策略
Q-learning、DQN 及 DQN
改进算法都是基于价值(value-based)的方法,其中
Q-learning 是处理有限状态的算法,而 DQN
可以用来解决连续状态的问题。
基于值函数的方法主要是学习值函数,然后根据值函数导出一个策略,学习过程中并不存在一个显式的策略;而基于策略的方法则是直接显式地学习一个目标策略。
8.2 策略梯度
基于策略的方法首先需要将策略参数化。 假设目标策略\(\pi_{\theta}\)是一个随机性策略,并且处处可微,其中\(\theta\)是对应的参数。我们可以用一个线性模型或者神经网络模型来为这样一个策略函数建模,输入某个状态,然后输出一个动作的概率分布。我们的目标是要寻找一个最优策略并最大化这个策略在环境中的期望回报。
策略学习的目标函数: \[
J(\theta)=E_{s_0}[V^{\pi_{\theta}}(s_0)]
\] 其中\(V^{\pi_{\theta}}(s_0)\)是初始状态为\(s ...
3 马尔可夫决策过程
如果要用强化学习去解决一个实际问题,第一步要做的事情就是把这个实际问题抽象为一个马尔可夫决策过程,也就是明确马尔可夫决策过程的各个组成要素。
3.1 马尔可夫过程
3.2.1 随机过程
时刻\(t+1\)的状态\(S_{t+1}\)概率可以表示为\(P(S_{t+1}|S_1,S_2,...,S_t)\),即未来的状态取决于过去的状态以及当前的状态。
3.2.2 马尔可夫性质
当且仅当未来状态的概率分布只依赖于当前状态时,这个随机过程具有马尔可夫性质。即:\(P(S_{t+1}|S_t)=P(S_{t+1}|S_1,S_2,...,S_t)\)
但是并不是说\(S_{t+1}\)和历史完全没有关系,因为\(S_{t+1}\)是由\(S_t\)决定的,而\(S_t\)又是由\(S_{t-1}\)决定的,以此类推,\(S_{t+1}\)和历史是有关系的,只是说\(S_{t+1}\)和历史的关系可以通过当前状态\(S_t\)来表示。
3.2.3 马尔可夫过程
马尔可夫过程(马尔科夫链)是指具有马尔可夫性质的随机过程。
通常用元组\(\langle
S,P\rangle\ ...
强化学习
未读2 多臂老虎机
多臂老虎机中的探索与利用(exploration
vs. exploitation)问题一直以来都是一个特别经典的问题,理解它能够帮助我们学习强化学习。与强化学习不同,多臂老虎机不存在状态信息,只有动作和奖励,算是最简单的“和环境交互中的学习”的一种形式。
2.1 问题介绍
2.1.1 问题定义
有一个拥有\(K\)根拉杆的老虎机,拉动每一根拉杆都对应一个关于奖励的概率分布\(R\)。我们需要在“探索拉杆的获奖概率”和“根据经验选择获奖最多的拉杆”中进行权衡。“采用怎样的操作策略才能使获得的累积奖励最高”便是多臂老虎机问题。
2.1.2 形式化描述
多臂老虎机问题可以表示为一个元组 \((A,
R)\)
\(A\)
表示动作集合,一个动作表示拉动一根拉杆,\(A =
\{a_1, a_2, ..., a_K\}\)
\(R\) 表示奖励概率分布,\(R(r|a)\) 表示当动作\(a\) 作用在环境上后得到的奖励\(r\)的概率分布
多臂老虎机的目标为最大化一段时间步内累积的奖励
2.1.3 累计懊悔
至少存在一根拉杆,它的期望奖励不小于拉动其他任意一根拉杆的期望奖 ...
1 初探强化学习
本笔记基于动手学强化学习
实现序贯决策的机器学习方法就是当前讨论的主题—强化学习
1.1 什么是强化学习
强化学习是机器通过与环境交互来实现目标的一种计算方法。在每一轮交互中,智能体感知到环境目前所处的状态,经过自身的计算给出本轮的动作,将其作用到环境中;环境得到智能体的动作后,产生相应的即时奖励信号并发生相应的状态转移。
智能体有3种关键要素,即感知、决策和奖励。
1.2 环境
强化学习的智能体是在和一个动态环境的交互中完成序贯决策的。对于一个随机过程,其最关键的要素就是状态以及状态转移的条件概率分布。这就好比一个微粒在水中的布朗运动可以由它的起始位置以及下一刻的位置相对当前位置的条件概率分布来刻画。
如果在环境这样一个自身演变的随机过程中加入一个外来的干扰因素,即智能体的动作,那么环境的下一刻状态的概率分布将由当前状态和智能体的动作来共同决定,用最简单的数学公式表示则是:
\[
下一状态=P(当前状态,智能体动作)
\]
1.3 目标
在强化学习中,我们关注回报的期望,并将其定义为价值(value),这就是强化学习中智能体学习的优化目标。
1.4 数据
数据是在智 ...




