本文翻译自
理解神经网络的输出
黑盒的神奇之处其实很简单,如果你向它输入一张图像,它会输出三个数值;
一个理想化的完美神经网络,对于 "猫" 输出(1,0,0),对于 "狗" 输出(0,1,0),对于 "其他" 输出(0,0,1),
事实上即使一个训练的非常好的神经网络也可能达不到上述的完美输出;
比如,如果你输出一张猫的图像,”猫”标签输出的数值为 0.97,“狗”标签下的输出数值为 0.01,“其他”标签下的输出数值为 0.02。
输出数值可以理解为可能性概率;
比如说黑盒“认为”这张图像是 "猫" 的概率是 97%,很小的概率是 "狗" 或者是 "其他" 物种;
请注意输出数值之和一定为 1;
具体的这种问题归类于 image classification / 图像分类 问题:给定一张图像,你用最有可能的标签去给图像进行分类(猫,狗,或者其他);
理解神经网络的输入
现在你作为一名程序员,你可以使用数值来表示神经网络的输出;
但是你如何输入一张图像呢?
图像其实就是一个存放数值的数组。一个 256*256 三通道的图像其实就是 256*256*3=196608 个数值;
你使用图片浏览器来浏览 256*256 大小的图片,其实在内存里就是 196608 个数值构成的 continuous block / 连续块;
经过上述描述,我们知道输入有一点复杂,输入实际上有 196608 个数值,我们由此更新一下我们的黑盒模型。
 
我知道你在想什么,如果图像不是 256*256 的呢?
其实你可以通过以下步骤来把任何一张图像转换为 256*256 大小:
- Non-Square aspect ratio / 非正方形纵横比调整:如果输入图像不是正方形,你可以重新调整图像大小到256,然后从图像中间裁剪出 256*256 的像素大小;
 - Grayscale image / 灰度图:如果输入图像不是一个彩色图像,你可以通过拷贝灰度图到三个通道来获得三通道彩色图像;
 
大家使用很多不同种类的方法来转换图像到一个适合的尺寸(比如 256*256),但是正如我之前所说,我会让我们的流程变得简单,我不会使用这些各种各样的方法。需要注意的事情是任何一张图像可以被转换成你想要的尺寸,即使我们在裁剪或者调整大小的时候丢掉一些信息。
训练神经网络需要注意什么
黑盒模型有一些 knobs / 旋钮 来调整模型参数;
从技术角度来说,这些旋钮称之为 weights / 权重;
当这些旋钮处于正确的位置,神经网络就可以达到更好更正确的输出结果;
训练神经网络就是要找到正确的旋钮设置(或者权重);
如何训练神经网络
如果你有一个黑盒,但是不知道正确的旋钮设置,那么这个黑盒其实相当于没用的;
好消息是你可以通过训练神经网络来找到正确的旋钮设置。
训练神经网络和训练小孩特别像。你拿一个球给小孩看,然后告诉他这是一个球;
当你给他看了很多种球之后,小孩就会弄明白,球和球的形状有关,与它的颜色,文本或者尺寸无关;
然后你给小孩一个鸡蛋,问他这是什么,他回答是球。你纠正他这不是球,这是鸡蛋;当这个过程重复几次之后,这个小孩就可以辨别球和鸡蛋了。
为了训练一个神经网络,你给它几千个想让它学习的分类例子(比如猫,狗或者其他);
这种训练称之为 Supervised Learning / 监督学习,因为你提供给这个神经网络来自某个分类的图像,然后确切的告诉它,这张图像来自这个分类;
为了训练神经网络,我们需要三件事情:
1. Training data / 训练数据:
各种分类的数千张图像和它们期待的输出;
比如所有猫的图像,被期待输出为(1,0,0);
