Skip to content

Commit 9d4ac6b

Browse files
committed
doc: format issue
1 parent 594127a commit 9d4ac6b

File tree

4 files changed

+38
-2234
lines changed

4 files changed

+38
-2234
lines changed

notebooks/coding_projects/digital_processing_of_speech_signals/P2_HMM/00hidden_markov_model.ipynb

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"highlight-style: pygments\n",
2626
"date-format: full\n",
2727
"lang: zh\n",
28-
"bibliography: [../../../references.bib]\n",
28+
"bibliography: [./hmm.bib]\n",
2929
"csl: ./ieee.csl\n",
3030
"format: \n",
3131
" html:\n",
@@ -314,7 +314,7 @@
314314
"cell_type": "markdown",
315315
"metadata": {},
316316
"source": [
317-
"#### 什么是马尔可夫过程? {#sec:markov_process}\n",
317+
"#### 什么是马尔可夫过程? {#sec-markov-process}\n",
318318
"\n",
319319
"从词语本身的定义来看,马儿可夫过程(Markov Process)是指具备了马尔科夫性质的随机过程 [@LiHang_2022]。所以要理解什么是马尔可夫过程,无非就是要理解清楚这两个子概念:马尔可夫性质和随机过程。\n",
320320
"\n",
@@ -346,10 +346,10 @@
346346
">\n",
347347
">$$\n",
348348
">P(X_t|X_0, X_1, \\cdots, X_{t-1}) = P(X_t|X_{t-1}), \\quad t=1,2,\\cdots\n",
349-
">$$ {#eq:markov}\n",
349+
">$$ {#eq-markov}\n",
350350
">\n",
351351
"\n",
352-
"@eq:markov 用概率语言严谨定义了马尔可夫性 (Markov property),马尔可夫性是描述一个随机过程的,如果我事先知道或者先验地假设一个随机过程里面的概率就是有这个性质,那就是在说如果我都知道了$X_{t-1}$的具体值了,你再告诉我之前滞后的信息我认为根本没用,随机过程的内在规律都会去得到相同的 $X_t$ 分布(当然,不一定是相同值)。\n",
352+
"@eq-markov 用概率语言严谨定义了马尔可夫性 (Markov property),马尔可夫性是描述一个随机过程的,如果我事先知道或者先验地假设一个随机过程里面的概率就是有这个性质,那就是在说如果我都知道了$X_{t-1}$的具体值了,你再告诉我之前滞后的信息我认为根本没用,随机过程的内在规律都会去得到相同的 $X_t$ 分布(当然,不一定是相同值)。\n",
353353
"\n",
354354
"马尔可夫性也被成为无记忆性 (memorylessness) [@Markov_chain_2024]。\n",
355355
"\n",
@@ -385,7 +385,7 @@
385385
"\n",
386386
">$$\n",
387387
">P(X_t|X_0, X_1, \\cdots, X_{t-1}) = P(X_t|X_{t-1}, X_{t-2}, \\cdots, X_{t-M}), \\quad t=1,2,\\cdots\n",
388-
">$$ {#eq:markov_m}\n",
388+
">$$ {#eq-markov-m}\n",
389389
"\n",
390390
"\n",
391391
"而系统(system)和过程岁有区别,但是基本是同义词。在 Rabiner的论文 [@Rabiner_1989] 中,system拥有状态,也就是刚才说的X,系统的状态会变化。这个系统在论文中可以是 signal processing system, recognition systems等。过程可能更多是指这个系统状态变化的的过程,Rabiner并未严格区分术语 [@Rabiner_1989]。\n",
@@ -408,11 +408,11 @@
408408
"cell_type": "markdown",
409409
"metadata": {},
410410
"source": [
411-
"#### 一阶马尔可夫过程的特点是什么?请画图说明。 {#sec:first_order_markov}\n",
411+
"#### 一阶马尔可夫过程的特点是什么?请画图说明。 {#sec-first-order-markov}\n",
412412
"\n",
413413
"总结一下上文,一阶马尔可夫过程的特点包括\n",
414414
"1. **状态空间(State Space)相同**,也就是每一个$X_t$所有可能状态的集合都共享一个相同的集合。这是随机过程的基本定义。\n",
415-
"2. **满足一阶马尔可夫性**,即公式 @eq:markov 所描述的性质。这是马尔可夫过程的要求。\n",
415+
"2. **满足一阶马尔可夫性**,即公式 @eq-markov 所描述的性质。这是马尔可夫过程的要求。\n",
416416
"\n",
417417
"\n",
418418
"我们把这个贝叶斯网络(Bayesian Network),又称信念网络(Belief Network) [@Zhou_2016],通过有向无环图(Directed Acyclic Graph, DAG)表示如下:\n",
@@ -480,7 +480,7 @@
480480
"\n",
481481
"> 隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成的不可观测的状态随机序列,再由各个状态生成一个观测从而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列称为状态序列(state sequence);每个状态生成一个观测,而由此产生的观测的随机序列称为观测序列(observation sequence)。序列的每一个位置又可以看作是一个时刻。\n",
482482
"\n",
483-
"其中,马尔可夫 链就是上文 @sec:markov_process 我们说的马尔可夫过程。这个马尔可夫过程的状态空间我们是知道的,也能做出一些假设,但是在具体系统中我们无法直接观测,所以说是隐藏的。而观测序列产生了一个新的随机过程,这个过程我们是可以观测到的,所以叫做观测序列。\n",
483+
"其中,马尔可夫 链就是上文 @sec-markov-process 我们说的马尔可夫过程。这个马尔可夫过程的状态空间我们是知道的,也能做出一些假设,但是在具体系统中我们无法直接观测,所以说是隐藏的。而观测序列产生了一个新的随机过程,这个过程我们是可以观测到的,所以叫做观测序列。\n",
484484
"\n",
485485
"李航上面给出的定义只是文字定义,还没有进行形式化,李航第十章进一步的形式化定义如下 [@LiHang_2022]:\n",
486486
"\n",
@@ -749,11 +749,11 @@
749749
"> (3) 预测问题,也称为解码(decoding)问题。已知模型 $\\lambda = (A, B, \\pi)$ 和观测序列 $O = (o_1, o_2, ..., o_T)$,求对给定观测序列条件概率 $P(I|O)$ 最大的状态序列 $I = (i_1, i_2, ..., i_T)$。即使得给定观测序列,求最有可能对应的状态序列。\n",
750750
"\n",
751751
"\n",
752-
"根据李航上一章EM算法的内容,(1)里面的概率也叫做不完全数据(incomplete-data)的似然函数。由于我们有$T$个时间步,还有N个和M个可能的状态和观测,所以怎么高效计算出这个似然概率也是个问题。需要使用前向后向算法, 见回答 @sec:hmm_prob\n",
752+
"根据李航上一章EM算法的内容,(1)里面的概率也叫做不完全数据(incomplete-data)的似然函数。由于我们有$T$个时间步,还有N个和M个可能的状态和观测,所以怎么高效计算出这个似然概率也是个问题。需要使用前向后向算法, 见回答 @sec-hmm-prob\n",
753753
"\n",
754-
"由于不完全数据的似然函数比起完全数据的似然函数更难进行极大似然估计,所以问题(2)也是一个很重要的问题。Baum-Welch (HMM的EM算法)就是用来解决这个问题的, 见 @sec:hmm_learn\n",
754+
"由于不完全数据的似然函数比起完全数据的似然函数更难进行极大似然估计,所以问题(2)也是一个很重要的问题。Baum-Welch (HMM的EM算法)就是用来解决这个问题的, 见 @sec-hmm-learn\n",
755755
"\n",
756-
"问题(3)则是HMM的一个重要目的,将隐藏的状态序列I解码出来。需要使用到维特比算法(Viterbi algorithm) , 见 @sec:hmm_decode\n",
756+
"问题(3)则是HMM的一个重要目的,将隐藏的状态序列I解码出来。需要使用到维特比算法(Viterbi algorithm) , 见 @sec-hmm-decode\n",
757757
"\n",
758758
"Rabiner 的论文中同样介绍了这三个问题,但是先介绍了解码问题再介绍学习问题,其论文的符号Q就是李航的符号I [@Rabiner_1989]。Rabiner对于解码问题的定义更加宽泛一些,只是要求解码出来的状态序列\"optimal in some meaningful sense\" 或者 \"best explains the observations\", 并且Rabiner强调并没有所谓正确的一个状态序列,特别是在语音信号处理中有多种合理的最优性指标可以评价解码结果[@Rabiner_1989]。"
759759
]
@@ -762,7 +762,7 @@
762762
"cell_type": "markdown",
763763
"metadata": {},
764764
"source": [
765-
"#### 给定隐马尔可夫模型λ,如何计算该模型生成某个观察序列 O 的概率?请给出数学公式及对应的推导。(5 分){#sec:hmm_prob}\n",
765+
"#### 给定隐马尔可夫模型λ,如何计算该模型生成某个观察序列 O 的概率?请给出数学公式及对应的推导。(5 分){#sec-hmm-prob}\n",
766766
"\n",
767767
"首先我们来明确一下,这个问题是上文提到的概率计算问题,也就是说给定隐马尔可夫模型(HMM)$\\lambda=(A,B,pi)$,观察序列 $O=(o_1,o_2,...,o_T)$,我们想要求模型参数生成了这个观察序列的概率 $P(O|\\lambda)$。\n",
768768
"\n",
@@ -905,14 +905,14 @@
905905
"cell_type": "markdown",
906906
"metadata": {},
907907
"source": [
908-
"#### 给定隐马尔可夫模型λ、以及对应的观察序列 O,如何得到该模型产生该观察序列的最优隐含状态的序列 Q?请给出数学公式及对应的推导。(5 分) {#sec:hmm_decode}"
908+
"#### 给定隐马尔可夫模型λ、以及对应的观察序列 O,如何得到该模型产生该观察序列的最优隐含状态的序列 Q?请给出数学公式及对应的推导。(5 分) {#sec-hmm-decode}"
909909
]
910910
},
911911
{
912912
"cell_type": "markdown",
913913
"metadata": {},
914914
"source": [
915-
"#### 给你一堆观察数据 O1,O2,…,ON,并假设这些观察数据符合隐马尔可夫过程的假设,如何估计出一个最优的隐马尔可夫模型λ,该模型产生这些观察数据的概率最优。(5 分){#sec:hmm_learn}"
915+
"#### 给你一堆观察数据 O1,O2,…,ON,并假设这些观察数据符合隐马尔可夫过程的假设,如何估计出一个最优的隐马尔可夫模型λ,该模型产生这些观察数据的概率最优。(5 分){#sec-hmm-learn}"
916916
]
917917
},
918918
{
@@ -932,7 +932,7 @@
932932
"\n",
933933
"1. 首先我们来描述一下这篇论文要解决什么问题,问题的背景是什么?\n",
934934
"\n",
935-
"这篇文章提出了 Ctrl-G 这个方法,这个方法作者也说它是一种神经符号主义(neuro-symbolic)的框架。(就是既要用神经网络认知模型,也要用符号逻辑做逻辑约束。)方法的目的是用于可靠地控制大型语言模型(LLM)的生成,使其符合逻辑约束。具体而言,LLM可以是任何的别人预训练好的LLM,而逻辑约束是用确定性有穷自动机(DFA)来表示的(还记得吗?我们上文 @sec:first_order_markov 介绍了时间齐次马尔可夫链与概率自动机的关系)。具体解决这个问题时,Ctrl-G 结合了 LLM 和隐马尔可夫模型(HMM)。\n",
935+
"这篇文章提出了 Ctrl-G 这个方法,这个方法作者也说它是一种神经符号主义(neuro-symbolic)的框架。(就是既要用神经网络认知模型,也要用符号逻辑做逻辑约束。)方法的目的是用于可靠地控制大型语言模型(LLM)的生成,使其符合逻辑约束。具体而言,LLM可以是任何的别人预训练好的LLM,而逻辑约束是用确定性有穷自动机(DFA)来表示的(还记得吗?我们上文 @sec-first-order-markov 介绍了时间齐次马尔可夫链与概率自动机的关系)。具体解决这个问题时,Ctrl-G 结合了 LLM 和隐马尔可夫模型(HMM)。\n",
936936
"\n",
937937
"这篇论文的实验是针对LLM的可控生成任务的基准测试(constrained generation benchmarks)上去做的,具体包括常识生成(Commonsense Generation),文本填充(Text Infilling),以及交互式的文本编辑(Interactive Text Editing)。实验表明,Ctrl-G 在文本编辑任务中优于 GPT-4,并在 Commonsense Generation 和文本填充基准测试中取得了优异的成绩。此外,Ctrl-G 还可以应用于更广泛的任务,例如提高 LLM 逻辑推理的能力。\n",
938938
"\n",
@@ -955,7 +955,7 @@
955955
"\n",
956956
"3. 文中使用的HMM算法是否是HMM的改进版(*是否存在方法上的改进*),还是直接使用了原版的HMM(Vanilla HMM)?\n",
957957
"\n",
958-
"Ctrl-G 中使用的 HMM 的概率计算方法正是直接使用到了我们上文 @sec:hmm_prob 提到的前向算法。\n",
958+
"Ctrl-G 中使用的 HMM 的概率计算方法正是直接使用到了我们上文 @sec-hmm-prob 提到的前向算法。\n",
959959
"\n",
960960
"然而从大模型蒸馏学习HMM的算法并不是我们这里学习的普通的EM算法,而是作者自己的上一篇ICML 2023论文 [@Zhang_2023]提出的算法,这篇论文的算法也是使用了EM算法,但是具体来说HMM被当做是probabilistic circuits,使用Juice.jl 框架来学习 [@Dang_2021],而训练过程采用了latent variable distillation technique [@Liu_2022] 提高速度,最后得到一个2-B的HMM。\n",
961961
"\n",
@@ -1626,7 +1626,9 @@
16261626
"## 参考文献 References {#sec-ref-list}\n",
16271627
"\n",
16281628
"::: {#refs}\n",
1629-
":::"
1629+
"\n",
1630+
":::\n",
1631+
"\n"
16301632
]
16311633
},
16321634
{
@@ -1652,7 +1654,7 @@
16521654
],
16531655
"metadata": {
16541656
"kernelspec": {
1655-
"display_name": "fastai",
1657+
"display_name": "yuequ",
16561658
"language": "python",
16571659
"name": "python3"
16581660
},
@@ -1666,7 +1668,7 @@
16661668
"name": "python",
16671669
"nbconvert_exporter": "python",
16681670
"pygments_lexer": "ipython3",
1669-
"version": "3.10.14"
1671+
"version": "3.10.12"
16701672
}
16711673
},
16721674
"nbformat": 4,

notebooks/index.ipynb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@
4848
"source": [
4949
"### 关于Quarto和nbdev一些需要配置的地方\n",
5050
"\n",
51+
"尽量保持旧版本\n",
52+
"\n",
53+
"quarto --version\n",
54+
"1.5.57\n",
55+
"pip show nbdev fastcore\n",
56+
"2.3.32\n",
57+
"1.7.19\n",
58+
"\n",
5159
"```sh\n",
5260
"nbdev_install_quarto\n",
5361
"quarto install tinytex\n",
@@ -69,7 +77,12 @@
6977
" - VSCode也用的是 MathJax https://stackoverflow.com/questions/62879232/how-do-i-use-latex-in-a-jupyter-notebook-inside-visual-studio-code\n",
7078
"\n",
7179
"- markdown语法:\n",
72-
" \n"
80+
"\n",
81+
" \n",
82+
"\n",
83+
"#### Pandoc语法学习\n",
84+
"\n",
85+
"https://quarto.org/docs/authoring/cross-references.html\n"
7386
]
7487
},
7588
{

notebooks/theory_assignments/A8/P_Assignment8_yecanming.ipynb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"highlight-style: pygments\n",
2626
"date-format: full\n",
2727
"lang: zh\n",
28-
"bibliography: [../../coding_projects/digital_processing_of_speech_signals/hmm.bib]\n",
28+
"bibliography: [../../coding_projects/digital_processing_of_speech_signals/P2_HMM/hmm.bib]\n",
2929
"format: \n",
3030
" html:\n",
3131
" code-fold: false\n",
@@ -1176,7 +1176,7 @@
11761176
],
11771177
"metadata": {
11781178
"kernelspec": {
1179-
"display_name": "fastai",
1179+
"display_name": "yuequ",
11801180
"language": "python",
11811181
"name": "python3"
11821182
},
@@ -1190,7 +1190,7 @@
11901190
"name": "python",
11911191
"nbconvert_exporter": "python",
11921192
"pygments_lexer": "ipython3",
1193-
"version": "3.10.14"
1193+
"version": "3.10.12"
11941194
}
11951195
},
11961196
"nbformat": 4,

0 commit comments

Comments
 (0)