2025年9月20日
# 知识
# 几何光学

# 参考资料
- 费恩曼物理学讲义第一卷|几何光学 P269
# 机器学习
# 线性模型
一般向量形式
线性回归
对于离散属性,若属性值间存在"序"(order)关系,可以转化为连续值,如"高度"的“高” “中” “低” 可以转化为
线性回归的目标
基于均方误差最小化来进行模型求解的方法称为“最小二乘法”(least square method)
求解
具体内容参考西瓜书P54页起的内容
对于
- 当
为满秩矩阵(full-rank matrix)或正定矩阵(positive definite matrix)时,可得
但现实任务中,其往往不是满秩矩阵,例如我们会遇到大量得变量,数目超过甚至超过样例数,导致其列数多于行数,显然不满秩。此时可以有多个解,选择哪个就取决于学习算法得归纳偏好.
广义线性模型(generalized linear model)
其中函数
其参数估计常通过加权最小二乘法或极大似然法进行
对数几率回归
对于二分类任务,最理想的从输出转换成预测值的函数是“单位阶跃函数”(unit-step function)
但是其不连续,不能直接用作连续函数,我们希望找到一个“替代函数”(surrogate function),对数几率函数(logistic function)正好符合:
若将
称为“几率”(odds),反映了
如何确定
# 线性判别分析
(Linear Discriminant Analysis, LDA)
思想:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能近,异类样例的投影点尽可能远.
一种方法:使得同类样例投影点的协方差尽可能小,而类中心的距离尽可能大。
定义“类内散度矩阵”(within-class scatter matrix)
- 定义“类间散度矩阵”(between-class scatter matrix)
最大化目标即:
这又被称为
极大似然估计
通俗理解:利用已知的样本结果信息,反推最具有可能导致这些样本结果出现的模型参数值
例子:已知采样结果,使其概率最大,得出参数 | 盒子里有白球和黑球,摸出放回100次,70次白球,30次黑球。设摸到白球的概率为p,我们有概率:
通过求导使其概率最大,就得到了极大似然估计的参数值.
前提假设:所有采样满足独立同分布
# 参考资料
知乎|一文搞懂极大似然估计 (opens new window)
# 计算机视觉 (Image formation)
# 成像原理
相机的原理:
如果直接在物体前放置一个底片,无法得到一个好的图像。因为实物与像平面上的点并非一一对应:
物理学上可以通过小孔成像(Pinhole camera)的方法,尽可能让一一对应关系成立。但同时,如果孔太小会产生光的衍射现象,以及通光量不足,
想要解决成像问题,我们最好使用一个镜头(Lens)来将从一点发出的光线汇聚到一点上去.
通过几何光学的计算方法我们能够得到成像公式
图像放大率(Image Magnification)
当物体里透镜足够远时(
视场角(Field of View(FOV))

从上图可以看出,视场角取决于两个因素,焦距(foval length)和底片(sensor)的大小
从成像质量来看,底片越大(每个像素接收到的光更多,信噪比更好),现在的工业目标就是在缩小底片的同时维持好的信噪比.
光圈(aperture)
用于控制进光量的组件,在镜头中由数个光圈叶片组成来控制孔径大小。
- 光圈越大
开孔越大 进光量越大 照片越亮 - 光圈越小
开孔越小 进光量越小 照片越暗

摄影中通常用
其中,$f =
镜头散焦(Lens Defocus) 

当焦距和像距固定时,只有一个面能成清楚的像,寻找这个平面的过程称为对焦
(弥散圆)Blur circle diameter:
景深(Depth of Field(DoF))
对焦完成后,对焦点的前后范围中,影像清晰的深度有多少,我们就称之为景深。

- 光圈越大(
越小)值 画面清晰范围越窄 景深越浅 - 光圈越小(
越大)值 画面清晰范围越广 景深越深

景深的原理:当弥散圆落在一个像素内时,图像的表现就是清晰的。数学推导可得:
# 几何成像(Geometric image formation)
使用相机模型来描述3D世界和2D图像之间的几何关系。
Perspective Projection
- 使用Pin-hole camera model描述的投影称为透视投影
引入齐次坐标(Homogeneous coordinates)
消失点(Vanishing points)

- 任意两条平行线拥有同一个消失点
- 消失点指示了线的方向
- 消失点可能在图像框架外或无限远处
消失线(Vanishing lines)
- 所有消失点的几何就是消失线

透视形变(Perspective distortion)
- 越外面(exterior)的的列越大
- 这种形变并不是因为镜头的缺陷(flaws)
径向畸变(Radial distortion)

- 由不完美的镜头引起
- 在光学穿过镜头的边缘时更明显
- 两种类型:Pin cushion and Barrel
正交投影(Orthographic projection)

# 光度成像(Photometric image formation)
- 描述3D世界的物理属性与2D图像色彩的关系
快门速度(Shutter speed)
- 控制曝光事件
- 像素的值等于光强在曝光时间内的积分
滚动快门效果(Rolling shutter effect)
色彩空间(Color spaces)
- RGB
- HSV
人眼对红色最不敏感,对蓝色最敏感,因此RGB颜色空间均匀性较差。
在图像处理中使用HSV颜色空间,比RGB更接近人们对彩色的感知。
- Hue(色调,色相)表示色彩信息
- Saturation(饱和度、色彩纯净度)饱和度越高,颜色越深。饱和度0代表纯白色
- Value(明度)颜色的敏感程度,明度为0表示纯黑色

拜尔滤镜Bayre filter

对于彩色图像,可以通过滤镜来采集基本颜色.拜尔滤镜在一块滤镜上设置不同颜色,由于人眼对绿色比较敏感,因此绿色较多。
# 参考资料
- Iridescent的cs笔记本|Image Formation (opens new window)
- 摄影基础入门:5分钟读懂光圈是什么?光圈大小和景深的关系! (opens new window)
- 深入了解齐次坐标|GAMES101 Lec3 (opens new window)
# 什么是Docker?
定义:
Docker是一个让开发者能够创建,部署,运行,更新和管理容器的开源平台。它有商业版本,也有开源的版本。
人们谈论Docker的时候,通常指的是Docker Engine(用于构建和运行容器的运行时)。
作用:
- Docker可以让容器化变得更快、更简单
# 参考资料
# 架构
# 微服务
领域: 软件系统
需求来源:
早期的软件系统大多是 单体应用(Monolithic Application)
- 所有功能都打包在一个大程序中,部署和更新很不灵活(微小改动也需要重新打包整个系统)
- 维护困难:不同团队修改同一代码库,容易冲突。
- 扩展性差:只想给其中一个功能添加更多资源,则需要给整个应用添加机器
定义:
微服务(Microservices) 是一种软件架构风格,把原本“大一统”的应用,拆分成小组的、独立运行的服务:
- 每个服务完成特定的业务功能
- 服务之间通过 轻量级通信机制 (HTTP/REST、gRPC、消息队列)交互。
- 每个服务可以独立开发、部署、扩展
特点:
- 独立部署,服务间互不影响,且可以使用不同语言开发
- 容错性强:某个服务挂了,不会影响整个系统。
- 方便扩展:高并发模块可以单独扩容.
# 技术
# 虚拟机(Virtual Machine)
# 什么是虚拟机?
通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
对于宿主系统而言,虚拟机只不过是跑起来的一段应用程序,它需要拦截虚拟系统的一些操作转成宿主系统能够接受的操作。
现代主流虚拟机(如VMware、KVM、Hyper-V),依赖 CPU/硬件扩展来提升性能,必须要有硬件支持,不过也存在纯软件模拟的虚拟机.
# 参考资料
# 容器
# 什么是容器?
需求来源: 是源自什么问题才催生出容器技术呢?
- 应用运行环境不一致
开发环境、测试环境、生产环境之间经常存在着差异,比如:
- 开发使用的是Ubuntu 18.04,但是线上部署的环境是CentOS
- 即使系统一样,不同机器上安装的库版本、依赖包也可能不一致
具体对应到现实的现象就是:“在我的电脑上能跑,到别人的机器上就出错,一上线就报错”
- 应用隔离与资源管理的需求
在同一服务器上部署的多个应用会相互影响,比如:
- A应用崩溃可能会影响B应用
- A应用可能会吃掉所有CPU/内存,导致B无法运行
为什么不用虚拟机解决这些问题:
- 虚拟机需要模拟出完整的硬件和操作系统,开销大。
- 容器直接复用宿主机的操作系统内核,只隔离开了用户空间,资源开销小。
实质:
容器之所以能快速迁移环境,就是因为它运行时把镜像挂载为自己的根文件系统,从而保证应用总能找到正确的库和依赖。
如何运作:
使用控制组(Cgroup)和命名空间(namespace),前者用于在进程之间分配资源,后者用于限制进程对系统的其它资源或区域的访问或可见性。
其它优点:
- 可以构建容器镜像,就可以一次构建,多次分发,而不需要运维人员手动在服务器上安装依赖包。
# 容器编排
什么是容器编排:
容器编排自动配置、部署、扩展和管理容器化应用程序的生命周期。开发者可以使用容器编排来简化敏捷或DevOps开发运维工作流。
为什么容器需要编排:
- 可以自动化执行与部署和运行容器化应用程序和服务有关的操作任务
容器编排如何工作:
容器编排架构包括在多台机器和环境中运行容器集群。每个集群通常由一组节点(也称为服务器实例)组成。工作节点使用诸如Docker的容器运行时来运行容器。一组控制平面节点充当集群的协调器。用户可以使用具有API和GUI的工具来管理和监控容器化工作负载。
三步过程:
- 配置
大部分容器编排工具支持声明性配置模型。开发人员编写定义所需状态的配置文件(YAML或JSON),编排工具实现该状态。配置文件通常会:
- 定义哪些容器映像组成应用程序,并指明它们的位置(在哪个容器注册表中)
- 为容器配置存储和其它资源
- 定义并保护容器之间的网络链接
- 指定版本控制(用于分阶段或金丝雀部署?)
- 部署
编排工具计划将容器(和容器副本,用于实现弹性)部署到主机。根据可用的CPU容量、内存或配置文件中指定的其它要求或约束选择最佳主机
- 生命周期管理
- 部署后,编排工具根据容器定义文件(通常是Dockerfile)管理容器化应用程序生命周期
生命周期管理任务包括:
- 管理容器之间的可扩展性(扩展和所见)、负载均衡和资源分配
- 通过在发生中断或系统资源短缺时将容器重新定位到另一台主机,确保可用性和性能
- 收集和存储用于监控应用程序运行状况和性能的日志数据和其它遥测数据
# 参考资料
# 类爆炸
- 并不指类的数量的多少,而是指在实现一个功能时,设计了过多的类,远超实现所需的数目。使得维护成本高于设计的效用。

像上图所示,如果持续添加Message的子类,则需要进一步分化出type1和 type2。这会使得类的数目快速增加,加大维护成本。
# 参考资料
# 技术演进
# 传统单机 -> 分时系统 -> 虚拟机 -> 容器
传统单机(1950s-1960s初)
- 一次只能运行一个程序,用户独占整台计算机,程序直接与硬件交互,没有隔离
分时系统(1960s)
- 操作系统通过调度算法(时间片轮转),让多个用户进程“轮流”使用CPU
- 每个用户感觉子集独占一台计算机
虚拟机(1960s-1970s)
- 在硬件上运行一个虚拟机监控器,把物理机切分为多个虚拟机,每个虚拟机拥有完整的操作系统。
容器(2000s-现在)
- 基于操作系统内核的进程级虚拟化,而不是完整硬件虚拟化。
- 镜像只包含应用和依赖库
# 术语解释
| 术语 | 解释 |
|---|---|
| 镜像 | 即一个实例的一比一的拷贝,相当于复制一个文件。 |
# 音乐
今天心血来潮,搜索鲍勃迪伦(Bob Dylan)再听了一遍高中时期英语老师给我们推荐的Tempest。我发现还是民谣类型的歌曲令人平静、令人沉浸。过去我听的歌曲似乎都有点个人化了,在不断地加强个人叙事,从而让我的认知陷入到以个人为中心的视角中,而缺少的开放性。

- 表演者: Bob Dylan
- 流派: 摇滚
- 专辑类型: Album
- 介质: Audio CD
- 发行时间: 2012-09-11
- 出版者: Columbia
# 待解决
- 金丝雀部署
- CI/CD pipeline (opens new window)
- 拉格朗日乘子法