Month: April 2024

  • 人脑的差异性

    生物智能特别是人类智能的博大精深,鬼斧神工超过一般人的想象,就像冰山一角一样,我们现在理解的在水平面上面的仅仅可能还是少部分,还有更多的奥秘等待我们去发掘探索。 还是可以从感知认知和创造三个层次去说一说 (也可以从身心灵去说一说)。人的感知差异差别相对较小,除了视力听力等感知力有强弱外,对颜色的感知(少数色盲除外)应该是基本接近的,人的感知是模糊的不是数字精确化的,因此也很难描述深色几许,语言文字的在这方面的描述表达能力是不太够的。 人和人的差异性主要体现在认知层面,每个人所处的环境不一样,从小的先天基因和家庭环境,社会环境,学习条件等等,都存在较大差异。因此其大脑的发展发育也千差万别,个人的智力水平,心理发展,价值取向都因环境各异。因此人和人之间的好的沟通也可能限于在常识和相同价值观世界观的人们之间。否则在价值观差异大的情况下可能会出现鸡同鸭讲,对牛弹琴的情景。这时沟通能力就显得更加重要了,好的沟通不容易,要看相互的背景和认知。有时直接表达想法和情绪也要看对象,有时拐弯抹角也会可能产生更多的添油加醋。所以人生知己难得的原因也就在这里。认知层面差异性也是非常多面的,仅仅从理解能力上说,有人数学上解决问题的能力强些,有人在物理上的sense更好,有人文史能力更强,有人艺术感受力更好。所以人脑的大模型的多样性是在历史的进程和现实环境的多样性下长期发展的结果,可谓千姿百态,丰富多彩。 在创造性方面,是对人脑更高的要求,和想象力密不可分。人类的每一次科学技术的突破和艺术珍品佳作都是创造力灵光的闪现,艺术佳作能带给人们感官的美学体验,文史哲创作带给人们思想和语言的独特魅力,而科学技术的发现发明带给人们的是理性的美轮美奂。因此创造性也是人脑独特的珍稀能力。 人脑的差异性还体现在社会分工上,或者社会分工进一步加大了人脑的差异性,行行出状元,术业有专攻,我们一般都是在某一个领域方面有更熟悉的领域知识加载,因此人脑这个大模型可谓是常识+专业+独特环境下综合产出的个性化常识加领域大模型,我们应该重视每个个体大模型的发展,不拔苗助长,不压迫歧视,营造公平和正义的和谐环境,这样才有更好的水土,更灿烂的阳光,也会有更多的参天大树养成。

  • Q-learning算法基本原理-强化学习技术系列2

    在之前的关于马尔可夫决策过程的相关文章中,价值函数一般是某一状态下后续执行行为序列(特定策略)所获得的价值期望。价值函数可以是状态价值函数或动作价值函数,状态价值函数通常用V(s)来表示,而动作价值函数一般用Q(s,a)来表示,其含义为在特定状态下采取动作a来表示后续的价值期望。其表示更加灵活(因为只有状态的价值函数是针对特定策略的,而Q函数多了a这个维度表达能力就更强了),在许多强化学习算法中,特别是基于动作的方法(如Q-learning和Deep Q-Networks),Q函数是中心概念。 下面是Q-learning算法的基本思路解释: Q-learning的Q值更新规则通常使用了贝尔曼方程的近似形式,即将当前状态的Q值更新为当前奖励加上未来最大Q值的折扣后的值。这样可以不断地迭代更新Q值,逐步逼近最优的Q函数,从而学习到最优的策略。Q-learning的算法流程伪代码如下图所示。 对上述公式的解释如下: 一般情况下,可以设置为LMS loss:其中error为下面的表达式。 其中,在实际训练中,为了保持训练网络的稳定性,在训练过程中用到了两个网络,具体的过程可以参考引文3。 Q-learning的深度学习版本为DQN,原理基本差不多,不过Q函数不再以表格来表示,而是用神经网络的结构来表示,这样可以建模状态数很多的情况。 References

  • 马尔可夫决策过程相关算法简介-强化学习技术系列1

    马尔可夫决策过程是强化学习的基本的算法,一些强化学习的概念知识点都在马尔可夫决策过程中有体现。强化学习是决策智能实现的一大类算法的统称,在游戏,智能辅助决策等场景下也有很多成功的应用。 马尔可夫性是概率论里边的一种特性,描述系统当前的状态概率只与上一个状态有关,而与之前的状态无关(或者说由于上一个状态的存在,之前的状态不会直接影响到当前状态)。用公式表示为: 马尔可夫决策过程是对具有离散状态的环境下的决策行为序列进行优化的建模方法。在马尔可夫决策过程中,问题被建模为一个包含以下要素的数学结构: 我们通常称的策略(policy)指的是当前系统环境处于s的情况下,采取某种行为a去执行,这种根据状态去执行特定的行为称为策略,一个策略下的价值函数(value function)定义为: 其中s为起始状态,pi为策略,因为在状态s下执行策略pi后下一个状态是概率分布,因此上述公式是期望值。价值函数更有价值的公式为下面的贝尔曼方程。其为一种递归定义: 上述公式的最右边可以理解为在当前状态为s的情况下执行策略pi后到达状态s’(满足上述的转移概率)后的价值函数,因为是满足概率分布,所以在不同s‘下求得价值函数的期望值即为结果。最优价值函数即为获取价值最大的策略。这里只关心其贝尔曼方程的表达(因为其方便用程序来实现,后面链接会有相关示例代码去进一步加深理解)。 通过上述的价值函数和最优价值函数的递归定义,我们就可以通过迭代算法去找到最优价值函数,并同时能找到其对应的最优策略。这里介绍两种迭代算法来找出最优的策略,第一种为policy iteration,第二种为value iteration。policy iteration首先通过迭代算法找出最优价值函数,然后通过迭代找出最优策略,而value iteration则是直接在迭代找出最优价值函数的过程中同时将最优策略的逻辑一并耦合在一起。 在这里有一个简单的演示示例,为一行五个格子对应五个状态,可以想象成一个五个格子的魔方,只有一个方块,其余为空格,方块可以向左或向右移动,目标是移动到中间的格子上。我们怎么去通过上述的迭代方法找出最优策略(在每一个状态下执行向左或向右行为为最优?)在这里需要注意几个关键的变量的定义,状态,当前状态价值以及状态转移矩阵。可以参考代码链接及里边的代码注解。 ai/samples/RL/MDP at master · kindlytree/ai (github.com)。 上述MDP的最优策略是在状态当前价值和状态转移矩阵已知的情况下的最优策略求解,实际过程中这些并不是已知的。这里也简要介绍一下MDP在状态转移矩阵未知情况下的求解方法,其也是基于迭代贪婪的思想,从一个随机的策略开始,然后逐步迭代找到更好的策略,在每一个中间策略迭代的开始,要做一些self play,积累一些数据,然后通过value iteration去找到更好的策略,流程伪代码如下所示:

  • einsum is all you need-einsum函数在数值计算中的应用示例说明

    在深度学习框架和numpy等数值计算库中,记住不同的矩阵计算,如内积(dot products)、外积(outer products)、矩阵转置(transposes ),矩阵和向量相乘,以及矩阵和矩阵的乘法这些运算的函数名称和参数是容易混淆的一件事情,而爱因斯坦和(einsum)是通过一种领域语言(domain-specific language),用一种优雅的方式去解决这个问题,同时更进一步还可以描述更复杂的tensor的操作。 einsum函数采用如下的格式,einsum(equation,operands),下面为一个模板:result=einsum(“□□,□□□,□□->□□”,arg1,arg2,arg3)。其中□为占位符,表示张量的一个维度,如前面的equation的形式为“□□,□□□,□□->□□”,表示的含义为由三个输入参数,第一个和第三个为矩阵,第二是阶数为3的张量。计算的结果为矩阵。 下面将解释一些使用示例: 其中张量的缩并(tensor contraction)操作是两个多维张量中的分别两个大小相同的维度的内积,具体可以参考链接1中的示例。其中广播操作(broadcast)的实现方式可以参考引文7中的示例说明。 关于示例和相关说明,后面再根据实践会进一步补充更新或进行相关的修正,欢迎读者提出问题意见和建议。 References

  • 回溯算法示例2-n皇后问题

    上次分享过回溯问题的示例数独问题求解,今天向大家介绍一个类似的问题,n皇后问题,问题的来源是国际象棋中的皇后的摆法,两个皇后不能直面水平,垂直,对角线,否则不满足皇后摆放的要求。 这里也采用回溯的思路,假设为8皇后问题,从第一行开始摆放,用变量记录当前摆放行的candidate位置(记为valid_pos_),并且记录从第一行到当前行摆放的位置记录(path,path[i]即为第i行摆放的皇后的位置值)。我们的第一个函数即为根据已经摆放的path(前面已经摆放的行)去获取当前行的candidates,实现逻辑即为针对每一个前面的行的位置,计算其在当前行不可行的位置(竖直,对角线的位置),具体的代码如下。 其中正式的递归回溯过程的示例代码如下: 最后完整串起来的代码为: 完整的代码请参考链接: data-structures-algorithms/backtracking/n-queens.cpp at main · kindlytree/data-structures-algorithms (github.com)

  • 休闲-启功体书法欣赏

    启功老先生是书法界很有影响力的人物,其书法自成一体(启功体),而且电脑也可以生成该字体,别人临摹的也很多,一般人可能难辨是否是他的真迹,这里贴几张启体书法图供大家欣赏。在我读大学的时候,老先生还健在,依稀记得在开学典礼上他做过演讲,还记得他的谦逊的言语,是值得永远学习的榜样。

  • Hadoop-HDFS简介

    Apache hadoop项目开发了一个开源的可信赖,可伸缩的分布式计算软件,Hadoop是一个软件框架,采用简单的编程模型来在计算机集群上分布式的处理大量的数据,它被设计成可以从一台服务器伸缩到几千台机器,该开发框架可以在应用层检测和处理错误,从而在集群上能够提供高可用的服务。大数据的应用场景也有很多,大数据处理技术的集群环境可以用云计算平台搭建,大数据平台也可以作为云计算中的PaaS层提供给有大数据分析场景需求的用户使用。因此大数据技术一般也作为云计算技术专业的专业核心课程之一。后面有机会再和云平台结合具体详细介绍其搭建和使用。这里先做一下简要介绍。 Hadoop的核心组件包括:1、Hadoop Common,支持Hadoop其他模块的通用的一些工具库;2、HDFS(Hadoop Distributed File System)为应用程序提供高吞吐量的分布式文件系统;3、Hadoop YARN,为Hadoop系统中资源管理和任务调度(job scheduling)的框架;4、Hadoop MapReduce:是一个基于YARN系统的大数据集并行处理编程模型;5、Hadoop Ozone。本篇文章主要介绍一下其分布式文件系统的大体思想。 Hadoop HDFS(分布式文件系统),主节点进程(Namenode,存储元数据,文件的目录结构,不同节点之间的负载容量的计算),子节点(Datanode,多个,客户数据存储的地方),如图所示为一个客户端在上传文件时(下方的橙色的Client),将两个文件块上传到两个节点中去,然后文件块再创建对应的副本。HDFS和Ceph都属于大容量分布式存储,但是其实现思想方法和优缺点各有不同,怎么选择和结合使用要到后面有机会再详细介绍。 Hadoop中块副本(Block Replication)机制的如下图所示。为文件名,副本数量以及对应的块id号等信息。一般情况下默认副本数为3。 References

  • 线性方程组求解方法简介

    线性方程组的求解可以有不同的方法,下面理解几种以备后续查阅。 1、拉默法则(Cramer’s Rule)是线性代数中一个关于求解线性方程组的定理,其证明过程见参考文献1。 2、高斯消除法求解线性方程组,将方程组转换为增广矩阵,经过一系列的初等行变换得到了行阶梯矩阵(即上三角矩阵)然后自下至上依次求解即可得到原方程的解。正是由于顺序消去法会因为值过小而引入计算误差,为了减少计算过程中舍入误差对方程组求解的影响,因此是否可以选择绝对值尽可能大的主元作为除数。基于这种思想就有了高斯消去法的改进型:部分主元消去法(Gaussian Elimination with Partial Pivoting)。 3、LU分解在实际应用中,LU分解可以通过Doolittle算法来实现,该算法从下至上对矩阵进行初等行变换,将对角线左下方的元素变成零。这些行变换的效果等同于左乘一系列单位下三角矩阵,这些单位下三角矩阵的乘积就是 ( L ) 矩阵。通过这种方式,可以将原始矩阵 ( A ) 表示为 ( L ) 和 ( U ) 的乘积,从而简化求解过程。 4、更多的方法有jacobi迭代法等,具体可以参考引文4,后续有需要再去做更详细的解释说明。 References

  • 树结构相关算法实例-递归方法遍历路径

    在数据结构这门课程中,树结构是最重要的数据结构之一,有比较多的相关算法,比较有名的有:1、树的递归和非递归遍历;2、二叉搜索树的搜索过程;3、AVL树的构建过程;4、树的深度遍历(DFS)和宽度遍历(BFS)算法;5、其他更多的基于树结构的算法。树结构是图结构的基础,在实际应用中也有很多的问题基于树数据结构去建模。更多树结构的相关算法可以参考本文最后的链接,后面有机会也会进一步补充更多的相关算法。 今天要介绍的是一个树结构的一个中等难度左右的算法,即check一颗二叉树从根节点出发到叶子节点的路径上所有节点的和是否等于一个预先设定的值。 在这里介绍两种思路:1、通过递归遍历树结构找到所有的从根节点到叶子节点的路径,这些路径作为候选,一条一条路径check是否满足条件,如果满足可以将路径打印出来;2、通过递归程序直接判断是否存在这样的路径,这种条件下只返回true或false,不能打印出满足条件的路径。 下面主要介绍第一种算法思路(第二种代码思路请参考本文最后的链接),其主要代码如下所示,这里需要特殊说明的是c++中参数的传递技巧,如下面的代码中,path是普通变量,而all_paths是引用变量。普通变量在每一函数调用时会通过拷贝重新生成一个对象,而引用变量在所有递归调用过程中指向同一个数据变量。 两个算法完整的代码请参考链接: data-structures-algorithms/trees/path-sum.cpp at main · kindlytree/data-structures-algorithms (github.com)

  • 关于ML/DL的一些基本问题的汇总及其解答-part2

    机器学习/深度学习(ML/DL)是当前人工智能的核心基础课程和知识点,只有在充分理解了这些核心基础的内容后才能做好更多相关的研究和工程研发,这里收集汇总了之前回答一些基础的相关问题,以备后续查阅。 准备从1、通用的基本问题,2、回归和分类的基本问题,3、Cost Function(objective fuction,loss,error surface),4、Quality metric,5、Neural Network,6、CNN,7、RNN,8、Transformer,9、Reinforcement Learning等等方面进行汇总,后面欠缺的部分后面将要去进一步更新。 这是第二部分的内容。 References 六、CNN 七、RNN 八、Transformer 九、Reinforcement Learning 十、Feature Engineering(Data augumentation) 十一、Clustering Algorithm 十二、Trees 十三、Optimization Algorithms