详解Minimax算法与α-β剪枝
在局面确定的双人对弈里,常采用博弈树搜索。我方追求更大的赢面,而对方会设法降低我方的赢面。由于局面确定,因此可以对赢面进行评估。我方往较大赢面的方向走,同时考虑对方的走法。由于对方的走法不确定,就假设对方会选择最大程度降低我方赢面的方向走,我方应规避那些对方可以大幅降低我方赢面的走法。
Minimax算法
称我方为MAX
,对方为MIN
,图示如下:
在局面确定的双人对弈里,常采用博弈树搜索。我方追求更大的赢面,而对方会设法降低我方的赢面。由于局面确定,因此可以对赢面进行评估。我方往较大赢面的方向走,同时考虑对方的走法。由于对方的走法不确定,就假设对方会选择最大程度降低我方赢面的方向走,我方应规避那些对方可以大幅降低我方赢面的走法。
称我方为MAX
,对方为MIN
,图示如下:
机器学习里经常需要用到向量微积分。向量微积分其实并不难,但大学数学一般不提,导致在看机器学习的一些推导时常常感觉疑惑。
机器学习里经常用到标量和向量、向量和向量的求导,其实只是把向量对应位置的元素进行求导。但是,这些元素的组织方式有两种,分别是分子布局和分母布局,二者并无本质上的差别,只是结果相差个转置。这两种布局都存在,初学者常常混淆。
例如求,其中是维列向量,是标量。这个求导就是把里每个元素分别对求导,但求导后是得到列向量还是行向量呢?
MNIST手写数字识别是机器学习中非常经典的问题,相当于编程语言界的“Hello World“。关于神经网络解决MNIST手写数字识别问题,可以参考这个视频:深度学习之神经网络的结构 Part 1 ver 2.0
视频中使用的是多层神经网络,为了简化问题,这里我们使用单层的网络结构。
参考之前的MNIST数据集解析,先对MNIST数据集进行解析:
从MNIST数据集官网可以下载MNIST数据集。
MNIST数据集以.gz格式压缩,Python可以直接读取而不需要解压缩:
import gzip
with gzip.open('t10k-images-idx3-ubyte.gz') as f:
buf = f.read()
MNIST数据集使 用二进制文件,而不是常规的图片文件格式。以t10k-images-idx3-ubyte为例,在官网有其结构说明:
[offset] [type] [value] [description]
0000 32 bit integer 0x00000803(2051) magic number
0004 32 bit integer 10000 number of images
0008 32 bit integer 28 number of rows
0012 32 bit integer 28 number of columns
0016 unsigned byte ?? pixel
0017 unsigned byte ?? pixel
........
xxxx unsigned byte ?? pixel