![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
人工智能
文章平均质量分 94
系统介绍人工智能、机器学习、深度学习、概率统计相关基础知识以及代码实践
笨牛慢耕
谋生:信号处理,无线通信,芯片设计
兴趣:数理计算机人工智能
遗憾:世界如此丰富,而我如此无知
铭记:日拱一卒终身成长;忠于内心远离油腻;成就自己照亮周围
寄语自己:愿你历尽劫波,内心永远少年
展开
-
Al Go: 蒙特卡洛树搜索(MCTS)简介
蒙特卡洛树搜索(MCTS)为我们提供了一种有效的方法,不需要依赖于什么高深的游戏策略,也不需要利用游戏特定的启发式规则,通过模拟随机棋局的方式来进行棋局好坏的评估,并据此进行落子选择。的选择机制,各子节点访问次数可能并不均等,有的子节点多一些,有的子节点少一些),蒙特卡洛搜索树会不断扩展生长,如果我们的选择机制足够好的话,就有可能以尽量小的代价对所有可能而且有效的“下一手”进行充分的探索和覆盖(同时,有效地忽略了那些价值较低的选项。当然,由于是随机走子,一局、两局的结果可能并不足以代表真实的情况。原创 2023-08-10 12:09:35 · 1824 阅读 · 0 评论 -
RL笔记:基于策略迭代求CliffWaking-v0最优解(python实现)
CliffWalking-v0是gym库中的一个例子[1],是从Sutton-RLbook-2020的Example6.6改编而来。不过本文不是关于gym中的CliffWalking-v0如何玩的,而是关于基于策略迭代求该问题最优解的实现例。这个游戏非常简单,不用计算,直觉就可以知道,最优策略是:在出发点向上走一格;然后在第3行一路右行;到达最右侧后向下移动一格后即到达目标网格。总的奖励是-13点。以下给出基于策略迭代算法来求解这个问题的最优策略,看看能不能得出以上直觉上的最优策略。原创 2023-03-05 18:25:01 · 1698 阅读 · 4 评论 -
RL笔记:动态规划(2): 策略迭代
Sutton-book第4章()学习笔记。本文是关于其中4.2节(策略迭代)。原创 2023-02-26 16:44:26 · 1744 阅读 · 0 评论 -
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 · 1928 阅读 · 2 评论 -
强化学习笔记:基于策略的学习之策略迭代(python实现)
在强化学习中,根据是否依赖于(环境的)模型,可以分为有模型(model-based)学习和无模型(model-free)学习。根据行动的决策基准,可以分为基于价值的学习(value-based)和基于策略学习(policy-based)。前面两篇分别介绍了直接求解贝尔曼方程进行价值计算以及以迭代的方式求解价值近似(value iteration)。本篇进一步介绍基于策略的学习的策略迭代算法原理及其实现。原创 2023-01-28 16:05:38 · 2939 阅读 · 1 评论 -
强化学习笔记:基于价值的学习之价值迭代(python实现)
在强化学习中,根据是否依赖于(环境的)模型,可以分为有模型(model-based)学习和无模型(model-free)学习。根据行动的决策基准,可以分为基于价值的学习(value-based)和基于策略学习(policy-based)。 本文(以及接下来的文章)描述价值估计或者近似,通常称为价值迭代(value iteration)的原理和实现。。。。这里似乎存在状态值的定义与基于价值的方法的行动决策机制之间的矛盾。其本质问题是什么呢?原创 2023-01-25 17:18:40 · 1948 阅读 · 0 评论 -
强化学习笔记:基于价值的学习之价值计算(python实现)
在强化学习中,根据是否依赖于模型,可以分为基于模型(model-based)的强化学习和无模型(model-free)的强化学习。根据策略的更新和学习方法,强化学习算法可以分为基于价值函数的学习方法和基于策略的学习方法。在基于价值函数的学习方法中,根据状态值函数(state-value function)的估计值,进行行动决策。比如说,从t时刻的状态出发,有K种行动可以选择:{},在各行动分别迁移到状态{那选择哪个动作呢?原创 2023-01-18 17:58:21 · 2018 阅读 · 0 评论 -
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 · 1164 阅读 · 1 评论 -
TicTacToe:Minimax-Agent以及人机对弈python实现
在上一篇中实现一个简单的Tic-Tac-Toe人机对弈程序。参见:Tic-Tac-Toe人机对弈程序(python实现)其中计算机棋手或者说AI棋手除了在下一步能够使自己获胜或者阻止对手取胜外,就只是随机落子了。本文更进一步引入经典的经典的对抗性博弈算法minimax算法来为AI棋手加持。原创 2023-01-07 17:09:08 · 1953 阅读 · 1 评论 -
Tic-Tac-Toe有多少种不同棋局和盘面状态(python实现)
在前两篇博客中实现了遍历搜索所有的Tic-Tac-Toe的棋局的python程序实现。根据上一篇的实现(搜索Tic-Tac-Toe所有可能棋局),结果表明有255168种棋局,有5478种盘面状态。但是,这个结果对吗?严格地来说是不对的。因为以上实现没有考虑Tic-Tac-Toe游戏的棋盘的对称性。举个例子说,第一手下在四个角上的任意一个角上本质上都是一样的。考虑了对称性所导致的重复后,总的可能棋局数和盘面状态数会大幅度减小。原创 2023-01-02 15:28:27 · 1213 阅读 · 0 评论 -
Tic-Tac-Toe可能棋局遍历的实现(python)
在上一篇博客中实现了搜索Tic-Tac-Toe游戏的某个棋局的python程序。接下来的问题是,在Tic-Tac-Toe游戏中总共有多少种可能的棋局呢?注意,棋局是指在两个player交替下棋直到终局的过程中所导致的棋盘状态变化的序列。所以,即便所包含的棋盘状态集合完全相同,但是如果棋盘状态出现的顺序不同的话,也是不同的棋局。本文在上一篇的基础上进一步实现搜索Tic-Tac-Toe游戏的所有可能棋局的实现。原创 2023-01-01 16:47:15 · 852 阅读 · 0 评论 -
Tic-Tac-Toe可能棋局搜索的实现(python)
Tic-Tac-Toe中文常译作井字棋,即在3 x 3的棋盘上,双方轮流落子,先将3枚棋子连成一线的一方获得胜利。Tic-Tac-Toe变化简单,可能的局面和棋局数都很有限(相比中国象棋、日本象棋、围棋等来说连九牛一毛都不到!具体有多少可能的局面以及可能的棋局数,本系列完成以后就可以给出答案了),因此常成为和搜寻的教学例子,同时也是的一道好题目。本系列考虑实现一个Tic-Tac-Toe AI,以由浅入深循序渐进的方式来逐步完成这个实现。原创 2022-12-31 16:49:07 · 1851 阅读 · 0 评论 -
Tic-Tac-Toe人机对弈程序(python实现)
前面几篇博客(以循序渐进的方式)实现了Tic-Tac-Toe游戏的棋局搜索、遍历以及所有可能棋局数和盘面状态数的计算,参见:本文先实现一个简单的Tic-Tac-Toe人机对弈程序,为下一步实现基于minimax算法的Tic-Tac-Toe人机对弈程序做一个准备。原创 2023-01-05 11:31:51 · 1703 阅读 · 0 评论 -
哈希冲突概率计算及python仿真
Hash函数不是计算理论的中基本概念,计算理论中只有单向函数的说法。所谓的单向函数,是一个复杂的定义,严格的定义要参考理论或者密码学方面的书籍。用“人类”的语言描述单向函数就是:如果某个函数在给定输入的时候,很容易计算出其结果来;而当给定结果的时候,很难计算出输入来,这就是单向函数。各种加密函数都可以被认为是单向函数的逼近。Hash函数(或者成为散列函数)也可以看成是单向函数的一个逼近。即它接近于满足单向函数的定义。Hash函数还有更通俗的理解方式,即它代表的是一种关于数据的压缩映射。原创 2022-12-21 23:18:31 · 1491 阅读 · 0 评论 -
机器学习笔记:scikit-learn pipeline使用示例
在机器学习中,管道机制是指将一系列处理步骤串连起来自动地一个接一个地运行的机制。Scikit-Learn提供了pipeline类用于实现机器学习管道,使用起来十分方便。既然要将不同处理步骤串联起来,首先必须确保每个步骤的输出与下一个步骤的输入的数据是匹配的。所以,管道中的每个步骤都包含两个方法,fit()用于拟合(或者说训练),transform()用于数据转换(将数据转换为下一个步骤所需要的输入数据格式)。管道的最后一个步骤应该是一个估计器,估计器不再需要数据转换,因此估计器只需要实现fit()方法。原创 2022-12-16 22:03:18 · 1743 阅读 · 0 评论 -
混检在什么条件下是可行的?
十混一混检的目的是用尽量少的采样管数来覆盖所有人的检测。但是只有在人群群体感染率比较低的时候才能达到这一目的。以下我们来计算一下能够实现这一目的的临界条件。原创 2022-12-13 16:51:50 · 1371 阅读 · 1 评论 -
混检阳性概率的计算(贝叶斯定理的一个应用例)
目前核酸混检的基本做法是十混一,如果阳性人群分布完全随机,那么做十混一混检为阳性的概率有多大呢?假设人群整体感染率为p,十个人中任意一个人为阳性的话,混检结果为阳性。只有十个人都是阴性时,混检结果才为阴性。这样为了方便,我们假定混检的漏检概率为0,即任何一个人是阳性的话肯定能够得到混检阳性的结果;虚警概率也为0,即十个人全阴性的条件下不会报告阳性。由于人群整体感染率为p,所以任意某人为阴性的概率为(1-p),十个人全部是阴性的概率为。因此,十混一混检阳性率为:.原创 2022-12-11 18:27:48 · 15701 阅读 · 5 评论 -
欠拟合与过拟合、泛化能力概念总结及python示例
机器学习中欠拟合(underfitting)和过拟合(overfitting)是一个很常见的问题,在训练模型的过程中,我们通常希望达到以下两个目的:(1). 训练的损失值尽可能地小。(2). 训练的损失值与测试的损失值之间的差距尽可能地小。当第一个目的没有达到时,则说明模型没有训练出很好的效果,模型对于判别数据的模式或特征的能力不强,则认为它是欠拟合的。原创 2022-11-11 21:52:31 · 2678 阅读 · 0 评论 -
蒙提霍尔问题(The Monty Hall Problem)解析(贝叶斯分析、Python仿真)
蒙提霍尔问题可能是概率论历史上最具争议的问题。问题的场景极其简单,而其结果却呈现出惊人的反直觉,以至于许多人都无法接受它,曾经引发了巨大的争论。并且有许多著名的人物都在此问题上闹了笑话。本文介绍蒙提霍尔问题,并给出几种不同的分析和解题思路。原创 2022-10-21 23:08:00 · 8989 阅读 · 1 评论 -
肯德尔(Kendall)相关系数概述及Python计算例
与斯皮尔曼秩相关相似的是,肯德尔相关也是一种秩相关系数,是基于数据对象的秩(rank)来进行两个(随机变量)之间的相关关系(强弱和方向)的评估。(比如说,小明在班级中的历史成绩排名为10,英语成绩排名为4,那么在这个班级的学生的历史成绩和英语成绩的斯皮尔曼相关分析中,小明的成绩的贡献就是(10-4=6) )来进行相关关系的评估;当数据样本比较小,而且存在并列排位(tied ranks,比如说小明的历史成绩和英语成绩排名都是第8名)时,肯德尔相关系数是比斯皮尔曼相关系数更合适的一个相关性衡量指标。原创 2022-09-19 18:07:41 · 35388 阅读 · 4 评论 -
贝叶斯模型的一个简单例子及python实现
本文介绍一个贝叶斯推断的python实现例,并展现了基于标量运算的实现和基于numpy的矩阵运算的实现之间的差别。原创 2021-09-09 15:40:08 · 9086 阅读 · 2 评论 -
PyMC3安装以及Hello Project
介绍PyMC3的安装以及第一个Hello Project的运行原创 2021-09-26 17:57:59 · 5116 阅读 · 6 评论 -
论文笔记: 贝叶斯在线变点检测:An intuitive understanding
本文是关于一篇关于贝叶斯变化点检测的一个非常(beginner-friendly )博文的介绍。这篇博文是关于中的算法的介绍。本来我是想读[Ryan Prescott Adams2007],啃半天没读懂,于是找到了这篇想帮助beginner更好理解原论文的博文,结果我依然完全读明白。本想把这篇博文翻译出来分享给大家,但是还没读明白就怕暴殄天物,但是又确实想分享给大家。...原创 2021-09-03 15:12:19 · 8429 阅读 · 16 评论 -
论文笔记:Bayesian Online Changepoint Detection
本文是对以下论文的阅读笔记:Ryan P. Adams, David J.C. MacKay, Bayesian Online Changepoint Detection, arXiv 0710.3742v1 (2007)主要是公式推导的一些补充及几个疑问。原创 2021-09-05 17:10:16 · 3034 阅读 · 13 评论 -
cs231n-2022-assignment1#Q5:Higher Level Representations: Image Features
cs231n-2022-assignment1#Q5:Higher Level Representations: Image Features原创 2022-05-21 22:50:47 · 947 阅读 · 0 评论 -
cs231n-2022-assignment1#Q4:Two-Layer Neural Network(Part2)
本文是李飞飞cs231n-2022的第一次作业的第4个问题(Two-Layer Neural Network)的第2部分(Solver, Debugging and Hyperparameter tuning)的关键点的解说及其相关代码原创 2022-05-19 10:19:47 · 2056 阅读 · 6 评论 -
cs231n-2022-assignment1#Q4:Two-Layer Neural Network(Part1)
本文是李飞飞cs231n-2022的第一次作业的第4个问题(Two-Layer Neural Network)。 手撕代码实现一个最简单的两层神经网络。没有starter code的基础,以及循序渐进的问题安排,感觉是万万无法完成这样的一个作业。不管从深度学习算法还是从编程技能来说都是一个巨大的挑战。原创 2022-05-17 22:06:34 · 3094 阅读 · 3 评论 -
Leetcode概率题面试突击系列6~10
Leetcode概率题面试突击系列6~10原创 2022-05-16 21:21:44 · 628 阅读 · 0 评论 -
cs231n-2022-assignment1#Q3:Implementing a softmax classifier
本文是李飞飞cs231n-2022的第一次作业的第3个问题(Implement a Softmax classifier)。 包括softmax loss函数以及梯度的详细推导以及代码。原创 2022-05-12 09:18:26 · 1098 阅读 · 0 评论 -
cs231n-2022-assignment1#Q2:训练一个支持向量机(SVM)
本文是李飞飞cs231n-2022的第一次作业的第2个问题(Training a Support Vector Machine)。 本作业主要包括以下内容(在starter-code的基础上以完型填空的方式补充关键代码最终构成一个完整的SVM模型):SVM损失函数实现,梯度实现,向量化实现,Mini-batch SGD训练,超参数调优等等原创 2022-05-10 16:58:06 · 1135 阅读 · 2 评论 -
Image数据数值计算处理的一个小问题
今天在做图像分类实验的手撕代码实验中碰到了一个非常无厘头的问题,折腾了两个小时,最后搞明白了错在哪儿了后,心中一万头草泥马奔腾而过。。。感觉自己就是一个智障。。。记录于此,给自己提个醒。背景是做一个图像分类器(Image classification)的手撕代码实验,作为对比,先实现一个最naive的kNN分类器。在kNN分类器中需要求两个图像之间的距离,这里采用欧几里得距离。纸上得来终觉浅,绝知此事要躬行。。。原创 2022-05-06 16:31:04 · 725 阅读 · 0 评论 -
蒙特卡罗仿真(2):醉汉的随机漫步仿真示例(Python实现)
对醉汉随机漫游的蒙特卡洛仿真实例,Python。醉汉总能找到回家的路,喝醉的小鸟则可能永远也回不了家。。。原创 2022-03-28 16:14:30 · 6258 阅读 · 0 评论 -
蒙特卡罗仿真(1):入门求生指南(Python实例)
结合python仿真实例介绍通往蒙特卡罗仿真世界之路原创 2022-03-24 13:18:01 · 8610 阅读 · 0 评论 -
机器学习笔记:初识XGBoost (XGBoost分类器代码实验)
XGBoost( eXtreme Gradient Boosting:极限梯度提升)是基于决策树的集成机器学习算法,它以梯度提升(Gradient Boost)为框架,由GBDT发展而来。它的主要目标是提升模型运行的速度和有效性(efficiency)。本文不涉及更深的理论介绍(感兴趣者可以去读原论文, Ref3提供了一个不错的解读),仅限于基于代码实验简要介绍如何构建你的第一个XGboost应用模型。原创 2021-12-29 12:35:54 · 6959 阅读 · 0 评论 -
机器学习笔记:k近邻算法介绍及基于scikit-learn的实验
kNN(k-Nearest Neighbors)算法,即k近邻算法可以说是最简单的机器学习算法,简单到kNN算法模型的构建都不需要训练,收集有标签数据样本就完事了!kNN算法的核心思想是:未知样本对应的target值由“距离”其最近的“k”个样本按照既定的“决策机制”进行决定。正所谓:近朱者赤近墨者黑。本文结合基于scikit-learn的代码实验对kNN算法做一个基本的介绍.原创 2021-12-26 16:51:44 · 2072 阅读 · 0 评论 -
机器学习笔记:常用数据集之scikit-learn生成分类和聚类数据集
scikie-learn中用于生成数据集的接口函数统一以'make_'打头,可以生成以下类型的数据集:(1) 分类和聚类数据集; (2) 回归数据集; (3) 流形学习数据集;(4) 降维数据集。 作为本系列的第三篇,本文介绍分类和聚类数据集的生成用的9个接口函数。原创 2021-12-22 11:21:37 · 7805 阅读 · 0 评论 -
机器学习笔记:常用数据集之scikit-learn在线下载开源数据集
机器学习算法是以数据为粮食的,所以机器学习开发的第一步就是数据的准备。数据预处理和特征工程是机器学习中不显眼(没有像算法开发那样亮丽)但是往往是涉及工作量最大的一部分。本系列简要介绍这几种数据集的生成、加载和/或获取方式,以及相应的基于scikit-learn的处理方法。 本文作为本系列的第二篇,介绍scikit-learn提供了接口函数可在线下载的开源数据集。原创 2021-12-19 14:47:36 · 4238 阅读 · 0 评论 -
机器学习笔记:常用数据集之scikit-learn内置玩具数据集
机器学习算法是以数据为粮食的,所以机器学习开发的第一步就是数据的准备。数据预处理和特征工程是机器学习中不显眼(没有像算法开发那样亮丽)但是往往是涉及工作量最大的一部分。本系列简要介绍这几种数据集的生成、加载和/或获取方式,以及相应的基于scikit-learn的处理方法。本文作为本系列的第一篇,先介绍scikit-learn内置的一些玩具数据集。原创 2021-12-18 15:15:14 · 5017 阅读 · 3 评论 -
基于python/scipy学习概率统计(0):基础概念
概率论和统计学是数据科学的基本支柱,机器学习和人工智能的底层原理也无非就是概率论和统计学和线性代数。要想在这些领域有所作为,对它们背后的数学原理有一些深入的理解是必要条件。本系列将从实用的角度来一个关于概率论和统计学的飞掠之旅(也就是说不会太纠结于繁琐的概念描述、数学推导和定理证明,一切以实用为指导原则),特别地,借助于python中的scipy.stats模块进行一些编程实验,帮助获得一些直观认识,这些编程实验本身也是实际应用中经常需要用到的技巧。原创 2021-12-05 18:08:58 · 2179 阅读 · 0 评论 -
基于python/scipy学习概率统计(3):正态分布
概要性介绍正态分布并给出基于python/scikit-learn的代码示例实验原创 2021-12-02 08:17:27 · 15075 阅读 · 1 评论