线性回归1:最小二乘法
本篇文章做一个简单的机器学习引入,并且介绍机器学习中最简单的方法——线性回归。
什么是机器学习?
机器学习从数据开始:
数据可以是对于人的观察(偏好、健康…)
数据也可以是对于世界的观察(图像、声音…)
通过机器学习,我们可以找到相似的对象、为对象做预测、从对象身上总结知识、为对象分组…
算法!算法!
机器学习可以被认为是一个拥有不断增长的数据集的算法。
但是算法很难被应用到实际,并且在应用过程中可能会进行调整,所以理解他们是必要的。
AI -> Neural Networks -> Modelling biological neurons & Predicting stuff from data
机器学习的实例可以是谷歌、微软或亚马逊等商业公司的推荐机制…
也可以是通过学习人类基因片段来诊断病症…
可以是信息检索:新闻检索、语言模型预测、图像和视频检索…
或者是人机交互:语音识别、姿势识别…
可以与生物信息相关:预测生物与基因反应、预测基因和蛋白质网络结构、通过序列预测蛋白质功能…
监督学习(Supervised Learning)
机器学习分为三大板块:监督 ...
Introduction to programming
Nature of programming languages
4.3.1 State the fundamental operations of a computer
计算机的基本操作(包括加,比较,加载和存储),涉及到了一些指令,但作者没有继续向下讲。
4.3.2 Distingguish between fundamental and compound operations of a computer
写了运用上述操作找最大值的一个算法示例。
4.3.3 Explain the essential features of a computer language
一门编程语言被描述为它的语义(semantics)的结合,语义指的是语言中可能的每一个结构的含义,而语法则与它的结构有关。语法(grammar)是一种元语言,用于定义语言的语法(syntax),语句构造的规则称为语法(syntax)。每种高级语言都有独特的语法和特定的关键字。
4.3.4 Explain the need for higher level languages
因为计算机只能处理0和1组成的机器语言,所以后续 ...
Connecting computational thinking and program design
4.2.1 Searching, sorting and other algorithms on arrays
Variable
变量用于存储值,每个变量有一个名称,用于引用存储的值。变量可以在程序执行期间更改。变量可以是字符串(strings)、实数(reals)、布尔型(boolean)和整型(integers)。
One dimensional arrays or linear arrays
数组可以保存相同类型的多个数据元素(整型、字符串、布尔型等)。数组有一个名称、一个在程序执行期间不能更改的大小(大多数情况下)和一个可以描述它的数据类型。一维数组是线性数组的一种。数组总是使用零号为开头。
Parallel arrays
定义不同的数组类型,记录某一件事情的不同方面(类似于结构体)。
Arrays of objects
对象数组是引用变量数组。每个引用变量都是数组的一个元素,是对对象的引用。
Two dimensional arrays
二维数组通过两个下标进行索引,第一个指向行,第二个指向列。
Comparision between the arrays above
一维数 ...
General Principles
Thinking procedurally
4.1.1 Procedure appropriate to solving a problem
我们通常需要指定有效的方法或流程来解决某一个特定问题,而解决问题的步骤顺序十分重要。
4.1.2 Order of activities and required outcome
活动进行的步骤十分重要。先分析问题再解决问题,先解决而不分析问题本身会导致人力和财力的损失。
4.1.3 The role of sub-procedures in solving a problem
解决复杂问题的有效方法之一就是将大问题转化成小问题,因为攻克小问题要比解决大问题更加简单。而拆分出的小问题可以进一步的划分为更小的问题,直到可以被单独解决。这样的策略被叫做自顶向下设计(top-down design)或者逐步细化(stepwise refinement)。
通过自顶向下设计可以将问题细化,而为某一个小问题编写的解决过程就叫做模块化编程(modular programming approach)。
4.1.4 Decision-making in a sp ...
NJU DC:基于NVBoard实现键盘输入
接入NVBoard
仿真第一步先为verilator接入NVBoard。NVBoard是一生一芯往届学生为学习数字电路实验开发的虚拟FPGA板。安装的具体步骤根据README里面的提示运行脚本文件并安装相关的依赖即可。
键盘输入的具体实现
在键盘输入中除了基本的clk,resetn,ps2_clk,ps2_data和数码管输出之外,还定义了五个类型的变量。首先建立一个reg类型的十位buffer变量,作为接受ps2_data的地方,再定义一个reg类型的四位count变量,来为ps2_data的bit计数。reg类型的三位ps2_clk_sync是用作记录PS2时钟信号的历史信息并检测时钟的下降沿。cnt是用作记录按键被按下的次数的变量。除此之外还定义了34个状态,一个输入状态和一个输出状态,默认值都是S0。
在流程一开始先通过一个死循环,将ps2_clk时钟上的采样送到最低为并丢弃最高位,形成一个三位的时间队列。因为最新的采样放入的是最低位0位,所以计算ps2_clk_sync[2] & ~ps2_clk_sync[1]。若为下降沿则sampling为1,上升沿为0。
接下来 ...
正则表达式速览
限定符
?: 表示某一个词元可以出现零次或一次,例:used?可以匹配use和used。
*:表示某一个词元可以出现零次或多次,例:ab*c可以匹配ac, abc, abbc...
**注:词元在这里是我生造的词汇,表示某一个具体的字母,符号或数字。**
+:表示某一个词元必须出现一次以上。
{...}(数字):括号内的数字表示某一个词元必须出现的特定次数。{2},为出现两次,{2,6},为出现2到6次,{2,}为出现2次以上。
{...}(字母):如果想对多个词元进行限定符操作,则用括号将其括起来。如{ab}。
^:匹配除了后续括号内以外的字符。
或运算符
例子:a (cat|dog)
匹配结果:a cat, a dog
字符类运算符
[...]:指定了能匹配的字符范围,如[abc]+表示所有abc,[a-zA-z]+代表所有的英文字符,[0-9]+代表所有的数字。
元字符
元字符是预先定义好的匹配规则。
\d+:代表所有数字内容。
\w+:代表所有英文字符内 ...
NJU ICS:PA(Programming Assignment) 1 思路总结
在此对PA1实验中的任务进行思路上的总结。
框架代码理解
nemu
├── configs # 预先提供的一些配置文件
├── include # 存放全局使用的头文件
│ ├── common.h # 公用的头文件
│ ├── config # 配置系统生成的头文件, 用于维护配置选项更新的时间戳
│ ├── cpu
│ │ ├── cpu.h
│ │ ├── decode.h # 译码相关
│ │ ├── difftest.h
│ │ └── ifetch.h # 取指相关
│ ├── debug.h # 一些方便调试用的宏
│ ├── device # 设备相关
│ ├── difftest-def.h
│ ├── generated
│ │ └── autoconf.h ...
计算机组成与设计2:指令-计算机的语言
2.2 计算机硬件的操作 & 2.3 计算机硬件的操作数
计算机操作数
双字:计算机中一种访问的基本单位,通常是64位一组;对应于RISC-V体系结构中寄存器的大小。每个双字代表8个字节。
字:计算机中另一种访问的基本单位,通常是32位一组。
RISC-V的算术指令的三个操作数必须从32个64位寄存器中选择。
硬件设计的三条基本原则:
简单源于规整
更少则更快:
更多则电信号传输的距离越远,花费时间越长。但设计原则并不绝对,31个寄存器也许并不比32个更快。
存储器操作数
RISC-V中的计算指令只能作用于寄存器,但计算机中一些庞大的数据结构只能存储与内存当中,因此RISC-V中包含将数据在内存和寄存器之间传输的指令,也就是数据传输指令。
数据传输指令:在内存和寄存器之间传送数据的命令。
指令访问内存数据需要提供地址。
地址:用于描述内存数组中特定数据元素位置的值。
用于将数据从内存中取出的指令通常被称作载入指令(load),在RISC-V中该指令为ld,表示取双字。
ld指令中存放基址的寄存器被称为基址寄存器,而数据传输指令中的常数被称为偏移量。
计算机中有一些使用最左边 ...
Get deeper in SRAM
Theory
RAM(Random Access Memory)具有如下两个特点:
易变,断电时易失数据。
读写行为快,速度与数据存储位置无关。
RAM又有如下两个分类:
DRAM (Dynamic Random Access Memory)
SRAM (Static Random Access Memory)
DRAM由一个电容器(capacitor)和一个晶体管(transistor)构成。因为电容器的缺陷,DRAM经常需要被刷新,因此DRAM要远比SRAM慢。
因此SRAM经常被用作缓存(cache),而DRAM因为相对便宜且密度大主要作为处理器内存。
一个SRAM中有六个晶体管,可以存储一个bit的数据,每个bit存储在四个晶体管上,因此有两个重合部分。
SRAM小结:
最快的存储器
由6个晶体管构成
不需要被刷新
密度更低,平方面积存储能力更差,因为一个单元上的电路更多
文章主要讨论异步(asynchronous) SRAM。
Hands On
Cmod A7 开发板集成了SRAM,其特点如下:
512KB
19个地址信号
8个双向数据信号
3个控制信号
三个 ...
计算机组成与设计1:计算机抽象及相关技术
1.2 计算机体系结构中的8个伟大思想
1. 面向摩尔定律的设计
摩尔定律:单芯片上所集成的晶体管资源每18至24个月翻一番。因此计算机架构师设计芯片时要预测项目完成时的工艺水平。
2. 使用抽象简化设计
隐藏底层细节以提供给高层一个更简单的模型。
3. 加速经常性事件
经常性事件比罕见情形更简单,性能更容易提升。
4. 通过并行提高性能
并行计算。
5. 通过流水线提高性能
并行性的一种特殊场景。
6. 通过预测提高性能
前提:从预测错误中恢复的代价并不高且预测相对准确。
7. 存储层次
速度最快、容量最小、价格最贵的存储器处于顶层。速度、容量、价格向下递减。以此节约成本的同时提高性能。
8. 通过冗余提高可靠性
冗余部件在系统发生故障时替代失效组件并检测故障。
1.3 程序表象之下
系统软件
从复杂的应用程序到简单原始的指令需要若干软件层次来将高层次操作解释或翻译成简单的计算机指令。外层是应用软件,中心是硬件,系统软件(systems softwar)位于两者之间。系统软件中的操作系统和编译器对现代计算机来说是必须的。
1. 操作系统:
是用户程序和硬件之间的接口,为用户提供服务和 ...