Month: April 2024

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

    机器学习/深度学习(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 一、通用的基本问题 二、回归和分类的基本问题 三、Cost Function(objective fuction,loss,error surface) 四、Quality metric 五、Neural Network

  • 人机交互与人人交互简介

    交互(interaction,dialog)是两个系统之间信息交流的方式,人机交互(human computer interaction)指的是人和计算机之间信息交流沟通的过程和方式,人和计算机都有信息接收,信息加工处理和信息发送的能力,不过两个系统的工作原理不同(经典计算机是人类发明,其工作原理是比较清晰的,但人类的智能加工还有很多神秘待挖掘)。人人交互(human human interaction)指的是人们之间的交互方式,如日常的口语对话(natural dialog),书信,肢体语言等。由于其过程自然流畅,一般也称为自然交互。随着计算机软硬件技术的不断进步,人机交互也越来越向着更加自然高效的交互方式去发展。当然人人交互的复杂和高效特性是那么的独特,比如在一个会议或一群人的交流互动过程中,群体的交互过程的建模和分析就比较复杂(如社交网络也可以理解为一种非即时的群体人人交互,其通过信息技术得以实现物理距离不受限的群体人人交互)。而现阶段一般的人机交互主要还是研究的一对一的人和机器之间的高效交互。人机交互基本上是没有太大二义性的,而人人交互二义性就比较多,人的认知目标也不尽相同,甚至相互的理解程度也是在一定范围和程度内(人人交互也可以说是一种信息的模糊交互过程)。 自计算机发明以来,从早期的纸带输入数据和计算指令,到键盘鼠标以及麦克风等等,新的外围设备的发明不断促进了人和机器之间信息交互的便捷性。人机交互也早已经是计算机应用里边的一个大的研究方向。其研究范畴也挺大,有硬件的外围设备,如鼠标,键盘,智能笔等的发明,促进了计算机使用的便捷性并大大普及了计算机在更广的人群里的使用。计算机可视化技术的发展,使得计算机从早期的DOS系统(Command Line Interface, CLI)过渡到(Graphical User Interface,GUI),通过鼠标和窗口进行交互更加快捷高效,这些交互技术的进步不断促进着计算机的进一步普及。随着人工智能技术的引进,交互也会引入模糊性,如智能技术的结果的精确性就会带来机器理解的模糊性。这类技术通常也称为Intelligent User Interface(IUI,智能用户界面)。 新的智能时代,智能设备的多样性也给交互带来了更多的应用场景和想象的空间,智能眼镜,智能投影仪摄像头等等,一方面提供了更加便捷普适场景的交互,另一方面也延申了人类的感知和认知和想象的能力。如基于虚拟现实技术的交互可视化,可以通过手势等方便和系统进行交互,并及时反馈交互的结果,如可视化技术随着交互手势的输入来动态响应其用户的交互意图,从而展示想要看到的不同视角,不同尺度比例的可视化内容。智能机器人的出现(如具身机器人),人和机器的交互可以逐渐模拟人和人之间的交互过程,如自然的对话,肢体表达等等。随着更多的技术进步,如脑机接口,多模态大模型等技术的发展,人机交互的应用范围和场景也会进一步扩大,nothing is impossible, nothing is beyond imagination。

  • UE学习笔记1-安装及基本使用

    UE是虚拟现实相关技术的很有影响力的引擎,这里将边学习边做一下记录备忘,以备后续查阅复习。 1、UE的下载安装,下载链接请参考引文1,下载安装文件后,执行epic games launcher启动程序,注册一个账号后就可以进入启动epic games的程序进入主窗口界面了。登录后,移动至“虚幻引擎”选项卡,并点击“安装”按钮,下载最新版本。下面将介绍一下UE使用的基础内容,主要是窗口中的一些重要的子窗口元素介绍。 2、关卡编辑器界面:首先新建一个项目,选择第三人称模板(Third Person Template),项目设置选择蓝图,质量预设选择最大,以及填写项目名称后会进入关卡编辑器界面。 3、放置actor面板:在下图的红色区域点击弹出drop list对话框并选择“放置Actor面板”菜单项,会在程序窗口的左边弹出放置Actor面板,然后在弹出的面板中选择形状,拖入一个“立方体”放入视口中,并通过配置来设置立方体的大小。如下图所示。 4、内容浏览器子窗口面板:用来管理各类资源,如果在创建项目时勾选了初学者内容包,那么在内容浏览器中可以看到“StarterContent”在我们的项目文件中被创建。如下图所示。 5、大纲子窗口面板:放入到视口中的元素,都会一一列到大纲中,如下图中的右边所示。 6、细节子窗口面板:当选中任一物体后,其相关细节设置就会展示在细节面板中。我们可以在细节面板中对选中的物体设置坐标、材质、碰撞等属性。 上述对UE的各个关键子窗口做了介绍,下面以具体的一个简单的设计实操示例来进行性说明。 在内容浏览器子窗口面板的的“Content”(“内容”)目录下,右击鼠标,在弹出的对话框中选择“创建文件夹”,将创建的文件夹命名为“Level”,双击“Level”,然后在内容浏览器空白处右键,选择“新建关卡”。并进行重命名为“Level_Demo”,双击“Level_Demo” ,此时在视口中一片漆黑,什么都看不到。我们需要在关卡内放入Actor来构建世界,我们可以在菜单栏 – 窗口中找到环境光照混合器,点击里面的5个按钮,可以将其快速添加到场景中。 References

  • 量子计算简要介绍

    量子计算是当前前言的科技创新研发领域,相关的计算概念和理论和传统的计算机差异较大,理解起来也挺有难度。今天有机会了解了一下量子计算的最基础的基础部分,加以记录,后面有机会学习更深入的部分的时候也可以回过头来看一些基础的内容,也是作为知识储备能更快的学习后面的内容。技术发展日新月异,终身学习既是时代的需求,也是自我不断成长和进步的要求。 一、布洛赫球 (Bloch sphere)。和经典计算机的比特位不同,量子计算机的信息表示方式为量子位(quantum bit,qubit),其是0和1的叠加态(具体的表示方式可以参考引文),用公式来理解为其是0和1两个状态的线性组合,需要注意的是,这里的线性因子是复数(两个复数因子有归一化约束,即其模的平方和为1)。 经过欧拉方程和global phase等公式和概念的引入和推导,最后得出如下的公式 用布洛赫球 (Bloch sphere)表示为如下的示意结果。 二、单量子比特上的量子操作,量子操作 (Quantum operations)将量子系统的状态转换成一个新的状态,我们通常也称它们为量子门 (Qubit gates),可以用泡利矩阵的形式来表达,双量子态和多量子态的内容后面有机会再详细介绍,具体也可以参考引文1中的相关内容。上面的两点内容只从数学上进行了阐述,其实际的计算和量子力学等关键的物理背景知识是息息相关的,这方面希望后续有机会要多多了解一下。量子比特的叠加态(Superposition State)是量子计算中一个重要的概念,它允许量子比特同时处于多个状态的线性组合。这使得量子计算在某些情况下能够处理并行计算,与经典计算有着显著的区别。(和传统计算机基于经典比特和晶体管数字逻辑电路属于不同的计算范式) 三、量子计算机的物理实现也有多种,有基于超导量子的实现,也有基于光电子的量子计算机的实现,具体实现方式根据技术差异可能比较大。 四、量子算法有对应的软件模拟,如Qiskit是基于python的面向量子计算的开源软件开发框架,由IBM量子计算团队开发和维护,可以构建、 模拟、执行量子电路。 五、量子力学和信息科技的融合发展出现了量子计算,量子通信和量子精密测量等先进技术,也是当前发展的前沿技术,后面由机会也可以多了解一下。 今天是交通大学128周年校庆,我和交大有挺深的渊源,在这里祝贺交大128岁生日快乐,祝愿交大在未来的科教兴国的征程上硕果累累,创造更大的辉煌! References

  • 回溯算法示例数独问题求解

    回溯(backtracking)是遍历整个求解空间的一种常见的方式,一些有名的小游戏如数独的解法,八皇后游戏等都可以通过回溯的方法去求解。回溯的思想基本是通过递归进行的实现。这里以一个数独的场景为例向大家介绍一下实现的思路。 首先对数独的尚未填上数字的格子依次从左到右,从上到下的顺序进行填数字尝试,每填写当前的格子,可以按照条件首先筛选出可能的数字,并尝试将这些数字依次进行尝试填到格子里,当可以填写一个候选时,就跳到下一个还未填写数字的格子。如果后来发现下一个未填写的格子没有解(填写数字不能满足数独条件),则尝试下一个候选,如果所有候选都尝试后整个过程还是无解,则返回上一个格子的下一个候选再进行类似的尝试过程。 回溯过程也可以将看成时一个树的搜索过程,比如在数独场景,第一层节点可以看成是第一个格子的所有候选数字节点,回溯的过程是一个动态扩展这棵树的深度优先遍历的过程。如下示例代码显示了其过程,通过递归进行的实现,如果当前填写满足条件则继续下一个格子的填写,如果不满足则当前格子不填(撤回填写的数字)并考虑下一个候选,如果所有的候选都不满足,则退回到上一层搜索的状态继续搜索树的动态构建。 完整示例代码可以参考如下链接。data-structures-algorithms/backtracking at main · kindlytree/data-structures-algorithms (github.com)

  • 追思是为了更好的出发

    今天清明节,一年一度追思故人的节日,在这个仲春的时节,春暖花开,前天回家的路上买了两束菊花,怀念故人,是为了更好的出发。 在这个特殊的节日,尤感生命的珍贵,爱的伟大。一代代先辈用辛勤汗水和关爱哺育着后人,无数的与我们非亲非故的英雄烈士牺牲了青春和大好年华来换取后人们和平和自由的生活,我们应该设置这样的节日,有一个仪式,隆重或简单,去缅怀追思,去更好的出发,做更好的自己。 追思的作用有三,1为告慰我们的先人和英雄,尽管我们的生活有这样那样的一些困难需要进一步去解决,但我们已经处在一个和平和较为温暖的环境中,感谢他们的牺牲关爱和付出,才有来之不易的今天,2为记住他们往昔的点滴付出和伟大的爱,爱的力量是无限的,他们的爱是我们一步步坚持下来走到今天的强大动力,值得我们去铭记和怀念;3是为了更好的出发,在追思的过程中,我们也要去学习他们,去更好的爱人去做更好的自己,带给身边人更多的力量和信心。 刚看到有两句话很有感触,借用一下:“繁花落在春半的清明,细雨点缀这寸光阴,珍惜你的挚爱,珍惜这世界的美好”。是的感谢我爱的人以及爱我的人,爱的温暖曾让我们走出困难和泥泞,让我们带着爱的温暖再次出发,走向更好的未来,行而不辍,未来可期!

  • 深度学习框架中自动微分的实现

    自动微分的实现为深度学习的框架的梯度回传的计算提供了很大的便捷,我们只需定义好算子(operator),搭建好整个深度神经网络的网络结构后,就可以通过拓扑序构建好(具体拓扑排序方法可以参考引文中的深度优先搜索方法DFS)计算图,然后就可以根据偏微分的链式法则,就可以依次反向计算节点的数值结果,参数梯度等数值了。 在不同的深度学习的框架中,神经网络反向传播的算法实现会存在着一些差异,以早期的比较有影响力的caffe举例说明,caffe的实现中没有算子,而是blob(tensor)和layer,Net三种粒度的结构,各种不同的计算方法的layer(类似于各种不同的operator,如加减乘除)中计算前向和反向的结果,layer的输入为bottom blob,输出为top blob(也有可能存在着inplace的操作)其计算流图的关系是通过Net类中的相关函数进行静态计算的(Init函数)。 深度学习框架经过技术的发展,早期的caffe已经淡出了研发者的视线,不过在当时(还没有出现tensorflow,caffe2,以及pytorch)是相当有影响力的,其中的设计思想也是比较优秀的,有兴趣的读者可以阅读某些layer的forward,backward函数(基于cpu和gpu(cublas库)的矩阵计算)的实现都可以具体阅读源码加以具体深入的理解。不过由于其python的接口支持不是特别丰富,一些特殊的层的自定义实现和框架的重编译门槛比较高,相比pytorch要繁琐很多。 现在基于pytorch的深度学习框架由于其简洁易用而广受欢迎,其网络的定义也更加自由灵活(代码定义网络结构也很方便),基于pytorch的深度学习应用框架也有很多,纷繁多样,比如openmmlab等等。 Reference

  • WordPress本地备份重部署方法

    WordPress作为最有名的开源博客系统之一,由于其便捷的部署方式和丰富的样式和插件,使得其在个人博客,中小型内容管理系统(CMS,content management system)中广受欢迎。这篇博客将记录部署和维护wordpress的一些细节方法和技巧,后续有更多的会继续在文章后面进行补充。 1、部署,docker技术可以使得部署wordpress系统非常便捷,wordpress基本依赖两个docker镜像,mysql和wordpress。部署方式可以通过下面的两个脚本命令启动相关容器进行。在公有云如阿里华为上部署时一般还要配置nginx的conf,购买SSL证书并进行签名部署等操作,一般公有云上也会有相关文档说明,这里不做特别说明。 2、备份,这里用比较笨拙的全量备份到本地并进行本地部署的方式进行介绍。环境为windows10/11和WSL的ubuntu18.04。1、首先通过scp将在服务器上的mysql目录和wordpress的目录全量拷贝到本地。2、拉取两个docker镜像,wordpress和mysql:5.7。3、启动对应的两个docker容器,启动方式为上述的启动脚本示例。 3、进入mysql容器内部(docker exec -it containerid bash),登录到sql服务器(mysql -uroot -ppassword),选择数据库(use databasename),通过sql指令更新本地定义的域名。 4、配置SSL和本地域名解析。具体方法为:1、在WSL的ubuntu环境中生成本地ssl证书,2、检查WSL中的ip;3、在windows原生系统中添加一行本地域名解析(C:\Windows\System32\drivers\etc目录下的hosts文件),格式为:wsl ip:new_domain。其中前两点的CLI(command line interface)命令如下: 5、在WSL中安装配置nginx,conf的配置方法和云平台中的配置方法类似,阿里云华为云上也有相关的配置说明,这里不做赘述。配置好后,通过命令nginx -s reload更新配置属性。然后就可以在windows系统的浏览器的状态栏中输入https://new_domain就可以访问备份的博客系统了。 References

  • Windows系统上安装配置docker环境

    Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。 docker的应用场景挺多,比如一般的AI云平台都是基于docker镜像提供的系统环境,一般的软件开发也会基于docker软件编译和运行环境(如apollo系统的编译运行环境就是基于docker的)。 docker是对于开发者非常友好的工具,从个人经验来看,在docker环境下做开发和部署有如下的好处和便捷:1、docker镜像的开发环境和机器原生系统隔离,机器本身的软件环境不受影响;2、不同的开发环境比如依赖库等可以构建不同的docker镜像来进行隔离(有点类似于anaconda的虚拟环境);3、镜像一次构建后很容易分发共享,如通过docker hub进行push和pull就可以推送本地镜像和远程拉取所需的镜像。这样的镜像机制也同时方便团队合作以及系统生产环境的部署。 在linux系统如ubuntu或其他发行版本上使用docker相对比较容易,而我们平时用windows机器的场景也挺多,本文将记录在windows平台上构建docker开发环境的方法。 1、首先在windows10/11上安装WSL(windows subsystem for linux)环境,由底层虚拟机平台所支持,因此需要开启相关服务。方法为:在桌面底部的搜索栏输入“控制面板”后选择程序-》启用或关闭windows功能后勾选两项:1、适用于Linux的Windows子系统;2、虚拟机平台;3、开启虚拟机服务平台,执行此命令行后继续进行相关的操作。dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart和wsl –set-default-version 2。中间可能需要重启系统以更新相关服务。 2、在桌面底部状态栏中输入“store”选择Windows Store中搜索ubuntu 18.04。然后选择下载,下载完成后即可运行。 3、下载docker desktop for windows程序并安装后既可以通过启动图标来启动docker engine。然后就可以在windows上的Ubuntu系统里使用docker命令了。 Reference