自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(543)
  • 资源 (1)
  • 收藏
  • 关注

原创 Tutorial: Mathmatical Derivation of Backpropagation

反向传播是神经网络中常用的一种训练算法,其基本思想是通过计算损失函数对每个权重的梯度,然后使用梯度下降法来优化神经网络的权重。在神经网络发展的早期,当只有一层网络的时候,梯度下降算法的实现是显而易见的。单层的神经网络(线性回归啊,logistic回归其实都可以看成是单层的神经网络)能做的事情有限。在设计更多层数的神经网络的时候,所遇到的一个根本的难题就是如何(有效地)计算最终的损失函数对除了输出层以外的各层(即隐藏层)的权重参数的梯度。

2023-08-30 16:37:25 612

原创 Softmax, Cross-entropy Loss and Gradient derivation and Implementation

简要介绍机器学习、深度学习中常用的softmax函数,cross-entropy损失函数,以及它们的梯度推导(尤其是softmax和cross-entropy loss级联后的梯度推导)。特别地,从对单个变量的偏导数,到对输入向量的偏导数(即梯度),乃至到对整个batch的梯度的矩阵表示。最后,给出对应的python实现。这些将成为完全DIY用python实现一个分类神经网络的一个基本构成模块。

2023-08-26 10:06:00 662

原创 Al Go: 蒙特卡洛树搜索(MCTS)简介

蒙特卡洛树搜索(MCTS)为我们提供了一种有效的方法,不需要依赖于什么高深的游戏策略,也不需要利用游戏特定的启发式规则,通过模拟随机棋局的方式来进行棋局好坏的评估,并据此进行落子选择。的选择机制,各子节点访问次数可能并不均等,有的子节点多一些,有的子节点少一些),蒙特卡洛搜索树会不断扩展生长,如果我们的选择机制足够好的话,就有可能以尽量小的代价对所有可能而且有效的“下一手”进行充分的探索和覆盖(同时,有效地忽略了那些价值较低的选项。当然,由于是随机走子,一局、两局的结果可能并不足以代表真实的情况。

2023-08-10 12:09:35 1386

原创 git : 从入门到实战进阶

记录日常git使用过程中碰到的一些常见问题的解决,以及一些常用技巧。作为自己作为git使用者的从入门到进阶的成长过程。不求完备但求简洁实用。动态更新。。。

2023-07-15 17:47:06 789

原创 linux系统管理:常用命令和技巧

日常使用中的点点滴滴的积累。不求系统全面,但求简洁实用。

2023-07-14 23:24:33 546

原创 vim/gvim: 文本搜索和替换命令和常用技巧例

vim/gvim: 文本搜索和替换命令和常用技巧例。。。可用用鼠标操作,也可以按Ctrl+V,然后用导航键(navigation key,即四个箭头键)进行范围选中。可以键入“:s”以查询当前编辑会话期间所有替换命令,用up/down来选定,然后回车即可重复执行。还可以用+和-来表示基于前一个行号指示,指定第2个行号指示相对于前一个的偏移值。反之,在pattern后面加上“\C”,ze表示要求区分大小写。在以上例中,"%"表示指定整个文件作为操作范围,即%与g结合表示对整个文件进行全局替换。

2023-07-07 20:58:39 15026 2

原创 linux中结合sed和grep的全局文本替换示例

sed命令中的oldstring和newstring不需要双引号围起来。grep命令前后是一对“`”,不是单引号,是键盘左上角的那个!path:路径,可以是一个文件路径,也可以是一个目录路径。grep命令的字符串可用双引号“”围起来,也可以不用。-i 表示inplace edit,就地修改文件。newstring:要替换成为的新字符串。-r 表示递归式地搜索子目录。oldstring:原字符串。-l 表示输出匹配的文件名。

2023-06-05 20:35:13 2023

原创 数字电路仿真编译文件指定方式

一个设计通常可能会可以通过预处理器宏开关来控制其中的配置情况或者设计选项的切换,本质上是切换编译范围。有时也通过宏来指定设计参数。比如说一个DMA的设计,4个通道还是8个通道,在编译时指定宏的值来决定按几个通道进行设计配置,也同样可以在命令行或者file.lst指定宏的定义,这里有两种情况。如下所示(最后两行):+libext+.v其中,NUM_CH对应于设计中使用到的一个参数类的宏,比如说用于指定通道数为8个。

2023-05-26 21:11:21 1816

原创 二叉树的序列化(serialization)与反序列化(de-serialization)

本文简要介绍二叉树的序列化处理和反序列化处理及对应的python实现。二叉树通常为了方便而以一维数组(比如说python list)的格式进行存储,二叉树的序列化(serialization)就是指将二叉树转换成列表或者一维数组的形式。实际使用的时候再由列表的形式变换回二叉树的格式,这个就是反序列化(de-serialization)。序列化和反序列化是各种复杂的数据结构的实际存储和使用时都需要碰到的问题。

2023-05-22 20:53:18 1394 1

原创 Python: 导入或执行python源文件的几种方法

本文介绍python中导入或执行python源文件(通常是从另一个python源文件中)的几种常用方法。包括import, exec(), os.system()等。

2023-05-12 19:45:14 5156 1

原创 Linux压缩和解压缩(tar, zip, bz2, 7z, xz, rar, etc)

汇总简介linux系统中常见各种文件压缩格式,包括tarball, zip, bz2, 7z, xz,rar等等的压缩和解压缩。本文中只介绍所涉及到的工具或命令常见使用方法,更详细更高端的使用方法可以用"cmd --help"的方式进行查看。

2023-05-02 14:32:11 2186

原创 Python string formatting: %-formatting, str.format(), f-strings

Python中有三种字符串格式化的方式: (1) %-formatting (2) str.format() (3) f-strings 本文简要介绍这三种字符格式化方法的使用方式。

2023-04-30 15:28:43 980

原创 关于稠密性和连续性的通俗理解

通俗地说,当我们说某个数域的稠密性时说的该数域中任意两个不同的数之间必然还存在第三个(同样属于该数域的)不同的数。有理数是稠密的,任意两个有理数之间还有无穷多个有理数。取任意两个不同有理数p、q,显而易见的是,(p+q)/2是居于p和q之间的另一个有理数。依此类推,可以构造出p和q之间的任意多个有理数。

2023-04-27 13:02:37 2392

原创 git: Linux中创建中心仓库(or 裸仓库:bare repository)

简单介绍在linux系统中创建一个多人协同作业用的git repository的步骤及一些相关设置。这里仅考虑在同一linux服务器内的用户要访问该git-repo,暂不涉及从外部网络访问该git-repo的设置。首先,假定你有管理员权限,并且假定先创建了一个组grp_git,允许该组中的成员访问该共享git repository。

2023-04-17 13:54:11 1201

原创 算法笔记:前缀和+哈希表(leetcode题解例)

前缀和(以及与哈希表组合)是解决算法问题中常见的技巧。本文结合几道leetcode算法题解例介绍前缀和+哈希表的应用例。前缀和:针对一个给定的数列A,它的前缀和数列定义如下:(这里采用和c或者pyhton相同的从0开始的下标方式,以便于和编程进行对照)。前缀和的计算有一个良好的特性,即不是每个前缀和都需要独立计算,前后有依赖关系,如下所示:,这样的话针对数组(本文中不追求严格,数列和数组视为可以互换的名词)A,它的所有的前缀和可以在一次从左到右的遍历中以O(n)(而不是O(n**2)!

2023-03-12 16:45:17 1151

原创 RL笔记:基于策略迭代求CliffWaking-v0最优解(python实现)

CliffWalking-v0是gym库中的一个例子[1],是从Sutton-RLbook-2020的Example6.6改编而来。不过本文不是关于gym中的CliffWalking-v0如何玩的,而是关于基于策略迭代求该问题最优解的实现例。这个游戏非常简单,不用计算,直觉就可以知道,最优策略是:在出发点向上走一格;然后在第3行一路右行;到达最右侧后向下移动一格后即到达目标网格。总的奖励是-13点。以下给出基于策略迭代算法来求解这个问题的最优策略,看看能不能得出以上直觉上的最优策略。

2023-03-05 18:25:01 1573 4

原创 4K vs. UHD: What’s the Difference?

UHD的上一代标准是HD,HD的帧大小(分辨率)为1920*1080,UHD严格地来说有两种,一种是3840*2160;由于4K的江湖名声远比UHD跟通俗而易被大众接受,所以电视或者显示器等设备制造商就更喜欢用4K作为宣传,相当于碰了个瓷,但是其实是指4K UHD。有些厂家会特意标明4K UHD,以区别于DCI 4K,但是绝大多数情况就是直接用4K。4K标准的帧大小为4096 x 2160,是其上一代的2K标准的4倍。所以说,4K是从内容的角度来说事儿,而UHD则是从显示设备的角度来说事儿。

2023-02-28 17:24:57 2202

原创 RL笔记:动态规划(2): 策略迭代

Sutton-book第4章()学习笔记。本文是关于其中4.2节(策略迭代)。

2023-02-26 16:44:26 1624

原创 RL笔记:动态规划(1): 策略估计和策略提升

Sutton-book第4章(动态规划)学习笔记。本文是关于其中4.1节(策略估计)和4.2节(策略提升)。当给定MDP的完全模型后,可以基于动态规划算法求解最优策略。事实上,所有使用的强化学习算法都可以看作是动态规划算法的近似。DP可以用于连续强化学习问题,但是仅限于有限的特殊情况能够给出精确解。常见的做法是将连续问题离散化,然后基于有限MDP的动态规划方法求解。问题设定:Finite MDP{S, A, R, p(s’,r|s,a)}Key Idea:基于价值函数进行结构化的策略搜索。

2023-02-05 15:26:33 1737 2

原创 强化学习笔记:基于策略的学习之策略迭代(python实现)

在强化学习中,根据是否依赖于(环境的)模型,可以分为有模型(model-based)学习和无模型(model-free)学习。根据行动的决策基准,可以分为基于价值的学习(value-based)和基于策略学习(policy-based)。前面两篇分别介绍了直接求解贝尔曼方程进行价值计算以及以迭代的方式求解价值近似(value iteration)。本篇进一步介绍基于策略的学习的策略迭代算法原理及其实现。

2023-01-28 16:05:38 2550 1

原创 强化学习笔记:基于价值的学习之价值迭代(python实现)

在强化学习中,根据是否依赖于(环境的)模型,可以分为有模型(model-based)学习和无模型(model-free)学习。根据行动的决策基准,可以分为基于价值的学习(value-based)和基于策略学习(policy-based)。 本文(以及接下来的文章)描述价值估计或者近似,通常称为价值迭代(value iteration)的原理和实现。。。。这里似乎存在状态值的定义与基于价值的方法的行动决策机制之间的矛盾。其本质问题是什么呢?

2023-01-25 17:18:40 1822

原创 强化学习笔记:基于价值的学习之价值计算(python实现)

在强化学习中,根据是否依赖于模型,可以分为基于模型(model-based)的强化学习和无模型(model-free)的强化学习。根据策略的更新和学习方法,强化学习算法可以分为基于价值函数的学习方法和基于策略的学习方法。在基于价值函数的学习方法中,根据状态值函数(state-value function)的估计值,进行行动决策。比如说,从t时刻的状态出发,有K种行动可以选择:{},在各行动分别迁移到状态{那选择哪个动作呢?

2023-01-18 17:58:21 1883

原创 TicTacToe: 基于时序差分TD(0)算法的agent实现以及完整python实现框架

本文进一步实现一个基于强化学习的时序差分算法(Temporal Difference, TD(0))的Tic-Tac-Toe AI Agent。并进行了多种Agent之间的对战测试。本文中的代码是基于【2】中chapter01的代码进行改造的。包括类结构和类中的方法等实现的修改, 追加Minimax Agent,多种Agent之间的对战测试,等等。当然,本文针对关键要点根据我的理解追加了解读代码说明,希望能够有兴趣的小伙伴有所帮助,一起学习进步。

2023-01-15 14:26:42 1075 1

原创 TicTacToe:Minimax-Agent以及人机对弈python实现

在上一篇中实现一个简单的Tic-Tac-Toe人机对弈程序。参见:Tic-Tac-Toe人机对弈程序(python实现)其中计算机棋手或者说AI棋手除了在下一步能够使自己获胜或者阻止对手取胜外,就只是随机落子了。本文更进一步引入经典的经典的对抗性博弈算法minimax算法来为AI棋手加持。

2023-01-07 17:09:08 1605 1

原创 Tic-Tac-Toe人机对弈程序(python实现)

前面几篇博客(以循序渐进的方式)实现了Tic-Tac-Toe游戏的棋局搜索、遍历以及所有可能棋局数和盘面状态数的计算,参见:本文先实现一个简单的Tic-Tac-Toe人机对弈程序,为下一步实现基于minimax算法的Tic-Tac-Toe人机对弈程序做一个准备。

2023-01-05 11:31:51 1544

原创 Tic-Tac-Toe有多少种不同棋局和盘面状态(python实现)

在前两篇博客中实现了遍历搜索所有的Tic-Tac-Toe的棋局的python程序实现。根据上一篇的实现(搜索Tic-Tac-Toe所有可能棋局),结果表明有255168种棋局,有5478种盘面状态。但是,这个结果对吗?严格地来说是不对的。因为以上实现没有考虑Tic-Tac-Toe游戏的棋盘的对称性。举个例子说,第一手下在四个角上的任意一个角上本质上都是一样的。考虑了对称性所导致的重复后,总的可能棋局数和盘面状态数会大幅度减小。

2023-01-02 15:28:27 1075

原创 Tic-Tac-Toe可能棋局遍历的实现(python)

在上一篇博客中实现了搜索Tic-Tac-Toe游戏的某个棋局的python程序。接下来的问题是,在Tic-Tac-Toe游戏中总共有多少种可能的棋局呢?注意,棋局是指在两个player交替下棋直到终局的过程中所导致的棋盘状态变化的序列。所以,即便所包含的棋盘状态集合完全相同,但是如果棋盘状态出现的顺序不同的话,也是不同的棋局。本文在上一篇的基础上进一步实现搜索Tic-Tac-Toe游戏的所有可能棋局的实现。

2023-01-01 16:47:15 798

原创 Tic-Tac-Toe可能棋局搜索的实现(python)

Tic-Tac-Toe中文常译作井字棋,即在3 x 3的棋盘上,双方轮流落子,先将3枚棋子连成一线的一方获得胜利。Tic-Tac-Toe变化简单,可能的局面和棋局数都很有限(相比中国象棋、日本象棋、围棋等来说连九牛一毛都不到!具体有多少可能的局面以及可能的棋局数,本系列完成以后就可以给出答案了),因此常成为和搜寻的教学例子,同时也是的一道好题目。本系列考虑实现一个Tic-Tac-Toe AI,以由浅入深循序渐进的方式来逐步完成这个实现。

2022-12-31 16:49:07 1734

原创 哈希冲突概率计算及python仿真

Hash函数不是计算理论的中基本概念,计算理论中只有单向函数的说法。所谓的单向函数,是一个复杂的定义,严格的定义要参考理论或者密码学方面的书籍。用“人类”的语言描述单向函数就是:如果某个函数在给定输入的时候,很容易计算出其结果来;而当给定结果的时候,很难计算出输入来,这就是单向函数。各种加密函数都可以被认为是单向函数的逼近。Hash函数(或者成为散列函数)也可以看成是单向函数的一个逼近。即它接近于满足单向函数的定义。Hash函数还有更通俗的理解方式,即它代表的是一种关于数据的压缩映射。

2022-12-21 23:18:31 1231

原创 机器学习笔记:scikit-learn pipeline使用示例

在机器学习中,管道机制是指将一系列处理步骤串连起来自动地一个接一个地运行的机制。Scikit-Learn提供了pipeline类用于实现机器学习管道,使用起来十分方便。既然要将不同处理步骤串联起来,首先必须确保每个步骤的输出与下一个步骤的输入的数据是匹配的。所以,管道中的每个步骤都包含两个方法,fit()用于拟合(或者说训练),transform()用于数据转换(将数据转换为下一个步骤所需要的输入数据格式)。管道的最后一个步骤应该是一个估计器,估计器不再需要数据转换,因此估计器只需要实现fit()方法。

2022-12-16 22:03:18 1485

原创 混检在什么条件下是可行的?

十混一混检的目的是用尽量少的采样管数来覆盖所有人的检测。但是只有在人群群体感染率比较低的时候才能达到这一目的。以下我们来计算一下能够实现这一目的的临界条件。

2022-12-13 16:51:50 1334 1

原创 混检阳性概率的计算(贝叶斯定理的一个应用例)

目前核酸混检的基本做法是十混一,如果阳性人群分布完全随机,那么做十混一混检为阳性的概率有多大呢?假设人群整体感染率为p,十个人中任意一个人为阳性的话,混检结果为阳性。只有十个人都是阴性时,混检结果才为阴性。这样为了方便,我们假定混检的漏检概率为0,即任何一个人是阳性的话肯定能够得到混检阳性的结果;虚警概率也为0,即十个人全阴性的条件下不会报告阳性。由于人群整体感染率为p,所以任意某人为阴性的概率为(1-p),十个人全部是阴性的概率为。因此,十混一混检阳性率为:.

2022-12-11 18:27:48 15478 5

原创 Matlab图像处理基础(2):区域处理,边沿检测

基于Matlab的图像处理基础介绍。Matlab提供了丰富的图像处理相关的工具箱,基于Matlab代码实验可以使得图像处理算法的理解变得更加简单直观。 以下所介绍的一些matlab工具函数都限于篇幅只涉及其基本的用法,更丰富的参数设定等可以查阅matlab说明。 本篇是本系列第二篇,介绍区域处理(Regional Processing),包括卷积、相关、高通滤波(边沿检测)、低通滤波(平滑)等。 上一篇参见:Matlab图像处理基础(part 1) 区

2022-11-29 20:15:24 2785

原创 numpy和matlab的多维数组展平:ravel, flatten, reshape, (:)

matlab的数组展平有两种基本方法,一种是用a(:);另一种是用reshape()函数。运行结果如下:要点:(1) matlab是按列优先进行展平。matlab中是以列作为第1维,行作为第2维,将矩阵展平时,先把第一列取出来,然后取第二列排在第一列后面,然后以此类推。。。(2) matlab本质上把所有标量、向量和矩阵都是当作矩阵(2维数组来看待)。比如说以上代码中即便常数1的size也是(1,1)。所以即便将矩阵展平了其实得到的还是一个矩阵,只是矩阵的两个维度方向的长度发生的变化。

2022-11-25 22:43:27 4205

原创 dB family cheat sheet: dB, dBW, dBm, dBi, dBc, dBFS, etc

简要介绍dB家族的各个成员。。。

2022-11-22 14:15:38 1462

原创 Matlab滤波器设计示例

Matlab提供了非常丰富的滤波器设计工具,其中最基本的是designfilt()函数。designfilt()函数是通用的滤波器设计工具,可以用于设计各种类型的数字滤波器,以及模拟滤波器的数字近似。Matlab还提供了其它很多专用类型的滤波器设计函数,还有基于图形化界面进行滤波器设计的工具filterDesigner(旧版本为fdatool)。本文综合但简要地介绍各种matlab滤波器设计工具,顺便代码示例介绍用于滤波器频谱观测用的工具、以及如何使用所生成的滤波器对象。

2022-11-20 21:16:41 13864

原创 Matlab图像处理基础(1):图像表示,点处理

基于Matlab的图像处理基础介绍。Matlab提供了丰富的图像处理相关的工具箱,基于Matlab代码实验可以使得图像处理算法的理解变得更加简单直观。 以下所介绍的一些matlab工具函数都限于篇幅只涉及其基本的用法,更丰富的参数设定等可以查阅matlab说明。

2022-11-18 20:54:19 11928

原创 量子笔记:布尔逻辑/代数、逻辑门、通用门、可逆计算

量子计算、量子信息、量子编程自学笔记系列。用自己能看懂的方式来表述对于量子计算基础知识的理解。不求体系完备和逻辑严谨、但求通俗易懂。或能顺便给路过的小伙伴一些参考和启发那是纯属巧合概不认账^-^。当然,仅限于轮廓的勾勒和要点简述,对细节感兴趣的话还是要亲自服用正儿八经的专业书籍。本文介绍经典世界的布尔逻辑、布尔代数、通用门、可逆计算等概念,为接下来更好地理解量子计算做一些准备和铺垫。

2022-11-13 12:20:00 2582

原创 欠拟合与过拟合、泛化能力概念总结及python示例

机器学习中欠拟合(underfitting)和过拟合(overfitting)是一个很常见的问题,在训练模型的过程中,我们通常希望达到以下两个目的:(1). 训练的损失值尽可能地小。(2). 训练的损失值与测试的损失值之间的差距尽可能地小。当第一个目的没有达到时,则说明模型没有训练出很好的效果,模型对于判别数据的模式或特征的能力不强,则认为它是欠拟合的。

2022-11-11 21:52:31 2383

原创 Matlab高效编程:向量化(vectorization)、矩阵化、变量预定义

本文介绍几个Matlab常用的提高运行效率的编程技巧。对一个基于数值化的方式计算一个连续函数的频谱(傅里叶变换)的例子给出了三种实现(双重循环、向量化实现、矩阵化实现)代码,对比了运行时间。由于Matlab是解释性执行语言,Matlab不要求变量使用之前进行预定义,也不要求内存的预分配,一切都可以在执行过程中动态分配。这种灵活的方式方便了用户编程,但是同时也带来了潜在的低效率问题。以下针对一个简单的计算例子,用几种不同的代码实现方式来比较不同的写法对于运行效率的影响。

2022-11-01 22:35:17 5156

tictactoe-chenxy.py

TicTacToe的Python实现,包括基于时序差分(TD(0))算法的实现,基于Minimax算法的实现,RandomAgent的实现,各种不同Agent之间的对战测试,以及人机对弈程序等等。

2023-01-15

斯坦福大学CS231N-2022课程第一个大作业全部代码数据

斯坦福大学CS231N-2022课程第一个大作业,包含原始的starter-code package(也可以从课程网页下载)以及本人所完成的所有代码。通过代码对比可以知道代码修改部分。相关解说参见博客https://chenxiaoyuan.blog.csdn.net/article/details/124630014。

2022-05-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除