Category: ICT-Information and Communication Technology
-
八段锦视频分享
中华传统文化源远流长,中医,中国传统儒释道哲学思想还有中国武术。 今天分享一段八段锦,感觉挺好的,全身都能够锻炼得到,中国武术刚柔相济,是强身健体的很好的“保健操”。视频分享见参考引文。 最近深度学习和大模型相关技术又有新进展,1为Alapha Fold3,2为GPT-4o(“o”代表“omni”,全方位,全部的意思)。后面打算学习一下大模型相关的技术原理,并撰写相关的技术系列文章,为大模型相关基础技术普及出一点力,为国产大模型的技术突破提供几米阳光和几滴雨露。欢迎读者提供相关素材和意见建议。 Reference
-
P2P网络技术简要介绍
P2P网络是一种网络技术,有很多应用场景都可以用得到,特别是当前流行的区块链技术中P2P技术将作为主要核心的技术支撑,这里先简要对P2P技术做一下相关说明。如有不正确或补充的地方欢迎读者联系指出。 P2P网络中每一台机器即可以用来做客户端,也可以用来做服务器,其中的任何两个节点不需要服务器就可以直接进行通信从而共享资源交换信息。P2P网络是去中心化的,因此也意味着没有一个中央的授权节点来控制和管理资源。 P2P网络可以有多种应用存在形式,这里几个较有影响力的P2P应用,如用于文件分享的BitTorrent, 区块链网络应用比特币(bitcoin等),去中心化的计算标准Matrix,P2P网络技术还可以用于物联网平台。这些系统虽然也都有一些挑战和平衡综合考虑,但是都是在这些应用场景下要优于传统的客户端服务器的网络模式。 libp2p是一个比较健壮的面向P2P应用的开发库,用其开发P2P的应用有如下的几个优势:1、模块化,libp2p基于组件构建,可以面向不同的应用场景去组合不同的组件去构建应用;2、可扩展的网络协议配置,libp2p支持多种传输协议; 3、提供了多种语言实现的网络发现,数据存储和检索模式的代码,方便不同的编程习惯的程序员去构建;4,支持NAT穿越,NAT穿越,以实现不同内网的机器通信,关于NAT Traversal的原理,可以参考引文7;更多的优势可以参考引文8中的说明文字。 这篇短文主要介绍了P2P技术的应用,关键的技术,以及支持P2P应用开发库libp2p。P2P网络技术可以在云平台中进行部署,如Chainmaker就可以在云平台中进行部署。后续有机会将向大家详细介绍具体技术开发的应用细节。 References
-
区块链技术简介
区块链技术是当前较为重要且可以在生产环境中使用的关键信息技术之一,为可信存储和计算提供了技术保障,这里对区块链技术做一下简要的介绍,欢迎读者批评指正和补充。后续将介绍更多的相关技术和应用的内容。 区块链是一个基于点对点(peer-to-peer network,一种计算机网络技术)的记账系统,允许节点之间直接进行交易而不需要中心授权节点的介入。点对点网络是一个完全的去中心化的。为了满足去中心化的要求,每一个节点都需要一个记账的拷贝。拷贝可以是一个完整的拷贝,或者对于在网络上能够正常工作和保持连接的一个最小拷贝。 为了保证交易的一致性,一致性的方法如 Proof-of-Work, Proof-of-Stake被采用。在高级的密码学算法的辅助下,每一个交易都是安全的。 区块链的用处挺多,可以用在医疗卫生,供应链金融、碳交易、食品追溯等一系列关乎国计民生的重大领域。这里列举两个具体的例子:1、比如医疗卫生部门可以将病人的诊疗数据如检查结果药方等存放到区块链上,当然这些数据也可以贡献给医疗卫生部门做为数据提供。当然也可以解决假药问题,同时帮助病人和制药公司;2、食品追溯,包括食品的种子,生长过程管理数据(施肥撒药等,温度等天气数据,土壤等水土数据),以及保鲜物流,储存条件等信息。碳交易即把二氧化碳排放权作为一种商品,从而形成了二氧化碳排放权的交易,简称碳交易,碳交易有利于减少二氧化碳的排放,有利于环境保护和重构。 区块链技术所用到的底层信息技术有P2P网络,加密算法等,ChainMaker是由几个知名的大公司合作研发的区块链开源底层软件平台,具体介绍可以参考引文链接。区块链技术本身是一种分布式系统,可以和云平台相结合进行生产环境中部署,如引文7中就有基于公有云平台的区块链产品。 References
-
动态规划较为简单的两个示例
动态规划是编程算法里边经常会用到的一种解决问题的思路,这里向大家介绍两个相对比较简单的示例。 示例1:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径? 示例2:给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 其中,第1题中可以将路径数目用二维数组path[m-1][n-1]来表示,path[i][j]就表示为从[0][0]位置起始开始走到[i][j]位置可能的路径。具体的实现方法和代码注释请参考链接。data-structures-algorithms/dp/unique-paths.cpp at main · kindlytree/data-structures-algorithms (github.com) 第2题,假设需要拼接的字符串的长度为s,则可以用一个can_concat[s+1]的数组来标记每一个从开始到index的位置是否可以有字典的单词标记出来。具体代码可以参考链接:data-structures-algorithms/dp/word-break.cpp at main · kindlytree/data-structures-algorithms (github.com)
-
Policy Gradient算法原理简介-强化学习技术系列3
前面的相关文章,介绍了基于价值函数的强化学习算法(MDP和Q-Learning),在强化学习中,除了基于值函数的方法,还有一支非常经典的方法,那就是基于策略(policy-based)的方法。这篇文章将向大家介绍相关的算法思想,不正确或需要修正的地方欢迎大家批评指正。 在前面介绍的Q-Learning算法中,会采用一定的随机策略去选择action(epsilon greedy),一开始会让Agent更偏向于探索Explore,并不是哪一个Action带来的Value最大就执行该Action,选择Action时具有一定的随机性,目的是为了覆盖更多的Action,尝试每一种可能性。等训练很多轮以后各种State下的各种Action基本尝试完以后,我们这时候会大幅降低探索的比例,尽量让Agent更偏向于利用Exploit,哪一个Action返回的Value最大,就选择哪一个Action。 在策略梯度中,Agent一般称为Actor,策略pi通常用一个神经网络来表示,一般神经网络的输出为动作的概率(如softmax)。智能体会自动的探索不同的状态和trajectory(通过随机采样的机制进行实现。如一个policy在某种状态下输出action1的概率为60%,输出action2的概率为40%,则智能体自然而然会更多采样到action1,但也会常采样到action2)。policy gradient还有”No more perceptual aliasing”和”Effective in high-dimensional action spaces“这样的优势, 从初始状态出发,到任务的结束,被称为一个完整的episode(剧集)。这样,一个有T个时刻的eposide,Actor不断与环境交互,形成如下的序列τ: 具体的公式推导可以参考引文1,最后的梯度求解公式如下: 关于其公式的推导可以参考引文1,这里就不做赘述。需要说明和强调的是 对代码有几处说明一下:1、loss为负值,求最小,即为正值最大化,2,采用了Mento Carlo采样的思想,每次训练数据基于一个episode,从开始状态直至完成done;3、当前的某个时刻的R为从当前到最后状态r的一个折扣和,具体可以参考链接7中的实现。 实验中用到了GYM,强化学习算法工具包,可以提供强化学习算法的模拟环境,从而为测试和验证强化学习算法提供了方便。 References
-
新时期的数字化工程应用技术教育教学新需求
今天有幸受邀参加华为和合作伙伴举行的产教融合教育方面的研讨活动,记录一下相关的产业和教育相关的信息以备后需。 随着harmony os及相关的一系列的自主信息化技术的发展及逐渐普及,相关工程技术的教育教学也需要同步的跟进,这里据我了解的情况和背景做一点说明,如有需要补充的地方,请大家联系我补充更新。 一、鸿蒙生态开发,鸿蒙os的应用范围逐渐增多,从手机,平板到各种物联设备(如美的等智能家电),还有一些To B的专业设备如高铁,机场等的嵌入式物联网设备,都部署了鸿蒙系统,鸿蒙系统通过soft bus实现了跨设备的数据共享(不同设备感觉可以成为相互的外围设备一样),众多的android上的应用要移植到鸿蒙系统上来,就需要大量的相关app开发人才,这起码在近几年都是一个显性的应用开发人才需求,应用本科和高职的技术技能人才是比较适合这个方向的; 二、人工智能,人工智能的技术发展也很快,但是除了门槛比较高的人工智能新算法设计发明外,还有一类就是人工智能应用工程师,这类开发主要在利用人工智能的技术去搭建具体的场景应用,包括怎么去做prompt enginerring。怎么利用人工智能已有的sdk和开发套件搭建机械狗,小车,机械臂等具体的场景应用,怎么利用大模型商城代码等等这类也是应用技术型人才所适合的工作方向; 三、云原生技术,很多公司的数据平台和业务都会部署在云平台,这些公司只需关注自己的业务,而不用太专注计算设备平台的物理环境和基础软件的部署和配置。包括IaaS基础设施,PaaS如各种实验平台,大数据平台等; 四、低代码开发,低代码开发以后也会成为应用开发的主要形式,据了解大约在2025年会有70%的应用以低代码的形式开发出来,低代码开发到时候可能也是人人都可以学习的开发技术,通过拖拽和一些简单的操作就可以人人开发出自己的应用来,这方面了解的不多,以后有机会再多关注一下; 还有更多的自主技术,如操作系统,数据库,软硬件协同开发(物联网IOT,AIOT等),以及AI等方方面面需要进一步的推广和普及,关于工程应用开发的大量需求,培养这方面的工程师也是当前较为紧迫的,怎么和企业合作高效培养和对接工作需求,怎么培养同学的实践能力并且达到举一反三,自主学习新技术的能力和方法,也是职业和应用技术教育需要去讨论,总结并将好的思路,实践加以推广从而达到更好的应用工程师工程素养培养的目标。
-
gitlab服务部署
gitlab是在软件开发过程管理中比较有影响力的开源产品,其基于ruby等实现,而现在一般的部署基本上也是基于docker镜像,因此只需拉取编译好的docker镜像环境,然后采用正确的启动脚本启动,配置一些属性项,就可以部署gitlab服务了。 gitlab服务可以提供几个有代表性的功能:1、代码仓库管理,可以按group,subgroup来组织project,有master,maintainer,developer,reporter等角色,方便比较大的平台和组织中不同小组和个人的仓库访问范围和权限管理。2、管理issue,milestone等,将issue和代码的review以及提交等想结合,管理项目进度,可视化项目完成项和待完成项,以便更合理的管理项目进度;3、支持和其他Devops工具和服务集成,如jekins等,后续如有机会也将进一步学习实践并给与介绍。 下面介绍一下部署步骤,希望能对有关读者有用,如有问题,欢迎大家反馈更正。 下面是启动的脚本示例供参考: 进入docker容器,编辑/etc/gitlab/gitlab.rb文件,然后更新如下的配置项 然后在docker容器里执行如下的两个命令启动服务。 这里将gitlab容器内部的nginx服务关闭,可以通过宿主机上的nginx的反向代理服务(proxy_pass)进行访问。如在宿主机的/etc/nginx/conf.d目录下,建立gitlab.conf文件,里边的配置方式示例如下: 其中上述的ssl_certificate 和ssl_certificate_key 需要在去购买SSL证书,这样就可以启动https协议服务了。然后在宿主机上重新加载配置文件,通过命令nginx -s reload就可以更新nginx服务配置,进而可以访问gitlab服务了。
-
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