学问思辨行: 记录生活学习和工作中的实践和思考,以期实现终身成长.
-
新时期的数字化工程应用技术教育教学新需求
今天有幸受邀参加华为和合作伙伴举行的产教融合教育方面的研讨活动,记录一下相关的产业和教育相关的信息以备后需。 随着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服务了。
-
人脑的差异性
生物智能特别是人类智能的博大精深,鬼斧神工超过一般人的想象,就像冰山一角一样,我们现在理解的在水平面上面的仅仅可能还是少部分,还有更多的奥秘等待我们去发掘探索。 还是可以从感知认知和创造三个层次去说一说 (也可以从身心灵去说一说)。人的感知差异差别相对较小,除了视力听力等感知力有强弱外,对颜色的感知(少数色盲除外)应该是基本接近的,人的感知是模糊的不是数字精确化的,因此也很难描述深色几许,语言文字的在这方面的描述表达能力是不太够的。 人和人的差异性主要体现在认知层面,每个人所处的环境不一样,从小的先天基因和家庭环境,社会环境,学习条件等等,都存在较大差异。因此其大脑的发展发育也千差万别,个人的智力水平,心理发展,价值取向都因环境各异。因此人和人之间的好的沟通也可能限于在常识和相同价值观世界观的人们之间。否则在价值观差异大的情况下可能会出现鸡同鸭讲,对牛弹琴的情景。这时沟通能力就显得更加重要了,好的沟通不容易,要看相互的背景和认知。有时直接表达想法和情绪也要看对象,有时拐弯抹角也会可能产生更多的添油加醋。所以人生知己难得的原因也就在这里。认知层面差异性也是非常多面的,仅仅从理解能力上说,有人数学上解决问题的能力强些,有人在物理上的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)
-
休闲-启功体书法欣赏
启功老先生是书法界很有影响力的人物,其书法自成一体(启功体),而且电脑也可以生成该字体,别人临摹的也很多,一般人可能难辨是否是他的真迹,这里贴几张启体书法图供大家欣赏。在我读大学的时候,老先生还健在,依稀记得在开学典礼上他做过演讲,还记得他的谦逊的言语,是值得永远学习的榜样。
本博客主要包含一些工程技术方面的短文和日常生活的随想。感谢所有师长领导朋友和老同学们的关心支持,特别感谢上海交通大学、上海建设管理职业技术学院、上海闵行职业技术学院、中科院软件所、北京师范大学及中小学的老师同学们和上汽集团等工作过公司的领导同事们给与的关爱和支持,以及家人们的期望和默默付出,希望有些文章能对大家有所启发。由于作者水平有限,撰写较为仓促,文章中难免存在一些缺点和错误,殷切希望来自世界各地的读者批评指正。期待能够和大家一起学习,迎接挑战,共同进步。