<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>FoldRight</title><link>https://www.foldright.com/</link><description>Recent content on FoldRight</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 12 Jan 2025 18:29:00 +0000</lastBuildDate><atom:link href="https://www.foldright.com/index.xml" rel="self" type="application/rss+xml"/><item><title>TAPL 数学预备知识：集合、关系与函数</title><link>https://www.foldright.com/tutorials/type-system/tapl-math-preliminaries/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.foldright.com/tutorials/type-system/tapl-math-preliminaries/</guid><description>集合、关系、函数、偏函数、全函数与保持性的基础整理。</description></item><item><title>TAPL 数学预备知识：有序集、序列与归纳法</title><link>https://www.foldright.com/tutorials/type-system/tapl-chapter-2-math-preliminaries/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.foldright.com/tutorials/type-system/tapl-chapter-2-math-preliminaries/</guid><description>关系性质、有序结构、序列、归纳法、字典序归纳与闭包证明。</description></item><item><title>Orthogonal 矩阵</title><link>https://www.foldright.com/post/relearn-matrix-4/</link><pubDate>Sun, 12 Jan 2025 18:29:00 +0000</pubDate><guid>https://www.foldright.com/post/relearn-matrix-4/</guid><description>&lt;h3 id="orthonormal-bases"&gt;Orthonormal Bases&lt;/h3&gt;
&lt;p&gt;对于一个给定的空间 $R^n$，有无限多的基。 每组基都可以线性组合成该空间的向量。
在这么多组基中，最好的基，就叫做 &lt;strong&gt;Orthonormal Bases&lt;/strong&gt;，常用 $q_1, q_2,&amp;hellip; q_n$ 来表示。&lt;/p&gt;
&lt;p&gt;Orthonormal Bases 有以下性质：
$$
q_i^Tq_j =
\begin{cases}
0 &amp;amp; if &amp;amp; i \ne j &amp;amp; (orthogonality) \
1 &amp;amp; if &amp;amp;i = j &amp;amp; (normalization)
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;由 Orthonormal Bases 组成的矩阵一般称为 $Q$ ，一般来说矩阵 $Q$ 都是比较高的，也就是 $Q_{m\times n}$ 中的 $m \geqslant n$ ，因为 Othonormal Bases 是互相垂直的，且是$m$ 维的向量组成的，所以 $m$ 一定要比 $n$ 大，否则就很难相互之间垂直了。&lt;/p&gt;
&lt;p&gt;如果 $m = n$ ，则 Orthonormal Bases 形成一个方阵，这个方阵的名字叫做 &lt;strong&gt;Orthogonal Matrix&lt;/strong&gt;。 注意 Bases 是 Orthonormal， 而 Matrix 是 Orthogonal 。&lt;/p&gt;
&lt;h3 id="orthogonal-matrix-的特点"&gt;Orthogonal Matrix 的特点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;结合 Orthonormal Bases 的性质，&lt;strong&gt;Orthogonal Matrix 的各列都是正交的，而且各列的长度为 1&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;$\bf Q^TQ = I$ ， &lt;strong&gt;也就是 $\bf Q^T = Q^{-1}$&lt;/strong&gt; ， &lt;strong&gt;同时 $\bf QQ^T = I$&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;这点特别重要，因为求 Orthogonal Matrix 的 $Q^{-1}$ 会变的特别简单，只要 $Q^T$ 就可以了。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;第二点要证明也很简单，如下：&lt;/p&gt;
&lt;p&gt;$$
Q^TQ =
\begin{bmatrix}
q_1^T \\
q_2^T \\
q_3^T \\ \vdots
\end {bmatrix}
\begin{bmatrix}
q_1 &amp;amp; q_2 &amp;amp; q_3 &amp;amp; \dots
\end{bmatrix} =
\begin{bmatrix}
1 &amp;amp; 0 &amp;amp; 0 &amp;amp; \dots \\
0 &amp;amp; 1 &amp;amp; 0 &amp;amp; \dots \\
0 &amp;amp; 0 &amp;amp; 1 &amp;amp; \dots \\
\end{bmatrix}
= I = Q^{-1}Q
$$&lt;/p&gt;
&lt;p&gt;$$
QQ^T = (Q^TQ)^T = I^T = I
$$&lt;/p&gt;
&lt;h3 id="orthogonal-matrix-对向量的操作"&gt;Orthogonal Matrix 对向量的操作&lt;/h3&gt;
&lt;p&gt;orthogonal Matrix 对向量的操作，主要就是用来 旋转、反射向量，或者是这两个操作的结合。&lt;/p&gt;
&lt;h3 id="orthonormal-bases-好什么好处"&gt;Orthonormal Bases 好什么好处？&lt;/h3&gt;
&lt;p&gt;如果一个向量可以用 Orthonormal Bases 来表示，那么很容易就能找到他们的系数。 比如：
$$
b = x_1q_1 + x_2q_2 + \dots + x_nq_n
$$
只要 $q_1, q_2, \dots, q_n$ 是一组 Orthonormal Bases，那么找到 $x$ 会很简单。因为如果两边同时左乘 $q_1^T$,参考开头 $q_i^Tq_j$ 的定义， 就能进行推导：
$$\begin{align}
q_1^Tb &amp;amp;= x_1q_1^Tq_1 + x_2q_1^Tq_2 + \dots + x_nq_1^Tq_n \\
&amp;amp;= x1
\end{align}
$$&lt;/p&gt;
&lt;p&gt;或者直接用用矩阵的方式来解决，让 $Q$ 为 Orthogonal Matrix：&lt;/p&gt;
&lt;p&gt;$$
\begin{align}
Qx &amp;amp;= b \\
Q^{-1}Qx &amp;amp;= Q^{-1}b \\
x &amp;amp;= Q^{-1}b \\
x &amp;amp;= Q^Tb
\end{align}
$$&lt;/p&gt;
&lt;p&gt;这里可以看出来，由于 $A^{-1} = A^{-T}$ ，所以求解线性方程组会变得非常简单，毕竟 $x^{-1}$ 还是有计算量的，而 $x^T$ 就很容易看出来了。&lt;/p&gt;
&lt;p&gt;到这里可以看出来，在 Orthogonal Matrix 中，一个向量可以分别投影到各个 base 向量中，而各个 base 是垂直的。一个最简单的想象方式就是小时候经常训练的由 $(x, y)$ 组成的二维平面。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.foldright.com/post/relearn-matrix-3/"&gt;上一篇&lt;/a&gt;文章中提到的投影矩阵 $P = A(A^TA)^{-1}A^T$，如果 $A$ 为 $Q$，则 $P = Q(Q^TQ)^{-1}Q^T = QQ^T$。 注意这里的 $Q_{m\times n}$ 中的 $m$ 可能和 $n$ 不相等。如果 $m = n$，那么 $P = I$ 。&lt;/p&gt;
&lt;p&gt;在 $Ax=b$ 的问题上，如果 $A$ 为 $Q$ ，则 $x = Q^Tb$。&lt;/p&gt;
&lt;h3 id="如何把普通的-a-转换为-q"&gt;如何把普通的 A 转换为 Q&lt;/h3&gt;
&lt;p&gt;使用 Gram-Schmidt 方法，把相互独立的 bases，转换成相互垂直的 bases，同时使得两者 span 成的空间不变。具体的方法这里就不展开了。&lt;/p&gt;</description></item><item><title>投影矩阵</title><link>https://www.foldright.com/post/relearn-matrix-3/</link><pubDate>Mon, 06 Jan 2025 23:21:02 +0000</pubDate><guid>https://www.foldright.com/post/relearn-matrix-3/</guid><description>&lt;h3 id="夹角与垂直"&gt;夹角与垂直&lt;/h3&gt;
&lt;p&gt;两个向量的夹角为：
$$
\cos\theta = \frac{a^Tb}{\parallel{a}\parallel\parallel{b}\parallel}
$$&lt;/p&gt;
&lt;p&gt;两个向量正交，则内积 $a^Tb = 0$。&lt;/p&gt;
&lt;h3 id="向量投影到向量"&gt;向量投影到向量&lt;/h3&gt;
&lt;p&gt;向量 $b$ 投影到向量 $a$，可以形象的理解成 $b$ 会按照与 $a$ 垂直的方向投射到 $a$ 上。所以 $b$ 投影到 $a$ 的结果是一个与 $a$ 方向一样的向量，我们称为 $p = \hat{x}a$，其中 $\hat{x}$ 为标量。 因此有 $(b-p) \perp a$，也就是他们的内积为 0： $a^T(b - \hat{x}a) = 0$ 。可以进一步推导出 $a^Tb - \hat{x}a^Ta = 0$ ，因此：
$$
\hat{x} = \frac{a^Tb}{a^Ta}
$$
投影结果 $p$ 就为：
$$
p = \hat{x}a = \frac{a^Tb}{a^Ta} a = a \frac{a^Tb}{a^Ta} = \frac{aa^T}{a^Ta}b
$$&lt;/p&gt;
&lt;p&gt;换个视角，如果把投影的过程当成一个线性系统，也就是输入为 $b$，输出结果为 $p$，投影过程所代表的转换矩阵为 $P$，则： $Pb = p$ 。通过代入计算可得：&lt;/p&gt;
&lt;p&gt;$$
P = \frac{aa^T}{a^Ta}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;$P$ 就称为投影矩阵&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果向量的维度为 $n$， 则 $P$ 为 $n\times{n}$ 矩阵。$P$ 投影矩阵的 rank 为 1，因为上面式子揭露了矩阵是由向量 $a$ 和 $a^T$ 相乘决定的。并且 nullspace 的 basis 为 $n-1$ 个，row space 和 column space 的 basis 为 1 个，都为 $a$， left nullspace 的 basis 也为 $n-1$ 个。&lt;/p&gt;
&lt;h4 id="向量投影向量的矩阵是对称的"&gt;向量投影向量的矩阵是对称的&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;同时$P$为对称矩阵&lt;/strong&gt;，即： $P^T = P$。证明：
$$
P^T = \left(\frac{aa^T}{a^Ta}\right)^T = \frac{(a^T)^Ta^T}{a^Ta} = \frac{aa^T}{a^Ta} = P
$$&lt;/p&gt;
&lt;h4 id="向量投影到向量的矩阵是幂等的"&gt;向量投影到向量的矩阵是幂等的&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;同时还有 $P^2 = P$&lt;/strong&gt;。 在几何上很容易理解，投影之后再投影，对输入肯定是没有任何作用了。证明：&lt;/p&gt;
&lt;p&gt;$$
P^2 = \frac{aa^T}{a^Ta}\frac{aa^T}{a^Ta} = \frac{aa^Taa^T}{a^Taa^Ta}
= \frac{a(a^Ta)a^T}{(a^Ta)a^Ta} = \frac{aa^T}{a^Ta} = P
$$&lt;/p&gt;
&lt;h4 id="向量投影到向量的矩阵没有逆矩阵"&gt;向量投影到向量的矩阵没有逆矩阵&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;$P$ 没有逆矩阵&lt;/strong&gt;，因为 $P$ 是 singlar 的， rank 不为 $n$。几何上可以理解为，&lt;strong&gt;向量 $b$ 被投影之后，再也还原不回来了&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="向量投影到多维子空间"&gt;向量投影到多维子空间&lt;/h3&gt;
&lt;p&gt;如果把 $a$ 当成未知的向量，它在一个平面上，向量 $b$ 投影到该平面上的情况分析也类似。我们可以先把这个平面的 basis 形成矩阵，用 $A$ 表示，这样与 $b$ 投影到该平面的向量就是 $a = Ax$ ，这样就能使用上面同样的思路， $(b-Ax)·Ax = 0$ ，这个是点积，有点推导不动了。&lt;/p&gt;
&lt;p&gt;换一种思路，因为 $a$ 是由 $A$ 的 column 的线性组合，属于$A$的 column space，所以与 $a$ 垂直的向量必定是落在 $A$ 的 left nullspace 中，也就是 $(b - Ax)$ 落在 $A$ 的 left nullspace 中， 在 left nullspace 中的向量有 $y^TA = A^Ty = 0$ ，所以 $A^T(b-Ax) = 0$，再进行推导得到 $A^TAx = A^Tb$ （好像就是 $Ax=b$ 两边同时用 $A^T$ 来做转换），从而得到 $x=(A^TA)^{-1}A^Tb$ 。&lt;/p&gt;
&lt;p&gt;所以，向量 $b$ 投影到 $A$ 的结果就为 $Ax = A(A^TA)^{-1}A^Tb$。投影矩阵就是 $P = A(A^TA)^{-1}A^T$。&lt;/p&gt;
&lt;p&gt;需要注意的是，上面$P$ 出现了 逆矩阵 $(A^TA)^{-1}$，而逆矩阵的出现是有条件的，即 $(A^TA)$ 需要是方阵，假设 $A$ 为 $m\times n$ 的矩阵，则 $(A^TA)$ 则为 $n\times n$ 的方阵。同时也需要 $(A^TA)$ 的 rank 为 $n$ ，也就是 non-singlar 。&lt;/p&gt;
&lt;p&gt;同时 $(A^TA)$ 的 nullspace， 也就是 $A$ 的 nullspace，证明如下：
$$\begin{align}
&amp;amp; &amp;amp;Ax &amp;amp;= 0 &amp;amp; A的\ nullspace\ 性质
\\&amp;amp;\Rightarrow &amp;amp;A^T(Ax) &amp;amp;= 0 &amp;amp; 左边同时乘\ A^T
\\&amp;amp;\Rightarrow &amp;amp;(A^TA)x &amp;amp;= 0 &amp;amp; 结合律
\end{align}$$
上面式子说明，$A$ 的 nullspace 是 $A^TA$ 的 nullspace。&lt;/p&gt;
&lt;p&gt;接下来看：&lt;/p&gt;
&lt;p&gt;$$\begin{align}
&amp;amp; &amp;amp;(A^TA)x &amp;amp;= 0 &amp;amp;(A^TA) 的\ nullspace\ 性质
\\&amp;amp;\Rightarrow &amp;amp;x^T(A^TA)x &amp;amp;= 0 &amp;amp;左边同时乘 x^T
\\&amp;amp;\Rightarrow &amp;amp;(x^TA^T)Ax &amp;amp;= 0 &amp;amp;结合律
\\&amp;amp;\Rightarrow &amp;amp;(Ax)^TAx &amp;amp;= 0 &amp;amp;利用\ (Ax)^T = x^TA^T
\\&amp;amp;\Rightarrow &amp;amp;\parallel Ax \parallel^2 &amp;amp;= 0 &amp;amp; 利用A^TA=\parallel A \parallel^2
\\&amp;amp;\Rightarrow &amp;amp;\parallel Ax \parallel &amp;amp;= 0
\\&amp;amp;\Rightarrow &amp;amp;Ax&amp;amp;= 0
\end{align}$$&lt;/p&gt;
&lt;p&gt;上面式子说明，$(A^TA)$ 的 nullspace 是 $ax$ 的 nullspace 。
所以 &lt;strong&gt;$(A^TA)$ 的 nullspace 与 $A$ 的 nullspace 等价，也就是说如果 $A$ 要有 $P$，则 $A$ 必须 full rank&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;上面得到的投影矩阵 $P$ 是一个一般化的情形，和一维向量投影的性质类似。&lt;/p&gt;
&lt;h4 id="投影矩阵是对称矩阵"&gt;投影矩阵是对称矩阵&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;$P$ 为对称矩阵&lt;/strong&gt;，即 $P^T = P$，证明：
$$\begin{align}
P^T &amp;amp;= (A(A^TA)^{-1}A^T)^T&lt;br&gt;
\\ &amp;amp;= (A^T)^T((A^TA)^{-1})^TA^T
\\ &amp;amp;= A(((A^TA)^T)^{-1}A^T)
\\ &amp;amp;= A(A^TA)^{-1}A^T
\\ &amp;amp;= P
\end{align}$$&lt;/p&gt;
&lt;h4 id="投影矩阵是幂等矩阵"&gt;投影矩阵是幂等矩阵&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;同时也有 $P^2 = P$&lt;/strong&gt;。证明：&lt;/p&gt;
&lt;p&gt;$$\begin{align}
P^2 &amp;amp;= PP
\\ &amp;amp;= (A(A^TA)^{-1}A^T)(A(A^TA)^{-1}A^T)
\\ &amp;amp;= A(A^TA)^{-1}((A^TA)(A^TA)^{-1})A^T
\\ &amp;amp;= A(A^TA)^{-1}A^T
\\ &amp;amp;= P
\end{align}$$&lt;/p&gt;
&lt;p&gt;几何意义也类似，投影之后再投影，对输入肯定是没有任何作用了。&lt;/p&gt;
&lt;h4 id="投影矩阵没有逆矩阵"&gt;投影矩阵没有逆矩阵&lt;/h4&gt;
&lt;p&gt;类似的，&lt;strong&gt;$P$ 没有逆矩阵，因为向量 $b$ 被投影之后，再也还原不回来了&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="投影到四个子空间的矩阵"&gt;投影到四个子空间的矩阵&lt;/h3&gt;
&lt;p&gt;另外，&lt;strong&gt;既然 $P$ 是把 $b$ 投影到 $A$ 的 column space，那么 $I-P$ 就是把 $b$ 投影到 $A$ 的 left nullspace&lt;/strong&gt;，证明：$b - Pb$ 落在 $A$ left nullspace 上，那么 $b - Pb = Ib - Pb = (I-P)b$，也就是说$ (I-P)$ 把 $b$ 投影到 $A$ 的 left nullspace 上。&lt;/p&gt;
&lt;p&gt;对应的， &lt;strong&gt;$P_2 = A^T(AA^T)^{-1}A$ 把 $b$ 投影到 $A$ 的 row space 上，对应的 $I-P_2$ 把 $b$ 投影到 $A$ 的 nullspace 上&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;也就是说，我们可以把向量 $b$ 投影到 $A$ 的四个子空间：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;投影矩阵&lt;/th&gt;
&lt;th&gt;投影到A的子空间&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$P = A(A^TA)^{-1}A^T$&lt;/td&gt;
&lt;td&gt;column space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$P = I - A(A^TA)^{-1}A^T$&lt;/td&gt;
&lt;td&gt;left nullspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$P = A^T(AA^T)^{-1}A$&lt;/td&gt;
&lt;td&gt;row space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$P = I - A^T(AA^T)^{-1}A$&lt;/td&gt;
&lt;td&gt;nullspace&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>矩阵的四个子空间</title><link>https://www.foldright.com/post/relearn-matrix-2/</link><pubDate>Sat, 04 Jan 2025 14:19:02 +0000</pubDate><guid>https://www.foldright.com/post/relearn-matrix-2/</guid><description>&lt;p&gt;给定一个方程式 $Ax = b$，我们需要回答几个基本问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$x$ 是否&lt;strong&gt;存在&lt;/strong&gt;解？&lt;/li&gt;
&lt;li&gt;如果存在的话，解是否&lt;strong&gt;唯一&lt;/strong&gt;？&lt;/li&gt;
&lt;li&gt;需要满足什么条件，才能让方程式有解？&lt;/li&gt;
&lt;li&gt;如果有解的话，如何找到所有满足方程式的解 $x$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;也可以把上面这几个问题从工程的观点上进行提问：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果有一个系统 $A$，我们期望它能输出 $b$，我们想知道这个系统是否具备这个能力，使得某个 input 可以变成 $b$。 或者反过来说，某个输出 $b$ 非常讨厌，我们不想让系统 $A$ 产生，$A$ 会不会有可能会输出 $b$ ？&lt;/li&gt;
&lt;li&gt;如果可以，input 是唯一的吗？&lt;/li&gt;
&lt;li&gt;否则，这个系统 $A$ 应该如何设计，才能让我们能够输出 $b$&lt;/li&gt;
&lt;li&gt;并且通过这个系统的设计，找出所有可能的 input，让 input的生产也变得更简单些&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了回答上述问题，我们需要去了解矩阵(系统) $A$ 的特性。&lt;/p&gt;
&lt;h3 id="column-space"&gt;Column space&lt;/h3&gt;
&lt;p&gt;Column Space 能让我们回答一个问题，即 $Ax = b$ 是否存在解？&lt;/p&gt;
&lt;p&gt;Column Space 就是 $A$ 中的每列向量，通过线性组合而成的空间，就是$A$ 的 Column Space，符号为 $C(A)$ ，或者叫 $R(A)$ ，也就是 Range of $A$，$A$ 的值域，很贴切。 其实 $Ax$ 描述的空间就是 $C(A)$。&lt;/p&gt;
&lt;p&gt;而只有当 $b$ 落到 $C(A)$ 上，才有解。因为 $x$ 对每列做线性组合只能覆盖到 $C(A)$。&lt;/p&gt;
&lt;p&gt;那如何判断 $b$ 落在了 $C(A)$ 上？如果 $b$ 是可以由 $A$ 的 pivot 所在列对应的列能够线性组合而成的话，就说明 $b$ 落在了 $C(A)$ 上。&lt;/p&gt;
&lt;p&gt;这样就回答了 $x$ 是否有解的问题。&lt;/p&gt;
&lt;p&gt;同时，$C(A)$ 的维度，可以通过 $A$ 的 pivot 数量来定的，也就是 Rank，所以 $A$ 的 Rank 告诉我们 $C(A)$ 的维度。另外一个需要知道的是 $A$ 的转置 $A^t$ 的维度数量，和 $A$ 是一样的。&lt;/p&gt;
&lt;h3 id="nullspace"&gt;Nullspace&lt;/h3&gt;
&lt;p&gt;为什么要找 nullspace？&lt;/p&gt;
&lt;p&gt;如果我们通过 Column Space 知道了$Ax = b$ 存在解，接下来我们就要回答 $Ax = b$ 是否有唯一解。&lt;/p&gt;
&lt;p&gt;如果 nullspace 不只有零向量，说明 $Ax = b$ 没有唯一解。&lt;/p&gt;
&lt;p&gt;而 nullspace 就是看 $Ax = 0$ 的解空间。&lt;/p&gt;
&lt;p&gt;可以这样想，如果 $x&amp;rsquo;$ 是 $Ax = b$ 的一个解，而 $y&amp;rsquo;$ 是 Nullspace 中的任意一个非零向量，那么 $Ay&amp;rsquo; = 0$。我们可以把 $Ax&amp;rsquo; = b$ 等价改写成 $A(x&amp;rsquo; + y&amp;rsquo;) = 0$ ，接着根据分配率， $A(x&amp;rsquo; + &amp;lsquo;y) = Ax&amp;rsquo; + Ay&amp;rsquo;$，而因为 $Ay&amp;rsquo; = 0$，所以 $A(x&amp;rsquo; + &amp;lsquo;y) = Ax&amp;rsquo; + Ay&amp;rsquo; = Ax&amp;rsquo; = b$ 。&lt;/p&gt;
&lt;p&gt;所以一旦有 $x&amp;rsquo;$，那么 $y&amp;rsquo;$ 是多少，就有多少的解。就回答了 $Ax = b$ 是否有唯一解。&lt;/p&gt;
&lt;p&gt;通过了解 Column Space 和 Nullspace ，可以回答 存在性和唯一性的问题。通过分析 Column Space，我们可以知道 $b$ 要满足什么条件会有解决，这样就回答了第三个问题。通过分析 Nullspace，我们知道了怎么样的 $x$ 是解，所以能回答第四个问题。&lt;/p&gt;
&lt;h3 id="row-space"&gt;Row space&lt;/h3&gt;
&lt;p&gt;$A$ 的 Row space ，就是 $A$ 的所有行(row) span(张成) 出来的空间。换句话说，就是 $A$的转置 $A^t$ 的 Column space，也就是 $C(A^t)$ 。&lt;/p&gt;
&lt;p&gt;对于 $m*n$ 的 $A$ 来说， Row space 是来自 $n$ 维空间 $R^n$ 的向量组合成的 $r$ 维空间（$r$ 是 $A$ 的 rank）。&lt;/p&gt;
&lt;h3 id="left-nullspace"&gt;Left Nullspace&lt;/h3&gt;
&lt;p&gt;对称的， $A$ 的 Left Nullspace，就是$A^t$ 的 Nullspace。&lt;/p&gt;
&lt;p&gt;如果说 Nullspace 是对 $A$ 的各列做线性组合后结果为 $0$ 的 $x$ 向量所形成的空间。
那么 Left Nullspace 就是对 $A$ 的各行做线性组合后结果为 $0$ 的 $y$ 向量所形成的空间，表示为寻找 $y^t X = 0$ 的 $y$ 形成的空间。此是 $y$ 在 $x$ 的左边，所以叫做 Left Nullspace。&lt;/p&gt;
&lt;p&gt;对于 $m*n$ 的 $A$ 来说， Left Nullspace 是来自 $n$ 维空间的向量组合成的 $(m-r)$ 维空间（$r$ 是 $A$ 的 rank）。&lt;/p&gt;
&lt;p&gt;对于 Row space 和 Left Nullspace，我们能解决 $y^tA = b$ 的问题。&lt;/p&gt;
&lt;h3 id="了解这四个矩阵子空间有什么用呢"&gt;了解这四个矩阵子空间有什么用呢？&lt;/h3&gt;
&lt;p&gt;如果我们在分析一些系统时，能够将系统转换成矩阵，我们就可以使用通过分析矩阵的四个子空间，来对这个系统进行分析。也就是把现实世界的系统建模成矩阵，通过矩阵来了解系统。&lt;/p&gt;
&lt;p&gt;比如，如果代表系统的矩阵， 是非满秩的，那就代表着矩阵 $Ax = 0$ 有无数解，也就意味着从系统把 input 转成 output 之，就转不回 input 了。因为矩阵 A非满秩，没有逆矩阵。这样就可以直接利用现有的矩阵知识，来深入理解我们的系统了。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;row space 维度为 $r$, nullspace 维度为 $(n-r)$ ，互相垂直。&lt;/li&gt;
&lt;li&gt;column space 维度为 $r$， left nullspace 维度为 $(m-r)$，互相垂直。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://github.com/user-attachments/assets/6be75c77-ba2f-4727-9e06-105eecb1604f" alt=""&gt;&lt;/p&gt;
&lt;p&gt;上面这张图的是从几何观点来看矩阵 $A$ 的，把$A$ 当成系统，输入 $x$，则可以 你被拆解为 row space 的线性组合 加上 Nullspace中的线性组合。对于在 row space上的成分，会被映射到右边的 column space上，而 null space上的成分，则被转换成 $0$。&lt;/p&gt;
&lt;h3 id="附找-nullspace-的步骤"&gt;附：找 nullspace 的步骤&lt;/h3&gt;
&lt;p&gt;给出一个矩阵$A$，求出它的 nullspace 的步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;通过高斯消去法找到 $U$，（此是的 $U$ 就不一定叫做上三角了，因为有可能不是方针，所以现在 U 叫做 Row Echelon Form，阶梯形式）&lt;/li&gt;
&lt;li&gt;从高斯消去法得到的 $U$，可以从中找到 &lt;strong&gt;Pivots&lt;/strong&gt; （Pivots的数量就是 rank）&lt;/li&gt;
&lt;li&gt;在 $U$ 中，包含 pivot 的列，叫做 pivot column， 不包含 pivot 的列，叫做 free column&lt;/li&gt;
&lt;li&gt;对应的，如果在方程中，pivot column 对应的变量，叫做 pivot variable，free column 对应的变量，叫做 free variable&lt;/li&gt;
&lt;li&gt;回到方程中，把 pivot variable 使用 free variable 进行代换。因为 pivot variable 太重要了，不能去动它们，我们能动的是 free variable。有点像自变量和因变量，free variable 像自变量，我们可以自由的给他们定义值，但是 pivot variable 不是我们能定的，它们像因变量，一旦 free variable 给出后，它们就定下来了&lt;/li&gt;
&lt;li&gt;由上一步得到的 free variable将原来的 $x$ 替换成 $x&amp;rsquo;$，重新写成方程 $Ax&amp;rsquo; = 0$ 的形式，就可以把 $Ax&amp;rsquo;$ 等价换成各个 free variable 的线性组合，这样的线性组合形成的空间，是 $Ax&amp;rsquo;= 0$ 的解空间。而这样的线性组合形成的空间，就是 &lt;strong&gt;nullspace&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Nullspace 的维度，就是 free variable 的个数。所以从 $A$ 通过高斯消去得到的 $U$ 不仅能告诉我们关于 $A$ 的 rank （pivot column个数），还能告诉我们关于 $A$ 的 nullspace 的维度（free column个数）&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>理解矩阵</title><link>https://www.foldright.com/post/relearn-matrix/</link><pubDate>Sun, 29 Dec 2024 14:19:02 +0800</pubDate><guid>https://www.foldright.com/post/relearn-matrix/</guid><description>&lt;p&gt;线性代数的矩阵可以看做一个系统，一个 input 被矩阵进行转换，从而产生出一个 output，就好像函数，线性代数研究的就是矩阵系统，矩阵是线性代数中的一等公民，就好像函数是函数式编程中的一等公民，因此需要从更高层面看矩阵，而非关注矩阵中的具体某个数字。&lt;/p&gt;
&lt;p&gt;既然是把矩阵当成一个系统来研究，那就需要从最简单的矩阵研究起，也就是 Identity 矩阵（简称 $I$ ），这个矩阵的作用就是对 input 什么都不做，直接变成 output。 就好像函数中 Identity function ，&lt;code&gt;f(x) = x&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;两个矩阵相乘 $AB$，从工程上的观点来讲，就是把 input 先输入到 $B$，出来的结果再输入到 $A$，从而得到最后的结果，就像函数式编程中的函数一样： $g \cdot f$ 。&lt;/p&gt;
&lt;p&gt;所以矩阵中存在 逆矩阵( inverse )，也就是 $AB = I$ ， 也就是 input 先进入 $B$，再进入 $A$，得到的结果还是 input。 在工程上，这个很有用，相当于输入被某个系统作用后，可以再被某个系统还原回来。工程上如果能通过研究一个系统 $A$，得到它的 逆系统 $B$，那就相当给力了，覆水不再难收，时光可以回流，比如可以用来做回滚，也就是如果发布了东西出现了问题，没关系，把这个结果再输入另外一个系统，就能还原。所以线性代数需要研究 invert 矩阵。&lt;/p&gt;
&lt;p&gt;矩阵相乘满足结合律 $A(BC) = (AB)C$ 。满足分配率 $A(B+C) = AB + AC$。但不满足交换律 $ABC = CBA$ 。要知道交换律在工程上是很难的，如果某些操作满足交换律，就说明操作的顺序可以任意更改，没有因果关系，时序任意，随意并发。因此在工程上的操作能满足交换律是很难得的，但往往很难如工程师的愿，比如矩阵操作，就不满足交换律。&lt;/p&gt;
&lt;p&gt;同时还可以进一步研究矩阵的一些线性相关性质。比如矩阵中的各个列( column )，是否是线性相关的，如果是线性相关的，说明矩阵中有些信息是冗余的，就好像在方程组中的，有些方程和另外一些方程的信息量是一样的。这样有存在列线性相关（dependent）的矩阵，称为 singular 。 相反，非线性相关（independent）的称为 nonsingular 矩阵。 我们会说 nonsingular 矩阵是『好矩阵』，因为矩阵中的每个列都是非线性相关的，没有冗余信息。&lt;/p&gt;
&lt;p&gt;同时还有一些矩阵，比如 上三角矩阵（对角线下面的都是 0，0 组成了一个正三角，简称 U），下三角矩阵（对角线上面都是 0，0 组成了一个倒三角，简称 L）。&lt;/p&gt;
&lt;p&gt;对于一个线性系统 $A$（$A$ 是矩阵）， 对于一个输入 $x$， 输出 $y$， 那么就可以表达成 $Ax = y$ 。 对于这样的一个系统 $A$， 我们可以研究它，通过高斯消去法，把 $A$ 分解成 $A = LU$ 的形式。相当于一个系统可以被分解成两个系统的连续作用， 这样就方便了工程上对系统的理解。类似于编程，把复杂的东西拆解成一个个模块，方便理解、推理和维护。&lt;/p&gt;</description></item><item><title>什么是优秀的代码</title><link>https://www.foldright.com/post/what-is-good-code/</link><pubDate>Fri, 11 Feb 2022 22:30:02 +0800</pubDate><guid>https://www.foldright.com/post/what-is-good-code/</guid><description>&lt;p&gt;在我看来,&lt;/p&gt;
&lt;p&gt;合格的代码追求正确性，优秀的代码追求与人交流，追求表达意图，追求&lt;strong&gt;用户体验&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;写代码关注用户体验，就是关注琢磨自己的代码&lt;/strong&gt;，对于使用者和读者：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;他能不能看懂我代码的设计意图（可能自己就是后来的那个他）&lt;/li&gt;
&lt;li&gt;他会不会有误解，怎么避免他误解&lt;/li&gt;
&lt;li&gt;怎么能让他符合直觉，很容易用对，很难犯错&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好的代码看起来普普通通，一看就懂，但实际上作者是打磨了一遍又一遍。&lt;/p&gt;
&lt;p&gt;好的代码能降低偶然复杂度，提升演进交付速度，进而提升业务迭代速度，这就提升了业务的竞争力，本身就是业务价值。&lt;/p&gt;</description></item><item><title>精益求精-《如何把事情做到最好》读后感</title><link>https://www.foldright.com/post/keep-improving/</link><pubDate>Sun, 25 Mar 2018 19:24:39 +0800</pubDate><guid>https://www.foldright.com/post/keep-improving/</guid><description>&lt;p&gt;现在的广告、电视剧、媒体，总是传达很容易就达到巅峰，快乐。甚至能够从一个巅峰很快达到另一个巅峰，从一个快乐很快达到另一个快乐。但往往都不说在达到巅峰之前，需要经历长期平淡的练习和经历起伏。这样的氛围，只让越来越多的人浮躁，急于求成。&lt;/p&gt;
&lt;p&gt;《如何把事情做到最好》应该是本飞机书 —— 两个小时差不多就可以读完。但并不是说这书没有价值，恰恰相反，这本书的一些观点和陈述，能够让人平和，踏实。&lt;/p&gt;
&lt;h2 id="把事情做到最好的五个要素"&gt;把事情做到最好的五个要素&lt;/h2&gt;
&lt;p&gt;说做事情，说的是如何把一个技能掌握到最好，作者归纳总结了要把事情做好，需要五个要素。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;有效的指导&lt;/strong&gt; 。强调了导师的重要性，学习一个技能，有一个好的导师，会事半功倍，会比自己探索的效率更高。这里的导师，我认为应该包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;寻找一个导师，能有互动，能指导，而且能够指出错误&lt;/li&gt;
&lt;li&gt;技能相关方面的书，不同的书有不同的水平，找到适合自己水平的书&lt;/li&gt;
&lt;li&gt;相关视频资源，一图胜千言，视频胜千图。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;作者特别强调了好导师的重要性，花精力找好导师看着是成本大，其实性价比更大。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;持续练习&lt;/strong&gt;。不要机械的练习，每次的练习都要体会，善于总结。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;保持初学者的心态&lt;/strong&gt;。重复练习，保持空杯心态，把基础打扎实。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;胸有成竹&lt;/strong&gt;。做规划，哪怕是再小的练习，也可以先在心中预演一遍，这里的预演，其实是在体会和思考。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;超越极限&lt;/strong&gt;。不停的挑战自己。比如推理思考，把一件事情推理到无法继续，接下来的每一次进步，都是在突破，都是在挑战自己。&lt;/p&gt;
&lt;p&gt;在这其中，作者还特地强调了&lt;strong&gt;瓶颈期&lt;/strong&gt;（书中用平台期，我觉得用瓶颈期更为恰当）。在瓶颈期中没有明显进步的正常的，只要坚持不断的练习，就会突破瓶颈，从而获得显著进步。&lt;/p&gt;
&lt;h2 id="把事情做好的高效方法"&gt;把事情做好的高效方法&lt;/h2&gt;
&lt;p&gt;接下来，是作者提供的一些把事情做到最好的有效方法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;应对改变的困难&lt;/strong&gt;。 感到退步时，请挺住。因为是原有的舒适区在起反抗，需要认识到这点。这样就能跳出来看自己，警惕旧习惯，能够与自己对话，或者去争取亲友的支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;激发潜能&lt;/strong&gt;。需要保持身体健康，控制好情绪带来的积极力量，如果是不好的情绪，想办法合理释放，这样就可以释放正面情绪，利用情绪的力量激发潜能。 另外一点是要区分优先级、设定 deadline，这也是大家熟知的方法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;避免调入陷阱&lt;/strong&gt;。防止自己浅尝辄止、强求突破、安于现状。坦然面对失败。不要苛求完美，完美不是一步到位，而是不断追求、迭代。拒绝虚荣，练习过程中的丑态不要怕被别人知道，这是进步必经之路。&lt;/p&gt;
&lt;h2 id="最后"&gt;最后&lt;/h2&gt;
&lt;p&gt;保持平和的心态，勇敢出征。&lt;/p&gt;</description></item><item><title>提高决断力-《当机立断》读后感</title><link>https://www.foldright.com/post/make-decision/</link><pubDate>Sat, 17 Mar 2018 22:17:02 +0800</pubDate><guid>https://www.foldright.com/post/make-decision/</guid><description>&lt;p&gt;我(们)每天都在做决定，包括日常的，工作的。&lt;/p&gt;
&lt;p&gt;特别是在工作上，当工作了一段时间之后，就会慢慢开始带人，要开始带领团队。这时候，就很明显的感到，需要开始为团队去做一些规划、判断、决策。&lt;/p&gt;
&lt;p&gt;这也是我为什么看《当机立断》的原因：如何去做判断和决策，并且是有&lt;strong&gt;方法论&lt;/strong&gt;的去做判断？&lt;/p&gt;
&lt;p&gt;我认为这本书给出了一些很好的思路 —— &lt;strong&gt;通过 数字、事实、逻辑 做决定&lt;/strong&gt; 。&lt;/p&gt;
&lt;h2 id="不需要自己思考的好时代过去了"&gt;不需要自己思考的好时代过去了&lt;/h2&gt;
&lt;p&gt;作者(日本人) 论证了为什么大多数日本人不会思考，不是因为日本人和其他民族有什么重大区别，而是与日本之前所处的时代有关 —— 日本的经济高度成长期。&lt;/p&gt;
&lt;p&gt;战后的日本，想要让经济发展起来，只要像美国一样，发展加工贸易即可。目标和方法都明确，剩下的就是举国执行，大家什么都不用考虑，只要按照吩咐做事，就能实现 GDP 的理想增长。在这样的场景下，不作为(不思考)是更为受欢迎的做法 —— 因为什么都不想，只要执行，经济发展就能取得预期效果。&lt;/p&gt;
&lt;p&gt;但当后面日本的经济陷入增长率为0的时候，就只能动脑筋了，这才是正常的社会运作方式，动脑筋，敢于冒险，成功的话企业获利，失败的话企业亏损，再正常不过了！&lt;/p&gt;
&lt;p&gt;理解起来，这其实是当时的日本处在&lt;strong&gt;战后经济发展红利期&lt;/strong&gt; ，处在红利期的时候，什么都不做，也能取得很好的成绩。&lt;/p&gt;
&lt;p&gt;与今天的互联网类似，今天都在喊『互联网红利已经过去』、『互联网进入下半场』，不也是一样吗！在过去的一段时间内，国内(移动)互联网可以说是处在高速发展的红利期，设备不断增加，用户不断增长，在早期，只要某个 APP 解决了用户的某个痛点，大概率上，就能够发展起来。这就是红利。&lt;/p&gt;
&lt;p&gt;但在今天，这样做已经远远不够了，红利期的流逝，会加速淘汰不思考或思考深度不够的人和组织。因此，如何思考、决策会变得尤为重要，大到行业、公司，小到公司内的团队、个人。&lt;/p&gt;
&lt;p&gt;同样，对于个体来说，那个『被业务推着赶着』就能成功(晋升)的年代，很可能已经不复返了。&lt;/p&gt;
&lt;h2 id="为什么总得不出正确的决定"&gt;为什么总得不出正确的决定&lt;/h2&gt;
&lt;h3 id="考虑了多余因素"&gt;考虑了多余因素&lt;/h3&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;老板的脸色和公司制度&lt;/li&gt;
&lt;li&gt;自己有无经验&lt;/li&gt;
&lt;li&gt;过去的经验&lt;/li&gt;
&lt;li&gt;自己的工作理念&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上述这些因素与工作本身的『决定』都没有关系。&lt;/p&gt;
&lt;p&gt;在工作中，唯一的原则是：&lt;strong&gt;以哪一种更有利作为选择标准！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;至于这些多余因素，是在『方案通过』这件事上有关系，和『决定』这件事情没有关系。&lt;/p&gt;
&lt;p&gt;『决定』和『方案通过』是两个事情，应该解耦，不要混淆在一起，这样思路才会更简单和清晰。&lt;/p&gt;
&lt;p&gt;比如，我先决定要做 xxx 项目，因为更能支撑对公司的战略，这就是『决定』，然后再考虑 老板是否喜欢这个项目的内容，这是『方案通过』。有时候决定了，方案并不能通过，但并不影响我进一步的判断，我需要做的事情是想办法让『方案通过』。&lt;/p&gt;
&lt;h3 id="无法舍弃"&gt;无法舍弃&lt;/h3&gt;
&lt;p&gt;做决定，其实就是选择一方的同时要舍弃另一方。所以很多情况下，『无法选择』就是『无法放弃』。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“做前人未为之事”差不多就等同于“受旧势力排挤”。如果不想受旧势力排挤，就不要创新，这种情况下就是“鱼和熊掌不可兼得”。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;“做决定的时候，必须综合考虑，并明确会得到什么，失去什么。因为有舍必有得，不需要太过惊慌。请尽量客观地考虑当下哪个是最佳选项。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;而客观的判断，就是后面作者要重点阐述的： &lt;strong&gt;『数字、事实、逻辑』方法论。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;另外，作者在这里给出了如何区分『可以冒的险』和『不可冒的险』，基本原则是：如果冒险失败，组织/个人是否还能继续维持(不倒闭、可持续)，如果是，那就是『可以冒的险』；如果不是，那就是『不可冒的险』。&lt;/p&gt;
&lt;h2 id="用数据事实逻辑来做决定"&gt;用『数据、事实、逻辑』来做决定&lt;/h2&gt;
&lt;p&gt;做决策，应该说全世界都通用、认可的准则就是：数字、事实、逻辑。根据现有的数据和相关联的事实，通过逻辑推理，从而做出决策。&lt;/p&gt;
&lt;p&gt;如果把逻辑比作是函数 &lt;code&gt;y=f(x)&lt;/code&gt; ，自变量 &lt;code&gt;x&lt;/code&gt; 就是数字和事实，那么 &lt;code&gt;x&lt;/code&gt; 越多，因变量 &lt;code&gt;y&lt;/code&gt; 就会更准确，靠谱。&lt;/p&gt;
&lt;p&gt;不要用文字来思考，而是用数字来思考，这会让人变得更加客观，也是全球商务决策的共同准则。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数字&lt;/strong&gt;，是需要与原始数据挂钩的，因为二手信息总是会有误差，一点信息有误差，就会影响逻辑的输入，获取有问题的数字，然后来进行逻辑推理，这是成本相当大的。同时，数字也要进行对比，这样的数字还会有意义。这里作者举了一个例子，2008年北京奥运会的时候，很多运动员担心北京的空气质量问题而不参加奥运会，但如果通过数据对比1960年东京奥运会时的空气质量，实际上，2008年北京的空气质量更好。如果有数字进行对比，那么就不会感情用事。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;事实&lt;/strong&gt;，要分清楚『客观事实』与『意见』。比如『某产品很便宜』这句话，不是事实，而是意见，便不便宜是个人感受，不同的人会有不同的意见。但事实是无论是谁，都会得出相同的结论，比如『A 产品100元，B 产品90元，A 产品比 B 产品便宜』，就是事实，因为谁都会说『A 产品比 B 产品便宜』。&lt;/p&gt;
&lt;p&gt;同时，一个用户的意见不是事实，只有通过统计处理的用户意见，才能解开事实真相。这与我们在平时的认知中是一样的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;逻辑&lt;/strong&gt;，是由数字和事实构成的理论依据。在选择两个方案时，两个都是逻辑，为了确定哪个逻辑更加符合事实，应该用&lt;strong&gt;哪一个含有更多变量&lt;/strong&gt;作为判断标准。那么如何增加自变量&lt;code&gt;x&lt;/code&gt;的数量呢？作者给出了两个方法，一是执着的将数字事实逻辑执行到底，不轻易相信他人意见，坚持自己分析数据和事实；二是和不同的人去讨论，以获得更多自变量。&lt;/p&gt;
&lt;p&gt;这与机器学习的预测道理一样，有更多的自变量，预测就会更准确。为了预测效果好，除了数据要准确之外，还可以和领域专家进行更多交流，获得更多有价值的特征。&lt;/p&gt;
&lt;h2 id="边实施边修正"&gt;边实施边修正&lt;/h2&gt;
&lt;p&gt;虽然上面的决策方式在理论上没有问题，但具体实施的时候，肯定会有失误、犯错的可能。&lt;/p&gt;
&lt;p&gt;但不能因此就一直在想，不去执行，如果有七成把握的话，就可以开始行动，一旦发现有进展不顺利的地方，就进行修正。边做边修改，直到方案完成，这就是在尝试和错误中前行。&lt;/p&gt;
&lt;h2 id="直觉"&gt;直觉&lt;/h2&gt;
&lt;p&gt;作者还阐述了直觉的作用，当使用『数字、事实、逻辑』无法做决定时，还可以通过直觉做决定。但直觉不是胡乱猜测，直觉是建立在人生积累和经历的基础上的，积累越多，直觉越准。&lt;/p&gt;
&lt;p&gt;而且，直觉是可以锻炼的，通过输入信息可以锻炼直觉，而输入信息的方法有：旅行、书、人。&lt;/p&gt;
&lt;h2 id="最后"&gt;最后&lt;/h2&gt;
&lt;p&gt;《当机立断》是一本关于如何做决策方法论的书，很薄，读完只需要花2-3小时，但其中的干货也不少。一如日本作者写书的风格，细腻的照顾到了读者的各种感受。&lt;/p&gt;
&lt;p&gt;很多时候，有些道理不是不懂，而是知道了，却还是不那么『相信』，总有种担心『黑天鹅』的感觉，其实就是一种完美主义，害怕失败的体现。但读完《当机立断》后，会让一些想法更加坚定，这就已经值回票价了。&lt;/p&gt;</description></item><item><title/><link>https://www.foldright.com/distributed-messaging-trends/%E5%88%86%E5%B8%83%E5%BC%8F%E6%B6%88%E6%81%AF%E7%B3%BB%E7%BB%9F%E6%9C%80%E6%96%B0%E8%B6%8B%E5%8A%BF%E6%8A%A5%E5%91%8A_20260627/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.foldright.com/distributed-messaging-trends/%E5%88%86%E5%B8%83%E5%BC%8F%E6%B6%88%E6%81%AF%E7%B3%BB%E7%BB%9F%E6%9C%80%E6%96%B0%E8%B6%8B%E5%8A%BF%E6%8A%A5%E5%91%8A_20260627/</guid><description>&lt;h1 id="分布式消息系统最新趋势报告-2026年6月21日-27日"&gt;分布式消息系统最新趋势报告 (2026年6月21日-27日)&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;作者&lt;/strong&gt;: Manus AI&lt;/p&gt;
&lt;h2 id="摘要"&gt;摘要&lt;/h2&gt;
&lt;p&gt;本报告旨在分析2026年6月21日至27日期间分布式消息系统的最新发展趋势，重点关注 Apache Kafka、Apache RocketMQ、Redpanda、RabbitMQ、RobustMQ 等主流及新兴系统。研究发现，当前消息系统正经历显著变革，主要体现在以下几个方面：深度拥抱人工智能（AI-Native）以支持 Agent 间通信和复杂 AI 工作流；加速向存算分离架构演进，利用对象存储降低成本并提升弹性；以及通过架构现代化和移除历史技术债来增强系统稳定性与性能。新兴系统如 AutoMQ 和 RobustMQ 凭借其创新理念，在云原生和 AI 领域展现出强劲的增长势头。&lt;/p&gt;
&lt;h2 id="核心动态概览"&gt;核心动态概览&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;系统名称&lt;/th&gt;
&lt;th style="text-align: left"&gt;最新版本/重要里程碑&lt;/th&gt;
&lt;th style="text-align: left"&gt;发布日期/更新日期&lt;/th&gt;
&lt;th style="text-align: left"&gt;核心趋势/关键更新&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;Apache Kafka&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;4.3.1&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026-06-25&lt;/td&gt;
&lt;td style="text-align: left"&gt;修复 Kafka Streams RocksDB 内存泄漏；积极推进 KIP-1183 (统一共享存储) 提案，探索与对象存储集成 [1]。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;Apache RocketMQ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;5.5.0&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026-04-10&lt;/td&gt;
&lt;td style="text-align: left"&gt;引入 &lt;strong&gt;LiteTopic&lt;/strong&gt;，专为 AI Agent、异步任务和海量轻量会话设计，支持百万级通道，转型为 AI-Native 异步通信引擎 [2] [3]。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;RabbitMQ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;4.3.2&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026-06-15&lt;/td&gt;
&lt;td style="text-align: left"&gt;彻底移除 Mnesia，采用 &lt;strong&gt;Khepri&lt;/strong&gt; 作为默认元数据存储；支持 32 级严格优先级，优化 Streams 性能 [4] [5]。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;Redpanda&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;-&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026-06-23&lt;/td&gt;
&lt;td style="text-align: left"&gt;推出 &lt;strong&gt;Agentic Data Plane&lt;/strong&gt;，专注于 AI Agent 工作流的治理与低延迟数据处理 [6]。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;RobustMQ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;0.4.0&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026-05-05&lt;/td&gt;
&lt;td style="text-align: left"&gt;提出 &lt;strong&gt;mq9&lt;/strong&gt; 协议与 &lt;strong&gt;Mailbox&lt;/strong&gt; 抽象，专为 AI Agent 异步可靠通信设计，支持多协议统一存储 [7] [8]。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;AutoMQ&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;GitHub Stars 突破 10K&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026-06-12&lt;/td&gt;
&lt;td style="text-align: left"&gt;主打 &lt;strong&gt;Diskless Kafka&lt;/strong&gt;，利用对象存储实现极致弹性伸缩和零跨可用区流量成本 [9]。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;WarpStream&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;KIP-714 客户端指标 GA&lt;/td&gt;
&lt;td style="text-align: left"&gt;2026-06-10&lt;/td&gt;
&lt;td style="text-align: left"&gt;直接在对象存储上构建 Kafka 兼容层，提供云原生替代方案 [10]。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="详细趋势分析"&gt;详细趋势分析&lt;/h2&gt;
&lt;h3 id="1-深度拥抱-ai-时代消息系统向-ai-native-转型"&gt;1. 深度拥抱 AI 时代：消息系统向 AI-Native 转型&lt;/h3&gt;
&lt;p&gt;随着人工智能技术的飞速发展，分布式消息系统不再仅仅是数据的传输管道，而是正在演变为支持 AI Agent 间高效协作和复杂 AI 工作流的核心基础设施。这一趋势在多个系统中均有体现。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Apache RocketMQ&lt;/strong&gt; 在其 5.5.0 版本中引入的 &lt;strong&gt;LiteTopic&lt;/strong&gt; 是这一趋势的典型代表。LiteTopic 专为 AI Agent、异步任务和海量轻量会话场景设计，允许单个集群支持百万级的轻量化通道。这些通道能够按需自动创建并基于 TTL 自动过期，极大地简化了 AI 应用中 Agent 状态管理和通信的复杂性，降低了运维负担 [2] [3]。RocketMQ 官方已将其定位为 &amp;ldquo;AI-Native Asynchronous Communication Engine&amp;rdquo;，明确了其在 AI 时代的战略方向。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Redpanda&lt;/strong&gt; 也紧随其后，于本周推出了 &lt;strong&gt;Agentic Data Plane&lt;/strong&gt;。该特性旨在为生产环境中的 AI Agent 工作流提供更精细的治理和低延迟数据处理能力。在 AI Agent 大规模部署的场景下，如何有效地监控、审计和路由这些 Agent 产生的数据流成为关键挑战，Redpanda 的新特性正是为了解决这一痛点 [6]。&lt;/p&gt;
&lt;p&gt;新兴系统 &lt;strong&gt;RobustMQ&lt;/strong&gt; 则从协议层面进行创新，提出了 &lt;strong&gt;mq9 协议&lt;/strong&gt;。该协议的核心抽象是 &amp;ldquo;Mailbox&amp;rdquo;，允许每个 AI Agent 拥有独立的地址，并支持 Agent 的注册与通信一体化。这种设计解决了 Agent 间异步协作中的寻址和可靠性问题，为 AI Agent 的高效通信提供了坚实的基础。RobustMQ 作为一个用 Rust 编写的多协议统一存储系统（支持 MQTT, NATS, Kafka），其设计理念非常前瞻，尤其适用于 IoT 与 AI 结合的边缘计算场景 [7] [8]。&lt;/p&gt;
&lt;h3 id="2-存算分离与无盘化云原生架构的必然选择"&gt;2. 存算分离与无盘化：云原生架构的必然选择&lt;/h3&gt;
&lt;p&gt;云原生基础设施的普及正在推动分布式消息系统向存算分离架构演进，以充分利用对象存储（如 Amazon S3）的弹性、成本效益和高可用性。这种转变旨在将数据持久化层从计算节点中解耦，从而实现更灵活的资源管理和更低的运营成本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AutoMQ&lt;/strong&gt; 是 &amp;ldquo;Diskless Kafka&amp;rdquo; 概念的积极倡导者和实践者。通过将数据持久化完全基于 S3 等对象存储，AutoMQ 实现了秒级的扩缩容能力，并消除了传统 Kafka 跨可用区（Cross-AZ）数据复制带来的高昂流量成本。本周 AutoMQ 宣布其 GitHub Stars 突破 10K，这表明市场对这种极致云原生消息系统的强烈需求和认可 [9]。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WarpStream&lt;/strong&gt; 则采取了更为激进的策略，它并非模拟 Kafka 的存储层，而是直接在对象存储之上构建了一个 Kafka 兼容层。这意味着 WarpStream 能够原生利用对象存储的特性，提供一个更具成本效益和运维简便性的 Kafka 替代方案。本周，WarpStream 团队分享了关于如何利用 AI 提升开发效率并保持代码质量的深度思考，同时也宣布 KIP-714 客户端指标已全面可用 [10]。&lt;/p&gt;
&lt;p&gt;即使是老牌巨头 &lt;strong&gt;Apache Kafka&lt;/strong&gt; 也在积极响应这一趋势。社区正在深入讨论 &lt;strong&gt;KIP-1183 (统一共享存储)&lt;/strong&gt; 提案，该提案旨在标准化 Kafka 对各种共享存储（包括对象存储、文件存储和块存储）的支持。这标志着 Kafka 官方正努力适应云原生环境，通过解耦存储与计算来提升系统的灵活性和可扩展性 [1]。&lt;/p&gt;
&lt;h3 id="3-架构现代化与技术债清理"&gt;3. 架构现代化与技术债清理&lt;/h3&gt;
&lt;p&gt;为了适应不断变化的技术环境和提升系统竞争力，许多成熟的分布式消息系统正在进行大规模的架构重构，以移除历史包袱并引入更现代的设计。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Apache Kafka&lt;/strong&gt; 的 4.x 系列版本持续推进 &lt;strong&gt;KRaft 模式&lt;/strong&gt;，旨在彻底移除对外部协调服务 ZooKeeper 的依赖。这一变革极大地简化了 Kafka 的部署和运维复杂性，提升了系统的整体稳定性。本周发布的 4.3.1 版本，作为 bugfix 版本，尤其关注生产环境的稳定性，修复了 Kafka Streams 中 RocksDB 原生内存泄漏的严重问题，进一步巩固了其作为核心数据流平台的地位 [1]。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RabbitMQ&lt;/strong&gt; 在其 4.3 版本中也进行了里程碑式的变革。该版本彻底移除了过去 20 年来一直使用的 Mnesia 数据库，转而采用更现代、更稳定的 &lt;strong&gt;Khepri&lt;/strong&gt; 作为默认的元数据存储。这一举措解决了 Mnesia 在大规模部署和高并发场景下的一些固有挑战。此外，RabbitMQ 4.3 还引入了对 32 级严格优先级的支持，使其在处理需要严格消息顺序和优先级保证的复杂业务逻辑时更具优势。对 &lt;strong&gt;RabbitMQ Streams&lt;/strong&gt; 的持续优化，包括支持 Broker 端 SQL 过滤，也进一步增强了其在流处理领域的竞争力 [4] [5]。&lt;/p&gt;
&lt;h2 id="结论"&gt;结论&lt;/h2&gt;
&lt;p&gt;本周分布式消息系统领域呈现出蓬勃发展的态势，主要驱动力来自 AI 技术的普及和云原生架构的深化。各系统都在积极适应这些变化，通过引入创新功能（如 LiteTopic、Agentic Data Plane、mq9 协议）和进行深层架构重构（如 Kafka 的 KRaft、RabbitMQ 的 Khepri），以满足未来数据处理和通信的需求。存算分离和无盘化是当前重要的技术方向，AutoMQ 和 WarpStream 等新兴系统正引领这一潮流，而 Kafka 也在通过 KIP-1183 积极跟进。对于企业而言，选择合适的消息系统将越来越需要综合考虑其在 AI 场景的支持能力、云原生适应性以及架构的现代化程度。&lt;/p&gt;
&lt;h2 id="参考文献"&gt;参考文献&lt;/h2&gt;
&lt;p&gt;[1] Apache Kafka Blog. (2026, June 25). &lt;em&gt;Apache Kafka 4.3.1 Release Announcement&lt;/em&gt;. &lt;a href="https://kafka.apache.org/blog/2026/06/25/apache-kafka-4.3.1-release-announcement/"&gt;https://kafka.apache.org/blog/2026/06/25/apache-kafka-4.3.1-release-announcement/&lt;/a&gt;
[2] Alibaba Cloud. (2026, June 8). &lt;em&gt;Apache RocketMQ 5.5.0 Open Source LiteTopic - Dedicated Channel for Millions of AI Sessions&lt;/em&gt;. &lt;a href="https://www.alibabacloud.com/blog/apache-rocketmq-5-5-0-open-source-litetopic-dedicated-channel-for-millions-of-ai-sessions_603233"&gt;https://www.alibabacloud.com/blog/apache-rocketmq-5-5-0-open-source-litetopic-dedicated-channel-for-millions-of-ai-sessions_603233&lt;/a&gt;
[3] Apache RocketMQ. &lt;em&gt;LiteTopic - Apache RocketMQ&lt;/em&gt;. &lt;a href="https://rocketmq.apache.org/docs/domainModel/03litetopic/"&gt;https://rocketmq.apache.org/docs/domainModel/03litetopic/&lt;/a&gt;
[4] RabbitMQ. &lt;em&gt;Release Information&lt;/em&gt;. &lt;a href="https://www.rabbitmq.com/release-information"&gt;https://www.rabbitmq.com/release-information&lt;/a&gt;
[5] RabbitMQ Blog. (2026, April 23). &lt;em&gt;RabbitMQ 4.3 Highlights&lt;/em&gt;. &lt;a href="https://www.rabbitmq.com/blog/2026/04/23/rabbitmq-4.3-release"&gt;https://www.rabbitmq.com/blog/2026/04/23/rabbitmq-4.3-release&lt;/a&gt;
[6] Redpanda. (2026, June 18). &lt;em&gt;Adaptive write request scheduling in Redpanda&amp;rsquo;s Cloud Topics&lt;/em&gt;. &lt;a href="https://www.redpanda.com/blog/governing-ai-agents-in-production-whats-new-in-the-redpanda-agentic-data-plane"&gt;https://www.redpanda.com/blog/governing-ai-agents-in-production-whats-new-in-the-redpanda-agentic-data-plane&lt;/a&gt;
[7] RobustMQ. &lt;em&gt;Technical Blog&lt;/em&gt;. &lt;a href="https://robustmq.com/en/Blogs/index"&gt;https://robustmq.com/en/Blogs/index&lt;/a&gt;
[8] RobustMQ. (2026, May 15). &lt;em&gt;Broker + SDK: A Complete Solution for Agent Async Communication&lt;/em&gt;. &lt;a href="https://robustmq.com/en/Blogs/106"&gt;https://robustmq.com/en/Blogs/106&lt;/a&gt;
[9] AutoMQ. (2026, June 12). &lt;em&gt;AutoMQ Reaches 10K GitHub Stars as Diskless Kafka Gains Global Adoption&lt;/em&gt;. &lt;a href="https://www.automq.com/blog/automq-10k-stars-diskless-kafka-global-adoption"&gt;https://www.automq.com/blog/automq-10k-stars-diskless-kafka-global-adoption&lt;/a&gt;
[10] WarpStream. (2026, June 23). &lt;em&gt;A Brief Rant About the New Product Development Lifecycle&lt;/em&gt;. &lt;a href="https://www.warpstream.com/blog/a-brief-rant-about-the-new-product-development-lifecycle"&gt;https://www.warpstream.com/blog/a-brief-rant-about-the-new-product-development-lifecycle&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>