aiken's blog
  • home
  • archives
  • search
  • Aiken's Blog
  • home
  • posts
  • tags
  • categories
  • archives
  • about
  • search
  • linklog
Home

Posts

Docker Configuration00 Install on WSL2

基于 WSL2 对于 Docker 的适配,本文介绍 Windows 下利用 WSL2 对 Docker 的安装和部署,对于 WSL2 的安装可以参考上篇文章: Windows Configuration01 WSL2 - AikenH Blogps Install Docker on Windows 该部分主要介绍以下几内容:安装,存储盘迁移,连接 WSL2 发行版,完成了这几步之后就可以畅游 Docker 世界了。 前置:先安装好一个 WSL2 的发行版,win11 自带 WSL2 首先,官网 Docker: 下载 Docker Desktop for windows,安装基于 WSL2 的 docker,安装完成后 Docker 的发行版和存储目录会默认存放在,该地址可以用来确认后续的迁移状态。 Docker-Desktop/data:%LOCALAPPDATA%/Docker/wsl WSL2:%LOCALAPPDATA%/packages/c......./local_state 安装完后首先打开 docker 确认没有其他异常问题报警,然后就可以对存储空间和 Desktop 进行迁移(option),迁移的方式可以参考上文中对 WSL2 的迁移。下面给出脚本便于使用: powershell wsl --shutdown # 系统导出 wsl --export docker-desktop-data "D:\docker\docker-desktop-data.tar" wsl --export docker-desktop "D:\docker\docker-desktop.tar" # 删除原系统 wsl --unregister docker-desktop-data wsl --unregister docker-desktop # 挂载新目录 wsl --import docker-desktop D:\docker\docker-desktop D:\docker\docker-desktop.tar wsl --import docker-desktop-data D:\docker\docker-desktop-data D:\docker\docker-desktop-data.tar # 建立软连接(需要再cmd中执行,powershell中可能识别不了mklink命令) # 否则可能会导致 docker-desktop-data 无法正确启动,导致重启后掉盘 mklink "C:\Users\{user-name}\AppData\Local\Docker\wsl\data\ext4.vhdx" "D:\docker\docker-desktop-data\ext4.vhdx" 迁移完成后重启 docker 即可,至此,安装就算完成了。 ...

September 28, 2021 · 1 min · 163 words · aikenhong ·  Docker ·  WSL2
#Docker #WSL2

寻路算法 Aster

A* 是一种在平面图形上计算最优路径的方法,通常用来做 2D 游戏的最短寻路,该算法是一种 Dijkstra 算法的变体,使用启发式的策略来提高算法的搜索效率。 wikipedia ;medium ;pythonf 基本思想 基于启发式的方法,基于BFS去做最短路径搜索,借助类似Manhattan距离作为启发,每次加入后续的多个点,然后按照后续点的属性去排序,不断的加入close的区间,直到第一次遍历到终点就是最短的路径。 $$ f(n) = g(n) + h(n) $$ f代表的是经过当前点,从起点到最终点的距离,g代表的是从起点到当前节点的距离,h代表的是启发式方法到终点的距离。 维护三个list:open(候选列表)、close(状态确定的列表)、children(等待操作的列表) 首先用 bfs 的方法,找到当前节点的可达后续节点,将这些节点加入 children,确定 child 不在 close_list 中后(即在 open 中)则判断哪个是最优解,然后更新 openlist 和 closelist 。 即:每次遍历的当前节点都从 open 中总距离最小的选,然后放入 close。直到 openlist 为空。 相关类别定义 python class node(): def __init__(self, parent=None, position=None): self.parent = parent self.position = position self.g = 0 self.h = 0 self.f = 0 def __eq__(self, o: object) -> bool: return o.position == self.position 具体代码实现 python def asterS(map,slope,start,end): # 在astar算法的基础上,我们需要加入的是高度的约束 # 阻碍的条件是高度不同同时没有slope的存在,这种就是wall # 其余的和Astar算法应该是一样的 # init the start and end node start_node = node(None,start) end_node = node(None,end) # init the open and closed lists open_list = [] close_list = [] # add the start node to the open list open_list.append(start_node) # loop util find the end_node while len(open_list)>0: # make the best node as current_node # init 1 current_node = open_list[0] current_index = 0 for index, nod in enumerate(open_list): if nod.f<current_node.f: current_node = nod current_index = index # pop the curr node off open list, add to close list open_list.pop(current_index) close_list.append(current_node) # terminal conditions (reach the end node ) if current_node == end_node: path = [] while(current_node is not None): path.append(current_node.position) current_node = current_node.parent # return the path we find. return path[::-1] # the body of the loop: update the nodes # find the available children nodes children = [] # define the adjacent squares positions = [(-1,0),(1,0),(0,-1),(0,1)] for pos in positions: # get childrens positions node_pos = (current_node.position[0]+pos[0], current_node.position[1]+pos[1]) # make sure within range if node_pos[0] < 0 or node_pos[0] >= map.shape[0] or node_pos[1] < 0 or node_pos[1] >= map.shape[1]: continue # mkae sure walkab mapflag = map[current_node.position[0], current_node.position[1]] != map[node_pos[0], node_pos[1]] slopeflag1 = slope[node_pos[0], node_pos[1]] == 0 or slope[current_node.position[0], current_node.position[1]] == 0 slpopeflag2 = slope[node_pos[0], node_pos[1]] != slope[current_node.position[0], current_node.position[1]] if mapflag and (slopeflag1 or slpopeflag2): continue # we need creat node first to find out if it is in the openlist or closed list new_node = node(current_node, node_pos) children.append(new_node) # loop those children # using the __eq__ to judge if it's already traveled. for child in children: if child in close_list: continue # create f,g,h for the legal child child.g = current_node.g + 1 child.h = manhattan(child.position, end_node.position) child.f = child.g + child.f # if the child is already in the open list, compare it if child in open_list: open_index = open_list.index(child) open_node = open_list[open_index] if child.g > open_node.g: continue open_list.pop(open_index) # if it is not in the open/closelist or better than that in open list, we add it. open_list.append(child)

September 28, 2021 · 2 min · 411 words · aikenhong ·  Algorithm
#Algorithm

Windows Configuration01 WSL2

WSL(Windows Subsystem Linux) 将 Linux 环境部署在 Windows 中,Linux 环境在补全了 Windows 开发上的不足之外(Bash 等),还有以下的几个特性极大的便利开发和日常使用,因此强烈推荐启用并安装。 win11 中 wsl2 已经支持相应主机的 cuda,便利了机器学习的开发; 子系统中通过/mnt 挂载了 windows 的磁盘,可以通过子系统访问和管理 windows 环境; windows 资源管理器可访问和管理子系统中的文件 支持 windows 打开子系统中的 GUI 应用 无论是将 windows 和 linux 分别作为日常和开发的环境来隔离,还是两个协同去做开发和日常,都是一个比较不错的选择,下面就介绍一下如何安装和使用 WSL2。 开始之前可以参考 windows terminal 安装一下这个官方的终端模拟器,在 windows 上的表现是比较优秀的 如果是考虑在 windows 环境开发的话,也可以参考这个[windows],里面有我个人推荐的一些应用。 启用并安装 WSL2 安装和启用 WSL2 需要在 windows 的服务中勾选 Hyper-V 和 Windows Subsystem Linux 支持两个选项,具体操作如下: Win + S 搜索 “功能”,打开启用或关闭 windows 功能 启用对应功能,功能安装完毕后即可 安装 linux 发行版可以在 windows store 安装,也可以通过如下的命令进行安装: powershell # 列出对应的发行版 wsl -l -o # 选择相应的发行版进行安装 wsl --install -d <Distribution Name> # 如果当前的WSL是1版本,更新到2 wsl -l -v wsl --set-default-version 2 安装完发行版之后,WindowsTerminal 中应该会自动出现其配置文件,如果没有出现也不要紧,可以先迁移其存储位置后再添加配置文件。 ...

September 28, 2021 · 3 min · 539 words · aikenhong ·  Windows ·  WSL2
#Windows #WSL2

Windows Configuration00 系统初始配置

@AikenHong 2020 本文介绍个人的 windows 开发环境搭建(包括一些环境安装、功能启用)以及一些使用的小 tips。 软件推荐 Windows 的账号同步功能善用,减少在环境迁移的时候对浏览器插件和 Vscode 插件的繁琐同步步骤。 同时对 Onedrive 和外接硬盘的应用可以很好的减轻备份的负担,在网络环境对 Onedrive 友好的时候还是推荐使用,在 Mac 和 Windows 上都有一个比较好的体验。 一些基础的软件 Software Type Free? & source Powertorys system enhance y & github Translucent beautify y & Microsoft Store Snipaste system enhance y & offical site Clash for windows proxy y & github everything search-file y & offical site Potplayer Player y & offical site Twinkle Tray screen control y & offical site 7 zip system enhanc y & offical site Zerotier NAT y & offical site Nerd Font Font y & offical site Wallpaper Engine beautify n & steam MyDockerFinder beautify n & steam IDM Download n & offical site 开发工具 Software Type Free? & source Windows Terminal Terminal Simulator y & Microsoft Store Powershell 7 Shell y & Github VsCode Editor y & Offical Site Visual Studio IDE y & Offical Site Interllij IDEA IDE n & Offical Site Git - - Nodejs - - Anaconda - - 文档编写 Software Type Free & Source Obsidian Markdown Editor y & offical-site Typora Markdown Editor n & offical-site Picgo Image Upload y & offical-site CopyTranslate Translate y & offical-site Mathpix Snipping Tool Latex Formulate - & offical-site Daily Software Free & Source Office n & offical-site Tim y & offical-site WeChat y & offical-site OneDrive y & offical-site Steam - & offical-site Epic - & offical-site yy y & offical-site uu n & offical-site 网易云 y & offical-site 开发环境配置 安装 python:直接去 https://www.anaconda.com 下载,安装的时候使其添加到路径中 安装 Node:windows 直接去 nodejs 官网下载安装,详细文档请参考Node Version Manage - AikenH Blogs 安装 Window Terminal: Win11 中自带 Win10 可以在 windows store 中安装,也可以去 Github 界面安装 配置请参考 WindowsTerminal - AIkenH Blogs 安装 PowerShell7 该部分安装 PS7 并在 WindowsTerminal 中设置其配置文件: ...

September 28, 2021 · 2 min · 418 words · aikenhong ·  Windows
#Windows

基于 Gitbook 发布笔记

Gitbook命令行工具,基于Markdown编写文档,后续基于Github发布该Blog 笔记的构建流程: Chapter1 Install 安装Gitbook之前我们需要安装node.js和npm的依赖,使用npm安装gitbook 首先安装Install Nodejs,Npm Windows:Node.js (nodejs.org) Linux: bash # add & update apt source before install nodejs. curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - sudo apt-get update # install nodejs after that. sudo apt-get install -y nodejs 然后安装gitbook ...

September 26, 2021 · 2 min · 407 words · aikenhong ·  Blog ·  Gitbook
#Blog #Gitbook

RL-DouZero

Desc: GAME, RL Finished?: Yes Tags: Paper URL1: https://arxiv.org/abs/2106.06135 URL2: https://github.com/kwai/DouZero URL3: https://github.com/datamllab/rlcard-showdown ) 使用蒙特卡洛方法进行自我对弈不断更新预测模型的方法,这实际上也是普通人对于强化学习如何在self-play中实现自我更新的最基础的想法把: 自我对弈(记录动作序列)- 用最终的胜负(价值)更新网络。 算法的设计和思路 算法的目标是学习一个价值网路。网络的输入是当前状态和一个动作,输出是在当前状态做这个动作的期望收益(比如胜率)。简单来说,价值网络在每一步计算出哪种牌型赢的概率最大,然后选择最有可能赢的牌型。蒙特卡罗方法不断重复以下步骤来优化价值网络: 用价值网络生成一场对局 记录下该对局中所有的状态、动作和最后的收益(胜率) 将每一对状态和动作作为网络输入,收益作为网络输出,用梯度下降对价值网络进行一次更新 其实,所谓的蒙特卡罗方法就是一种随机模拟,即通过不断的重复实验来估计真实价值。 如下图所示,斗零采用一个价值神经网络,其输入是状态和动作,输出是价值。首先,过去的出牌用 LSTM 神经网络进行编码。然后 LSTM 的输出以及其他的表征被送入了 6 层全连接网络,最后输出价值。 系统训练的主要瓶颈在于模拟数据的生成,因为每一步出牌都要对神经网络做一次前向传播。斗零采用多演员(actor)的架构,在单个 GPU 服务器上,用了 45 个演员同时产生数据,最终数据被汇集到一个中央训练器进行训练。比较有趣的是,斗零并不需要太多的计算资源,仅仅需要一个普通的四卡 GPU 服务器就能达到不错的效果。这可以让大多数实验室轻松基于作者的代码做更多的尝试。 该方法的设计和实现上听起来都挺简单的,可以找个时间自己测试一下,玩一玩这个东西,对于我来说,看看他们怎么用这个lstm去进行历史编码的,以及在对transformer了解后,看看如何用transformer去替代这样的lstm是我这边的研究重点。 蒙特卡洛方法存在的问题 蒙特卡罗方法在强化学习领域中被大多数研究者忽视。学界普遍认为蒙特卡罗方法存在两个缺点: 蒙特卡罗方法不能处理不完整的状态序列 蒙特卡罗方法有很大的方差,导致采样效率很低。 但是斗地主中,可以产生转正的状态序列,同时很容易通过并行来采集大量的样本降低方差,主要是实现上简单,但是可能也是需要大量的数据把。 蒙特卡洛方法在该任务上存在的优势 很容易对动作进行编码。斗地主的动作与动作之前是有内在联系的。以三带一为例:如果智能体打出 KKK 带 3,并因为带牌带得好得到了奖励,那么其他的牌型的价值,例如 JJJ 带 3,也能得到一定的提高。这是由于神经网络对相似的输入会预测出相似的输出。动作编码对处理斗地主庞大而复杂的动作空间非常有帮助。智能体即使没有见过某个动作,也能通过其他动作对价值作出估计。 不受过度估计(over-estimation)的影响。最常用的基于价值的强化学习方法是 DQN。但众所周知,DQN 会受过度估计的影响,即 DQN 会倾向于将价值估计得偏高,并且这个问题在动作空间很大时会尤为明显。不同于 DQN,蒙特卡罗方法直接估计价值,因此不受过度估计影响。这一点在斗地主庞大的动作空间中非常适用。 蒙特卡罗方法在稀疏奖励的情况下可能具备一定优势。在斗地主中,奖励是稀疏的,玩家需要打完整场游戏才能知道输赢。DQN 的方法通过下一个状态的价值估计当前状态的价值。这意味着奖励需要一点一点地从最后一个状态向前传播,这可能导致 DQN 更慢收敛。与之相反,蒙特卡罗方法直接预测最后一个状态的奖励,不受稀疏奖励的影响。 Reference 快手开源斗地主AI,入选ICML,能否干得过「冠军」柯洁? ...

July 6, 2021 · 1 min · 86 words · aikenhong ·  RL
#RL

Leetcode 题型和框架代码总结

文章的部分内容被密码保护: --- DON'T MODIFY THIS LINE --- @Aiken 2021 简明的描述相应的框架和提醒分析,不输出冗余内容,结合笔记和跳转链接进行具体的复习,该文只作为大纲使用。 适用的情况分析 算法的具体框架和思路 特殊情况描述 怎么读取命令行的输入,在笔试的时候可能会需要 C++笔试读取输入的操作 待整理: Link1 ;Link2 输入通常使用while+cin»来进行,这种方式也可以直接读入整行的string; 需要注意的是,这种方式的话,如果使用的是getline,当遇到换行符的时候cin会直接停止继续输入; cpp while(cin>>a>>b); // 主要是按照类型来进行cin,操作应该是通过空格来分割的。 // 按照我们执行的次数来进行指定次数的读取操作 以指定符号分割的字符串输入 char str[3][11]; cin.getline(str[0], 11, ','); //接收最多10个字符 ,以‘,’作为结束符 cin.getline(str[1], 11, ','); cin.getline(str[2], 11); //默认结束符 enter 常见数据类型和特殊专题 经常在那种预设值出问题,导致不会更新后续的max or min ...

June 29, 2021 · 11 min · 2152 words · aikenhong ·  Cpp ·  Leetcode
#Cpp #Leetcode

Pooling

DownSampling:Pooling的全面调研 @Aiken 2021 笔记摘录: 深度神经网络中的池化方法:全面调研(1989-2020) - 知乎 ;相同论文的简单中文Version 16页综述,共计67篇参考文献。网络千奇百怪,但基础元素却大致相同!本文全面调研了1989至2020年一些著名且有用的池化方法,并主要对20种池化方法进行了详细介绍(这些方法,你都知道么?) 注1:文末附【计算机视… 来自 https://zhuanlan.zhihu.com/p/341820742 原文:《Pooling Methods in Deep Neural Networks, a Review》 整合2 池化的根本目的(Motivation) 卷积神经网络是DNN的一种特殊类型,它由几个卷积层组成,每个卷积层后都有一个激活函数和一个池化层。 池化层是重要的层,它对来自上一层的特征图执行下采样,并生成具有简化分辨率的新feature maps 。该层极大地减小了输入的空间尺寸。 它有两个主要目的。 首先是减少参数或权重的数量,从而减少计算成本。 第二是控制网络的过拟合。 池化可以增加网络对于平移(旋转,伸缩)的不变性,提升网络的泛化能力。 增大感受野; 降低优化难度和参数数目, 理想的池化方法应仅提取有用的信息,并丢弃无关的细节。 特征不变性、特征降维、在一定程度上防止过拟合,更方便优化 主流的池化方法 Average Pooling 平均池化 没啥好说的,就是每个block取一个均值。如下图所示:更关注全局特征 Max Pooling 最大值池化 更关注重要的局部特征 ...

June 23, 2021 · 2 min · 232 words · aikenhong ·  Pooling ·  Survey ·  ML-Backbone
#Pooling #Survey #ML-Backbone

OW-openmix

@Aiken 2021 究极万恶的撞车论文 Intro Motivation :Tackle the problem of 发现无标注数据中与给定(已知)类别不相交的新类。 Related Research: 现有的方法通常1. 使用标记数据对模型进行预训练; 2. 无监督聚类在未标记的数据中识别新的类 作者认为label带来的essential knowledge在第二步中没有被充分学习利用到,这样模型就只能从第一步的现成知识中获益,而不能利用标记数据和未标记数据之间的潜在关系 Hypothesis: 有标记的类别和无标记的类别之间没有Overlap,这样导致在两个类别之间很难建立学习关系,(为啥我感觉这个说的都是屁话) Solution: Openmix:将标注的数据和未标注的数据同时混合起来得到一个联合标签的分布中,用两种方式来动态合成示例: 我们混合标记和未标记数据作为Training Img,混合了已知类别的先验生成的伪标签会比无监督情况下生成的伪标签跟家的可靠?防止在错误的伪标签前提下发生过拟合 在第一步的时候我们鼓励具有高类别置信度的无标记example作为可考虑的类别,然后我们将这些samples作为anchor,并将它们进一步的和无标注的samples整合,这使得我们能够对无标注数据产生更多的组合,并发现更精细的新类关系。 Detail 果然在混合的方式上和MixUp的策略进行比对了,就是diss了Mixup使用伪标签的情景可能会进一步的引入不确定性,导致算法的效果反向优化,就是再label和unlabeled数据上混用mixup,而不是单纯的对unlabel数据集进行混合。 首先将没有overlap的标签表现为联合标签分布再进行混合,也就是加长onehot,这样的标签的优越性在?对于unlabelled data引入了确定性,防止标签容易过拟合。也就是给伪标签加入了一个锚定,让他能够变化的更平滑 这尼玛这张图看了不久完事了,bibi一大堆啥的呢。主要分析一下三个损失函数代表的是什么意思。 ...

June 23, 2021 · 1 min · 43 words · aikenhong ·  Open-World Learning
#Open-World Learning

Reward is Enough

Desc: RL Finished?: Yes Tags: Paper 通用人工智能,是否能通过强化学习的奖励机制就实现 实现AGI,强化学习就够了?Sutton、Silver师徒联手:奖励机制足够实现各种目标 对reward构建AGI的可行性的分析和探讨 这篇文章实际上没有给出一个很好的方案通过reward来实现各种AGI的设计,但是给出了在每一种场景下的AGI的reward设计的设想把。和对用reward进行设计的可行性分析。 同时分析了:感知、社交、语言、泛化、模仿,这几个方面 类似地,如果人工智能体的经验流足够丰富,那么单一目标(例如电池寿命或生存)可能隐含地需要实现同样广泛的子目标的能力,因此奖励最大化应该足以产生一种通用人工智能。 这不久回到了最基础的问题,没有这种长线以及大量数据交互以及全面场景的经验流,来支撑这样一个AGI的学习,所以这不也是在现阶段上纸上谈兵嘛? 对这篇论文我的总结是,我不推荐详细阅读,我觉得收益有限,太理想化,其实和强化学习本身的假设也没有太多新东西,我们可以假设强化学习能带来一个AGI,但是对应的约束和限制确实是有点多了。

June 6, 2021 · 1 min · 14 words · aikenhong ·  RL
#RL
<< « Prev 14/17 Next 16/17 » >>
© 2025 aiken's blog Licensed under CC BY-NC 4.0 · Powered by Hugo & PaperMod Visitors: Views: