计组 | 半导体存储体系
存储器是计算机的一个组成部件。它的进化反应了平衡的思想。
有一个很直觉的问题是:为什么不直接采用一样的材料进行存储器的设计呢?毕竟,分出 Cache、内存、外存这些,好复杂!为什么不能简单点?
因为存储器需要达到平衡,没有一个在各个方面都非常能打的存储器。总的来说,在存储器方面有 3 个评判标准:
价格;
速度;
容量。
在市场经济中,价格是最终的判则,否则没人购买商品。因此,在价格的限制下,如果存储器的速度很快,容量就不会做的特别大。反之亦然。
在计算机的不同存储层次中,确实对不同层次的存储器有不同的要求。比如说,需要一些存储器像仓库一样,存储大容量的数据。也需要一些存储器需要像信使一样,快速地把数据传递给 CPU。
总而言之,我们的目标就是:让不同能力、各有优缺点的存储器结合在一起,使他们在价格、速度、容量上都发挥出最好的效果。
从快速到慢速,从靠近 CPU 到远离 CPU,有这样一些存储器:
CPU 内部的寄存器;
Cache;
内存;
外存。
这里主要讨论半导体存储器,可以大概分为两类:随机存储器(RAM) 和只读存储器(ROM)。还有一类是磁存储器,不太讨论。
RAM ...
配置 Python 环境复现 Github 项目
一篇论文公开了自己的代码和数据集。怎么在本地复现呢?
前期准备首先要获得代码的环境,如果提供了环境,那就比较简单了。比如,我现在就有如下的环境要求:
123456789101112131415161718networkx==3.1numba==0.58.1numpy==1.24.4pandas==2.0.3pillow==10.4.0prompt_toolkit==3.0.43tokenizers==0.20.3torch==1.10.0+cu113torch-cluster==1.6.0torch_geometric==2.2.0torch-scatter==2.0.9torch-sparse==0.6.12torch-spline-conv==1.2.1torchaudio==0.10.0+cu113torchvision==0.11.1+cu113tqdm==4.67.1traitlets==5.14.3transformers==4.46.3
12cuda 11.5python 3.8.20
前者是 requirements.txt 的内容,下面是对 CUDA 和 Pyth ...
CS50AI - 第 6 章 - 语言
转眼到了 CS50 AI 的最后一节课。
这节课讲的是当下热门中的热门——自然语言处理。
语言之前我们都是把问题和算法转换为某一种机器语言让机器来执行,这一次我们要让机器理解人类的语言。
语法和语义(Syntax and Semantics)涉及到自然语言,就不得不涉及一些语言学的知识——语法和语义。
语法是一门语言要遵循的基本原则。其实一些机器语言也是一样。比如,Python 在语法错误的时候会抛出 SyntaxError。
语义则表示这段话要表示的内容。符合语法的语句不一定有语义,比如说这句话:
Colorless green ideas sleep furiously.
不同的语法结构组成的句子可能会表示同一个意思。
上下文无关语法(Context-Free Grammar)正式语法(Formal Grammar)是一种对于某个语言来说,生成句子的规则。
我们可以用 parser 对每个单词进行分析,从而形成一个语法树。
语言,语言。自然语言和机器语言都是一种语言。所以我们在编译原理课程学习到的知识,也可以搬到自然语言中。
当然,有的时候,可能一句话有许多种语法树的可能。这时 ...
CS50AI - 第 5 章 - 神经网络
神经网络属于当下极其热门的话题,AAAI, NeurIPS 等等期刊成为了许多本科生接触科研,发表文章的首选。与神经网络相关的名词术语也往往出现在学术中,当然也出现在群聊中。
因此这节就讲一讲什么叫神经网络。
仿生学神经网络的产生,要从人类讲起。人工智能的这一学派是链接主义,也就是通过模仿人类大脑中神经元的连接来让机器形成智能。
剩下的两大流派我们也早有接触。
一个流派是符号主义,他们主张用数理逻辑(如果…就…)来求解问题。主要在 Knowledge 这一章进行了展开。是啊,这一章中我们定义了多少符号呢!
另一个流派是行为主义,他们主张让 agent 通过与环境交互,获得奖励惩罚,从而形成更好的决策。主要在上一章 Learning 中进行了小小的展开。上一章作业中的 Nim 是一个典型的行为主义的例子。
不过,不管是什么主义,似乎,共同的理念就是让机器来解决问题,而不是人类给出一一个显式的算法。比如,计算机视觉(Computer Vision,简称 CV)中的手写数字识别,很难用一个,如果这几个像素为黑,那么就是数字几,的算法来解决问题。所以人类的处理方法是,给机器一个数据集,对输入稍 ...
鲁迅公园半日游
放假的时候读完了迟子建的散文集《也是冬天,也是春天》。我最喜欢的就是标题的这篇散文。
接触到迟子建是在高二或者高三,做语文模拟题的时候,做到了取材于这篇散文的现代文阅读,是 2018 年 4 月的海淀一模,给我看乐了。作者的语言,像是在心平气和地描述一些很怪诞的事情。用现在的话说,可能有些死人感:
我先去拜谒原虹口公园的鲁迅先生墓,这座墓从当年的万国公墓迁葬于此,已经一个甲子了。天气晴好,又逢周末,园里晨练的人极多。入园处有个水果摊,苹果橘子草莓等钩织的芳香流苏,连缀着世界文豪广场。红男绿女穿梭其间,不为膜拜文豪,而是踏着热烈的节拍,跳整齐划一的舞。他们运动许久了吧,身上热了,大多将外套脱掉,只穿绒衣。广场边一棵粗大的悬铃木,此刻成了衣架,被拦腰系了一圈白带子,穿着吊钩,紫白红黄的外套挂在其上。我努力避让舞者,走进广场。文豪们的铜雕均是全身像,或坐或站。可怜的托尔斯泰,他右手所持的手杖,挂着一个健身者的挎包,一副苍凉出走的模样,可惜我不吸烟,不然会在他左手托着的烟斗上,献一缕烟丝,安抚一下他。与他一样不幸的,是手握鹅毛笔的莎士比亚和狄更斯,鹅毛笔成了天然挂钩,挂着色彩艳丽的超轻羽绒衣 ...
CS50AI - 第 4 章 - 学习
学习是当下 AI 领域非常热门的话题。机器学习已经渗透到科学研究的各个领域。
很简单地,基于图像识别来判断是不是有坏果;或者,在加密了的网络中,基于机器学习来识别流量中的恶意流量。
所以有必要学习一下机器是如何来学习的。
机器学习有一些取巧的成分。感觉,有点像大人教小孩子如何学习知识一样。因为我们不知道如何来编写一套行之有效的算法,所以寄希望于给定一些提示,让机器自己根据提示选择更好的路径,从而完成一项任务。
监督学习(Supervised Learning)监督学习,顾名思义,是需要人来监督的。
人,做了什么呢?
标注数据集。
监督学习的底层思路就是寻找一个近似函数。这个函数对于给定的输入,输出一个估计的结果。我们的目标就是提供大量的输入,根据输入,调整各个参数,得到近似函数。最后,针对新的输入,检验这个函数能不能输出预期结果。
找这个函数,目的是什么?目的是解决两种问题:
分类问题;
回归问题。
二者的区别在于,分类问题的值域是离散的,好果子/坏果子;下雨、不下雨;回归问题是连续的,如收入等指标。
分类问题对于分类问题,解决思路有两种:
邻居;
感知机(Perc ...
自动部署 HTTPS 证书
需求之前使用腾讯云的证书,只有 90 天的有效期,每次到期了就要手动部署,下载 .crt 和 .pri 文件(或者是 .key ,吧,记不清了),然后手动移动到对应的文件夹。一个域名就要花好几分钟,效率很低。
因此问了问 AI,有什么更好的方案。最终决定采用 Let’s Encrypt 和 Certbot 结合的自动化方案。
哪个证书这里需要澄清一个问题。Cloudflare 有一个 Edge Certficate 的方案,可以自动化地续期证书,这个证书是浏览器访问域名时用到的证书。
然而在 Cloudflare 的服务器和源服务器之间,仍然需要自动化处理证书。本文要解决的是后者。
1用户 -- Edge Certificate --> CF 代理服务器 -- 本文要解决的证书 --> 源服务器
环境配置安装 snapd12sudo apt updatesudo apt install snapd -y
安装 Certbot123sudo snap install core # 确保 snap 运行环境是最新的sudo snap refresh coresudo sn ...
计组 | 浮点数的运算
说在前面浮点数的运算步骤比较多,而且种类也比较多。
运算数的不同会影响运算进行多少步;而运算数的表示方式(原码、补码、移码)会影响具体问题的分析。
浮点数的加减法加减法大概需要这样几步:
对阶。小阶向大阶对齐,否则大阶的高位被舍去,误差太大;
尾数的相加;
规格化;
左规
右规
舍入处理;
截断;
末尾恒置 1;
0 舍 1 入。
看看流程图吧:
所以如果理解了这一个过程,就会明白,为什么浮点数中,一个很大的数加很小的数会损失精度了。
浮点数的乘除法浮点数的乘除法,要经历如下的阶段。不用文字了,直接展示流程图:
这里常考的一类题目是到底需要规格化几次,需要明白原码或补码表示时,数值的范围。
有时候是 0 次,不过最多是一次。
说明的是,在加减法和乘除法的过程中,如果使用更大的扩展位,可以提高精度。例如,Intel 在实现浮点数运算的时候,采用 80 位扩展,等保存结果的时候,再截断到 float 或者 double 的长度。
春天又来了
又到了一年春天,日子渐暖,人也更加懒散。
这学期开学之后,一直找不到状态,总感觉还在放假中。。不知道怎样才能有点干劲呢?说实话,挺感谢那位的,也挺感谢那位的,虽然因她们产生的情感也让我备受煎熬,但至少让我在繁忙又繁忙的大一下和大二上有了奔头。不过这种 buff 的效果只能维持一学期。时间再长,就会发现,这种情感是单向的。
我承认我是恋爱脑,所以为了不让别人借助这一点伤害自己,我就只能尽量做到理智。爱这种东西,多半是荷尔蒙在作祟。看到有人做出这样的评论,当鸟类求偶的时候,会做出奇怪的动作。比如珠颈斑鸠在求偶的时候,发出“固固”“固固”的声音,在发出第一个音节的时候低下头,在第二个音节结束时抬起头,如此反复。
我也是一样,不过那是初中的时候了。对于喜欢的女生,莫名其妙跟对方搭话,喜欢在对方面前转,即使,也很遗憾,对方和我不在一个班。如果在一个班,我不知道我会选择放弃,还是选择勇敢地 A 上去。距离产生了滤镜。
说到滤镜,我想到,如果和对方的关系不同,看到的对方也不一样。什么是关系?一切皆集合。关系是存放有序对的集合。比如说,我大一的一个室友,在群里可是出尽了风头。不论是奋战到深夜,还是请求 ...
CS50AI - 第 3 章 - 优化
序这节讲优化问题,怎样找到最优解。
大概分成三种问题:爬山问题、线性规划问题,以及约束问题。
爬山问题爬山问题比较经典,解决的问题是:如何在一群状态中找到最值。
什么叫状态呢?状态就是一种方案。比如说,在哪里建医院可以让附近的居民区到达各自最近医院的路径开销最小;再比如,外卖平台怎样安排送餐顺序才能让所用路径最短等等。
有的时候,追求最大值,这种函数叫 Optimal Function,有时候追求最小值,这种函数叫 Cost Function。总而言之就是寻找最值。
解决这种问题最经典的思路是(以找最大值为例),从一个点开始,环顾四周(邻居),有更高的,则向上前进,否则就到了一个极值点。
注意我说的,这里到了一个极值点,而不是最值点。找到的只是一个相对优的解,但并不是最好的,总结来讲,有如下的问题:
找到的是极值点,是局部最值,而不是全局;
遇到大片相等的值时,会卡住,无路可走(因为是严格大于);
贪心,有时候走些弯路会爬的更高。
修改后的爬山算法要对算法进行优化,有许多思路。有一些地方可以做文章:
Steepest-ascent 选爬升最多的邻居(其实就是刚刚的思路);
Sto ...