Xiaowu/20230104 (#761)
* Update 2.3 沟通能力.md * update * Update 2.3 沟通能力.md * Update 2.3 沟通能力.md * add files * del big files * Update 2.3 沟通能力.md * uopdate folder name * ren folders * update
После Ширина: | Высота: | Размер: 68 KiB |
После Ширина: | Высота: | Размер: 152 KiB |
После Ширина: | Высота: | Размер: 89 KiB |
После Ширина: | Высота: | Размер: 86 KiB |
После Ширина: | Высота: | Размер: 78 KiB |
После Ширина: | Высота: | Размер: 90 KiB |
После Ширина: | Высота: | Размер: 72 KiB |
После Ширина: | Высота: | Размер: 124 KiB |
После Ширина: | Высота: | Размер: 172 KiB |
После Ширина: | Высота: | Размер: 144 KiB |
После Ширина: | Высота: | Размер: 82 KiB |
После Ширина: | Высота: | Размер: 54 KiB |
После Ширина: | Высота: | Размер: 90 KiB |
После Ширина: | Высота: | Размер: 89 KiB |
После Ширина: | Высота: | Размер: 134 KiB |
После Ширина: | Высота: | Размер: 116 KiB |
После Ширина: | Высота: | Размер: 97 KiB |
После Ширина: | Высота: | Размер: 92 KiB |
После Ширина: | Высота: | Размер: 98 KiB |
После Ширина: | Высота: | Размер: 194 KiB |
После Ширина: | Высота: | Размер: 213 KiB |
После Ширина: | Высота: | Размер: 136 KiB |
После Ширина: | Высота: | Размер: 124 KiB |
После Ширина: | Высота: | Размер: 136 KiB |
|
@ -0,0 +1,148 @@
|
|||
|
||||
## 《智能之门》- 学习“深度学习”知识的痛点及解决办法
|
||||
|
||||
<img src="./img/cover.png"/>
|
||||
|
||||
上回书说到,Xiaowu 根据自己的学习经历写下了《智能之门》一书,而在此之前,Xiaowu 也是对深度学习一无所知的。这就给广大读者一个非常强的提示:我如果按照 Xiaowu 的学习经历走一遍下来,是不是也能彻底掌握深度学习知识呢?与 Xiaowu 当初的经历不同的是,读者走的这条路,已经是“先辈们”(Xiaowu)逢山开路遇水搭桥的平凡之路了,应该可以更顺利些。
|
||||
|
||||
反观现在市面上的很多关于深度学习与神经网络的书,大致可以分为两类:
|
||||
|
||||
1. 偏重理论。
|
||||
|
||||
从知识的难度看,可以分为四个等级:
|
||||
- Factual Knowledge 事实知识
|
||||
- Conceptual Knowledge 概念知识
|
||||
- Procedural Knowledge 过程知识
|
||||
- Meta-cognitive Knowledge 元认知知识
|
||||
|
||||
这类书大多是罗列公式和概念,没有推导,没有解释,所以作者们是把深度学习的知识当作事实知识来写的。但实际上,要想彻底理解深度学习的知识,至少需要上升到第二等级(概念知识)甚至第三等级(过程知识)。那么我们如何才能把深度学习的知识上得到高的等级来讲解呢?
|
||||
|
||||
2. 偏重实践。
|
||||
|
||||
这类书的作者们大多是绑定在一个深度学习框架上,比如 Tensor Flow,PyTorch,MXNet 等等。读者能学习到的是如何使用这些框架工具来搭建一个正确的神经网络模型,然后训练并推理。这种学习的结果是知其然不知其所以然,比如:读者们只知道在两个线性层之间要有一个激活层,那么为什么这样就可以解决非线性问题呢?
|
||||
|
||||
《智能之门》一书的作者们,带着上面这些问题,深入高校,通过与高校老师和学生面对面的交流后,总结出了学习“深度学习”知识的六大痛点,并提出了解决办法。这些写作思想贯彻于全书之中。
|
||||
|
||||
<img src="img/Slide9.jpg"/>
|
||||
|
||||
|
||||
### 痛点一
|
||||
|
||||
**基础不牢,开篇就讲 DNN、CNN、RNN,导致入门门坎过高,学生不易理解。**
|
||||
|
||||
**解决办法:循序渐进,从一个神经元开始。**
|
||||
|
||||
请大家看下表,一个神经元(放大绘制的),第二个只是多了一个输出,第三个多了一个分类函数,后面增加到三个神经元加一个三分类函数;在后面就是两层的神经网络,根据第二层的形态不同而完成不同的任务;再后面才开始讲 DNN、CNN、RNN。
|
||||
|
||||
|网络结构|网络结构|
|
||||
|--|--|
|
||||
|<img src="img/setup1.png"/>|<img src="img/setup2.png"/>|
|
||||
|单入单出一层:一元线性回归|多入单出一层:多元线性回归|
|
||||
|<img src="img/BinaryClassifierNN.png"/>|<img src="img/MultipleClassifierNN.png"/>|
|
||||
|多入单出一层:线性二分类|多入多出一层:线性多分类|
|
||||
|<img src="img/nn.png"/>|<img src="img/xor_nn.png"/>|
|
||||
|单入单出两层:一元非线性回归/拟合|多入单出两层:非线性二分类|
|
||||
|<img src="img/nn11.png"/>|<img src="img/nn3.png"/>|
|
||||
|多入多出两层:非线性多分类|多入多出三层:非线性多分类|
|
||||
|<img src="img/mnist_net.png"/>|<img src="img/bn_mnist.png"/>|
|
||||
|多层全连接网络:非线性多分类|非线性多分类:带批归一化层的多层全连接网络|
|
||||
|<img src="img/dropout_net.png"/>|<img src="img/conv_net.png"/>|
|
||||
|带丢弃层的多层全连接网络:非线性多分类|简单的卷积神经网络:非线性多分类|
|
||||
|<img src="img/mnist_net18.png"/>|<img src="img/bptt_simple.png"/>|
|
||||
|复杂的卷积神经网络:非线性多分类|单向循环神经网络:非线性多分类|
|
||||
|<img src="img/bi_rnn_net_right.png"/>|<img src="img/deep_rnn_net.png"/>|
|
||||
|双向循环神经网络:非线性多分类|深度循环神经网络:非线性多分类|
|
||||
|
||||
这种循序渐进的讲解,从简到到复杂,符合绝大多数人的学习习惯。
|
||||
|
||||
|
||||
### 痛点二
|
||||
|
||||
**缺乏案例,使用工业数据集训练模型,导致不知道什么是最佳结果,失去学习目标。**
|
||||
|
||||
**解决办法:自力更生,自己创建训练数据集。**
|
||||
|
||||
为什么工业数据不能用呢?因为里面的噪音太大了,导致用神经网络训练了很长时间也不能得到理想的分类效果,读者们就会产生怀疑:是不是神经网络有问题?或者是哪里少了什么组件?
|
||||
|
||||
请大家看下表:
|
||||
|
||||
|回归样本|分类样本|
|
||||
|--|--|
|
||||
|<img src="img/Slide23.jpg">|<img src="img/Slide25.jpg">|
|
||||
|<img src="img/Slide24.jpg">|<img src="img/Slide26.jpg">|
|
||||
|<img src="img/Slide27.jpg">|<img src="img/Slide30.jpg">|
|
||||
|<img src="img/Slide28.jpg">|<img src="img/Slide29.jpg">|
|
||||
|<img src="img/Slide31.jpg">|<img src="img/Slide32.jpg">|
|
||||
|
||||
这里做的数据集都很“干净”,很少有噪音,这就决定了只要我们采用合适的网络结构,一定可以得到非常准确的回归和分类结果(至少在 98%)以上。而使用工业数据集,好的情况下准确度只有 90% 左右。
|
||||
|
||||
最关键的是,在创建这些数据集时是有目的性的:我想让神经网络达到什么效果,如果它没达到,说明我的想法是错误的;如果达到了,证明我理解对了。这对学习理解有巨大的帮助来建立自信心。
|
||||
|
||||
### 痛点三
|
||||
|
||||
**跳过原理,直接使用已有深度学习框架,导致培养出来的只是调参工程师。**
|
||||
|
||||
**解决办法:庖丁解牛,动手实现 mini 框架。**
|
||||
|
||||
<img src="img/Slide37.jpg">
|
||||
|
||||
整本书的每个章节都有代码,由浅入深。最开始的代码只是实现简单直接点神经网络,到了后面学习的概念越来越多,逐步都变成组件加入到逐步形成的 NeuralNet 框架之中。框架本身的代码也不复杂,几百行搞定,这比 TensorFlow、PyTorch 动辄几万行的代码相比,以学习原理为目的的难易程度可想而知。
|
||||
|
||||
### 痛点四
|
||||
|
||||
**公式堆砌,没有推导过程,导致知其然不知其所以然。**
|
||||
|
||||
**解决办法:化繁为简,把理论公式用实例化推导。**
|
||||
|
||||
我们先看看一般书籍上的关于反向传播的四大公式:
|
||||
|
||||
<img src="img/Slide39.jpg">
|
||||
|
||||
My God! 这是啥?符号怪怪的,那么多上标下标,还有多层括号,如何理解?
|
||||
|
||||
再看看《智能之门》书中的公式推导:
|
||||
|
||||
<img src="img/Slide40.jpg">
|
||||
|
||||
1. 有图!正向计算和反向传播都清清楚楚地画在那里,顺藤摸瓜。
|
||||
2. 公式简单!每个公式推导都是根据上面的图中的箭头线来的,而且使用了实例化推导的方式。
|
||||
|
||||
**扫盲:什么是实例化推导?**
|
||||
|
||||
一般的公式理论推导时要考虑到很多种情况,假设每一步都是可以解决所有情况的。
|
||||
|
||||
而实例化推导,指的是使用具体的数字代替普遍适用的符号。比如,使用三个样本实例做推演,或者假设第二层网络结构(W2,B2)只有三个神经元。先把矩阵变成三行实例,最后再把结果合并成一个矩阵。
|
||||
|
||||
其基本原理是老子(不是Xiaowu)所说的:一生二,二生三,三生万物。也就是“三”基本可以代表普遍状态了。
|
||||
|
||||
### 痛点五
|
||||
|
||||
**资源紧缺,要求必须有GPU,导致给读者自学和上机实验带来困难。**
|
||||
|
||||
**解决办法:以小见大,使用 CPU 也可学习神经网络知识。**
|
||||
|
||||
很多人没有搞清楚,一味地被那些框架带跑了节奏:你是要学习原理,不是要训练一个大模型,那么你要 GPU 干什么?
|
||||
|
||||
前面说了,我们自己创建的样本很干净,特征维度都很少(不大于 5),数据量也不大(小于2000),那么用一个 CPU 就足够了。而且为了原理讲解,我们的模型也很简单,宽度和深度都不大。
|
||||
|
||||
稍微有些慢的地方就是后面要学习的 CNN、RNN,由于计算繁琐,所以训练要求时间较长,但是可以用算法优化、运行时编译等办法来提高速度。
|
||||
|
||||
### 痛点六
|
||||
|
||||
**没有代码,无法理解工作过程,导致神经网络被说成是黑匣子,不可解释。**
|
||||
|
||||
**解决办法:抽丝剥茧,以可视化手段让神经网络变得可以解释。**
|
||||
|
||||
请看下表:
|
||||
|
||||
|基本概念和回归工作原理|分类工作原理|
|
||||
|--|--|
|
||||
|<img src="img/Slide46.jpg">|<img src="img/Slide49.jpg">|
|
||||
|<img src="img/Slide47.jpg">|<img src="img/Slide51.jpg">|
|
||||
|<img src="img/Slide48.jpg">|<img src="img/Slide53.jpg">|
|
||||
|<img src="img/Slide50.jpg">|<img src="img/Slide52.jpg">|
|
||||
|<img src="img/Slide56.jpg">|<img src="img/Slide54.jpg">|
|
||||
|
||||
所有的基本概念和工作原理,在《智能之门》所对应的 GitHub 上都有真实的 Python 代码来做示例,读者可以自行运行代码得到图像,也可以根据自己的理解改动代码,看看结果是否符合预期。而这些代码,无论是前向计算还是反向传播,都是通过公式推导的结果来实现的,这样读者可以对公式有更深刻的理解。
|
||||
|
||||
好了,不多说了,《智能之门》全书 400 多页,全彩印刷,因为入选了“二十一世纪人工智能教材”系列,所以定价不能太高,只有 69 元,一般网站上优惠不到 60 元就可以买到,这要是别的商业出版社,至少定价 120 元!
|
До Ширина: | Высота: | Размер: 68 KiB После Ширина: | Высота: | Размер: 68 KiB |
До Ширина: | Высота: | Размер: 114 KiB После Ширина: | Высота: | Размер: 114 KiB |
До Ширина: | Высота: | Размер: 91 KiB После Ширина: | Высота: | Размер: 91 KiB |
До Ширина: | Высота: | Размер: 111 KiB После Ширина: | Высота: | Размер: 111 KiB |
До Ширина: | Высота: | Размер: 94 KiB После Ширина: | Высота: | Размер: 94 KiB |
До Ширина: | Высота: | Размер: 88 KiB После Ширина: | Высота: | Размер: 88 KiB |
До Ширина: | Высота: | Размер: 104 KiB После Ширина: | Высота: | Размер: 104 KiB |
До Ширина: | Высота: | Размер: 81 KiB После Ширина: | Высота: | Размер: 81 KiB |
До Ширина: | Высота: | Размер: 72 KiB После Ширина: | Высота: | Размер: 72 KiB |
До Ширина: | Высота: | Размер: 66 KiB После Ширина: | Высота: | Размер: 66 KiB |
До Ширина: | Высота: | Размер: 90 KiB После Ширина: | Высота: | Размер: 90 KiB |
До Ширина: | Высота: | Размер: 92 KiB После Ширина: | Высота: | Размер: 92 KiB |
|
@ -8,6 +8,9 @@
|
|||
|
||||
木头加入微软就是走的 Industry Hire 渠道,只要不是刚踏出校门的学生寻找第一份工作,就都要走这个渠道。简历能被 HR(Human Resoruce,人力资源)看到,是一件非常幸运的事(如何写简历不在本书的讨论范围之内)。木头就很幸运,几个关键的技术点正好符合 JD(Job Description,职位描述),于是才有了下面的故事......
|
||||
|
||||
<img src="img/Slide3.JPG"/>
|
||||
|
||||
|
||||
### 2.1.1 第一轮面试
|
||||
|
||||
某年 10 月 20 日,18:00 下班后,某大厦 4 层木头的办公地点。
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
故事就写到这里吧,下面总结一下微软这样的公司需要什么样的人做 SDE。
|
||||
|
||||
<img src="img/Slide3.JPG"/>
|
||||
<img src="img/Slide4.JPG"/>
|
||||
|
||||
### 2.2.1 技能点是否符合 JD 要求
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
在木头的面试中,有过这样一道题,如图 2.3.1 所示。
|
||||
|
||||
<img src="img/Slide4.JPG"/>
|
||||
<img src="img/Slide5.JPG"/>
|
||||
|
||||
图 2.3.1 算法与代码能力
|
||||
|
||||
|
@ -109,7 +109,7 @@ def method_3_sort(data):
|
|||
4. 从位置 1 取出数字 5,放到位置 5;
|
||||
5. 从位置 5 取出数字 1,放到位置 1,但发现位置 1 上已经是 1 了,是重复数字。
|
||||
|
||||
<img src="img/Slide5.JPG"/>
|
||||
<img src="img/Slide6.JPG"/>
|
||||
|
||||
图 2.3.2 追溯法
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
## 2.4 建模与设计能力
|
||||
|
||||
<img src="img/Slide6.JPG"/>
|
||||
<img src="img/Slide7.JPG"/>
|
||||
|
||||
图 2.4.1 建模
|
||||
|
||||
|
@ -210,7 +210,7 @@ class RibukCube():
|
|||
|
||||
这个问题需要有一定的系统设计能力了
|
||||
|
||||
<img src="img/Slide7.JPG"/>
|
||||
<img src="img/Slide8.JPG"/>
|
||||
|
||||
图 2.4.2 股票预测系统设计
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
## 2.7 软件工程师在微软
|
||||
## 2.5 软件工程师在微软
|
||||
|
||||
### 2.7.1 定义、级别、职务
|
||||
### 2.5.1 定义、级别、职务
|
||||
|
||||
#### 定义 Definition
|
||||
|
||||
|
@ -16,11 +16,11 @@
|
|||
|
||||
#### 阶段 Stage
|
||||
|
||||
微软的软件工程师的级别划分如图 2.8.1 所示。
|
||||
微软的软件工程师的级别划分如图 2.5.1 所示。
|
||||
|
||||
<img src="img/Slide25.JPG"/>
|
||||
<img src="img/Slide9.JPG"/>
|
||||
|
||||
图 2.8.1 微软软件工程师的级别
|
||||
图 2.5.1 微软软件工程师的级别
|
||||
|
||||
从阶段看,一共有 9 个,所以后面会简称为“几段”(类似围棋选手级别名词)。在有些区域是有“一段”的,比如微软苏州,但是微软北京都是从“二段”开始。
|
||||
|
||||
|
@ -57,13 +57,13 @@ Discipline 原意是知识领域,可以引申为角色。前面也说过,在
|
|||
|
||||
- Manager,大领导,管理 IC 和 Lead 并有 Report 关系,一般具有 Principle 段位。
|
||||
|
||||
### 2.7.2 主要工作考核指标
|
||||
### 2.5.2 主要工作考核指标
|
||||
|
||||
微软对软件工程师的主要考核有六个大项,如图 2.7.2 所示。
|
||||
微软对软件工程师的主要考核有六个大项,如图 2.5.2 所示。
|
||||
|
||||
<img src="img/Slide27.JPG"/>
|
||||
<img src="img/Slide10.JPG"/>
|
||||
|
||||
图 2.7.2 微软工程师的考核指标
|
||||
图 2.5.2 微软工程师的考核指标
|
||||
|
||||
下面以“二段”为例,介绍一下每个大项中包含的具体内容。
|
||||
|
||||
|
@ -73,9 +73,9 @@ Discipline 原意是知识领域,可以引申为角色。前面也说过,在
|
|||
|
||||
对于“二段”,有以下具体要求:
|
||||
|
||||
<img src="img/Slide28.JPG"/>
|
||||
<img src="img/Slide11.JPG"/>
|
||||
|
||||
图 2.7.3 产品和服务设计
|
||||
图 2.5.3 产品和服务设计
|
||||
|
||||
从内容上看,这一项要求软件工程师具备 PM 的一些基本素质,这里的“设计”不是技术上的,而是功能上的。需要在横向上对产品和服务的有基本的了解,在纵向上对上下游合作者有基本的了解。
|
||||
|
||||
|
@ -85,9 +85,9 @@ Discipline 原意是知识领域,可以引申为角色。前面也说过,在
|
|||
|
||||
对于“二段”,有以下具体要求:
|
||||
|
||||
<img src="img/Slide29.JPG"/>
|
||||
<img src="img/Slide12.JPG"/>
|
||||
|
||||
图 2.7.4 技术设计和实现
|
||||
图 2.5.4 技术设计和实现
|
||||
|
||||
这一项要求首先有设计,哪怕是很简单的设计,或者口头交流,得到大家的认可之后,再继续进行开发工作。对于这个阶段的软件工程师而言,应该是使用已经定义好的接口进行局部功能的设计与开发,尽量通过看代码、查文档、向资深同事咨询等方式,来充分了解技术背景。
|
||||
|
||||
|
@ -97,9 +97,9 @@ Discipline 原意是知识领域,可以引申为角色。前面也说过,在
|
|||
|
||||
对于“二段”,有以下具体要求:
|
||||
|
||||
<img src="img/Slide30.JPG"/>
|
||||
<img src="img/Slide13.JPG"/>
|
||||
|
||||
图 2.7.5 代码质量和验证
|
||||
图 2.5.5 代码质量和验证
|
||||
|
||||
这一项强调了代码 review(审查)的重要性,一方面要审查别人的代码,另一方面让别人审查自己的代码,主要是在代码风格、命名规范、与已有代码的契合程度等方面。另一方面,代码逻辑的正确性需要由单元测试做保证,也避免将来别人新加入的代码破坏你的代码逻辑。
|
||||
|
||||
|
@ -110,9 +110,9 @@ Discipline 原意是知识领域,可以引申为角色。前面也说过,在
|
|||
|
||||
对于“二段”,有以下具体要求:
|
||||
|
||||
<img src="img/Slide31.JPG"/>
|
||||
<img src="img/Slide14.JPG"/>
|
||||
|
||||
图 2.7.6 工程生命周期
|
||||
图 2.5.6 工程生命周期
|
||||
|
||||
|
||||
这一项把代码和工程结合起来,相当于是软件工程的具体实践。
|
||||
|
@ -123,9 +123,9 @@ Discipline 原意是知识领域,可以引申为角色。前面也说过,在
|
|||
|
||||
对于“二段”,有以下具体要求:
|
||||
|
||||
<img src="img/Slide32.JPG"/>
|
||||
<img src="img/Slide15.JPG"/>
|
||||
|
||||
图 2.7.7 高效的团队合作
|
||||
图 2.5.7 高效的团队合作
|
||||
|
||||
在团队环境中积极行动,提高团队整体的效率、影响力和士气。跨团队、产品/服务或平台边界积极工作,以共享信息和技术,并确保同行团队目标一致。
|
||||
|
||||
|
@ -135,18 +135,18 @@ Discipline 原意是知识领域,可以引申为角色。前面也说过,在
|
|||
|
||||
持续而有力地显示出对整个产品或服务的质量和完整性以及最终用户体验的责任感。保持一种自豪感和工艺感,使我们的产品具有美感和技术价值。
|
||||
|
||||
<img src="img/Slide33.JPG"/>
|
||||
<img src="img/Slide16.JPG"/>
|
||||
|
||||
图 2.7.8 对产品和服务的责任感
|
||||
图 2.5.8 对产品和服务的责任感
|
||||
|
||||
|
||||
### 2.7.3 技术设计与实现的进阶
|
||||
### 2.5.3 技术设计与实现的进阶
|
||||
|
||||
在 2.7.1 小节中描述的都是针对“二段”软件工程师的要求,
|
||||
在 2.5.1 小节中描述的都是针对“二段”软件工程师的要求,
|
||||
|
||||
<img src="img/Slide34.JPG"/>
|
||||
<img src="img/Slide17.JPG"/>
|
||||
|
||||
图 2.7.9 技术设计与实现的进阶
|
||||
图 2.5.9 技术设计与实现的进阶
|
||||
|
||||
|
||||
#### SDE - 模块级别
|
После Ширина: | Высота: | Размер: 54 KiB |
До Ширина: | Высота: | Размер: 156 KiB После Ширина: | Высота: | Размер: 156 KiB |
До Ширина: | Высота: | Размер: 106 KiB После Ширина: | Высота: | Размер: 106 KiB |
До Ширина: | Высота: | Размер: 123 KiB После Ширина: | Высота: | Размер: 123 KiB |
До Ширина: | Высота: | Размер: 143 KiB После Ширина: | Высота: | Размер: 143 KiB |
До Ширина: | Высота: | Размер: 144 KiB После Ширина: | Высота: | Размер: 144 KiB |
До Ширина: | Высота: | Размер: 96 KiB После Ширина: | Высота: | Размер: 96 KiB |
До Ширина: | Высота: | Размер: 113 KiB После Ширина: | Высота: | Размер: 113 KiB |
До Ширина: | Высота: | Размер: 147 KiB После Ширина: | Высота: | Размер: 147 KiB |
До Ширина: | Высота: | Размер: 100 KiB После Ширина: | Высота: | Размер: 100 KiB |
После Ширина: | Высота: | Размер: 100 KiB |
После Ширина: | Высота: | Размер: 88 KiB |
После Ширина: | Высота: | Размер: 84 KiB |
До Ширина: | Высота: | Размер: 100 KiB После Ширина: | Высота: | Размер: 100 KiB |
До Ширина: | Высота: | Размер: 98 KiB После Ширина: | Высота: | Размер: 98 KiB |
До Ширина: | Высота: | Размер: 61 KiB После Ширина: | Высота: | Размер: 61 KiB |
До Ширина: | Высота: | Размер: 117 KiB После Ширина: | Высота: | Размер: 117 KiB |
До Ширина: | Высота: | Размер: 102 KiB После Ширина: | Высота: | Размер: 102 KiB |
До Ширина: | Высота: | Размер: 142 KiB После Ширина: | Высота: | Размер: 142 KiB |
|
@ -0,0 +1,18 @@
|
|||
|
||||
|
||||
|
||||
<img src="img/Slide1.JPG"/>
|
||||
|
||||
(插入一些说明性文字,重点在介绍上下文,串连)
|
||||
|
||||
<img src="img/Slide2.JPG"/>
|
||||
|
||||
|
||||
|
||||
### 参考资料
|
||||
|
||||
https://www.freecodecamp.org/news/how-to-think-like-a-programmer-lessons-in-problem-solving-d1d8bf1de7d2/
|
||||
|
||||
https://www.jianshu.com/p/0f46896ab4a0
|
||||
|
||||
Krathwohl, D.R. (2002) A Revision of Bloom’s Taxonomy: An Overview. Theory into Practice, 41, 212-218. http://dx.doi.org/10.1016/S0164-1212(98)10055-9
|
|
@ -0,0 +1,194 @@
|
|||
|
||||
## 3.1 沟通能力
|
||||
|
||||
### 3.1.1 培养基本的沟通能力
|
||||
|
||||
Nobody is an island. 没有人是一座孤岛。
|
||||
|
||||
|
||||
微软很看重沟通能力,而且是在面试中的一个重点考察项目。为什么呢?因为大公司一般都是团队作战,不像小公司那样主要靠单打独斗,作为一个工程师会牵涉到:
|
||||
|
||||
- 和团队内其它工程师的沟通
|
||||
- 和 PM 的沟通
|
||||
- 和 Designer 的沟通
|
||||
- 和其它团队的沟通
|
||||
- 和老板的沟通
|
||||
- 和客户的沟通
|
||||
|
||||
如果按照形式分类,又可以分为:
|
||||
|
||||
- 正式沟通与非正式沟通
|
||||
- 垂直沟通与水平沟通
|
||||
- 口头沟通与书面沟通
|
||||
- 语言沟通与非语言沟通
|
||||
- 内部沟通和外部沟通
|
||||
- 单独沟通和集体沟通
|
||||
|
||||
如果按信息内容和目的分类,可以是:
|
||||
|
||||
- 基本的信息沟通
|
||||
- 工作中的职业沟通
|
||||
- 高级的情感沟通
|
||||
|
||||
一个不想沟通又不会沟通的人,很难融入到团队中与他人合作完成项目。所以,沟通,已经成为在职场中生存的基本手段了。
|
||||
|
||||
沟通是双向的,是一个编码、解码的过程,要求你既会说又会听。笔者认为不存在单向沟通,因为那不叫作沟通,叫做信息发布。
|
||||
|
||||
### 3.1.2 沟通的最佳实践
|
||||
|
||||
<img src="img/Slide3.JPG"/>
|
||||
|
||||
图 3.1.1 沟通的最佳实践
|
||||
|
||||
#### 表达深思熟虑后的观点
|
||||
|
||||
表达观点时,要有理有据(虽然不能保证合情合理),不能道听途说地只说个结论,没有推理过程或者解释说明。
|
||||
|
||||
比如你想说服其它人采用你的技术建议,粗糙的沟通方式是:“这种技术很多大公司都采用了,我们也应该采用。” 这种观点拿出来很容易被 challenge(挑战)。
|
||||
|
||||
你可以找到两三条理由来支持的你的观点,比如:
|
||||
|
||||
“我建议采用一个消息队列来接在 Web 服务器后面,这样的好处是:
|
||||
|
||||
1. 松耦合,在设计、实现上都比较方便;
|
||||
2. 异步方式可以处理高并发;
|
||||
3. 集成测试或调试时,可以使用假数据单独针对接口测试,不需要架设庞大复杂的系统。
|
||||
|
||||
很多大公司都采用,所以应该是成熟可靠的技术,我们应该采用。”
|
||||
|
||||
这种方法有助于你养成想好后再说话的习惯,而不是像那些网络喷子一样只会发表不当言论。
|
||||
|
||||
乐队里有一位 C,自认为自己多弹了几年吉他,有一些演出经验,经常会长篇大论地写一些东西,搬出来一些不明觉厉的名词,最后总不忘加一句“这些都是我上学时就玩儿剩下的”。木头只好说:“大家看看老 C 的文字,观点完整、有理有据,请大家学习。” 确实,在“观点完整”上,C 确实做到了。有人私下问木头这件事,木头回答说:“我说观点完整,并没有说观点正确,我说有理有据,没有说合情合理。”
|
||||
|
||||
#### 不要用反问句
|
||||
|
||||
完整地表达观点,是一种思考成熟、具有知识体系的表现。微信的出现其实是为了普通大众服务的,往往是三言两语说完就走,因为不具备完整表达观点的能力。
|
||||
|
||||
还有些人,可能是在中学就养成的坏毛病,总是反问别人。比如大家在邻居微信群中担忧疫情防控放开的问题,有个年轻人就说:“你得过感冒吗?” 言下之意就是新冠病毒和感冒的危害一样轻,但后来的事实证明要严重很多,恨不得是两三种感冒加起来那么严重。这个年轻人后来在群里求药,但是没有人原意搭理他。
|
||||
|
||||
笔者看着他的反问句不舒服,就回答说:“年轻人可能还容易恢复,但是老年人就比较麻烦。” 没想到又有一个年轻人跳出来反问笔者:“你亲身经历过吗?” 言下之意是“不要听舆论的宣传,老年人没问题的”。笔者当时就以其人之道还治其人之身反问他:“你是老人吗?” 意思是不是老人就没有同理心,不会站在其它的人的立场上思考。
|
||||
|
||||
但是,完整地表达观点经常会吃亏,因为言多必失,大概率会有漏洞。有些人就会抓住其中一个小漏洞,或者是一个语病、一个词汇来反驳。乐队里就有这么一个家伙,总是不好好说话,阴阳怪气的总用反问句,比如“这怎么会是性别问题?”、“你觉得这样做就是公平的吗?”,这些看似普通的反问句在上下文里的伤害极大,使得大家不能正常交流,最后被木头踢出了乐队群。
|
||||
|
||||
#### 认清“角度”与“高度”
|
||||
|
||||
在人类所在的三维世界中,当然有“角度”的概念,同样看一个物理存在的巨大的物体,有的只能看到它的左侧,有的人只能看到右侧,由此会引申到对待一个问题的看法,不同的人会有不同的“角度”。
|
||||
|
||||
但是,当有人和你沟通时用了“角度”这个词,尤其是领导,大概率是在说你的思考层次“高度”不够,而不是“角度”。为什么呢?
|
||||
|
||||
对待项目或者技术问题,其实是存在上帝视角的,这和大家都站在地面观察普通的体积大的物体不同,领导很可能是站在“空中”观察这个物体的,甚至在观察那些观察物体的人。
|
||||
|
||||
比如,你建议:“这个项目比较复杂,我们应该先挑最难的部分做,集中优势兵力打歼灭战,这样做对项目进度是有保障的。” 没错,如果从一个纯技术“角度”看,你的这个建议是对的。但是,领导可能会说:“因为这是一个合作项目,能争取过来做 owner 不容易。为了让合作方能对我们建立信心,我们应该先做简单的部分,尽快出一些阶段性成果,同时抽出一小部分人力去啃硬骨头,明修栈道,暗度陈仓。”
|
||||
|
||||
你自认为从 360 度观察到了事务的本质,但是领导却是从 720 度(包括上下两个维度)做了更多的思考。所以,说“角度”这个词,只是给你一个面子,其实是“高度”的差别。
|
||||
|
||||
#### 基于事实的讨论,而非立场
|
||||
|
||||
- 利益:隐藏起来的真正的需求。
|
||||
|
||||
每个人都会不自觉地维护自身利益,有可能是实际的经济利益,也有可能是地位、面子、形象等这些看似虚无的东西。
|
||||
|
||||
- 立场:形成的思想。
|
||||
|
||||
利益决定了立场,两个人具有共同利益时,就会很容易达成共识,形成相似的观点或态度。
|
||||
|
||||
- 行为:表达出来的具体形式。
|
||||
|
||||
行为可以是具体的动作,大多数时间是语言/言论。
|
||||
|
||||
当两个人沟通不畅导致争论时,要分析清楚对方的利益是不是与自己不一致,自己是不是无意中触犯了对方的利益。要想分辨这一点很容易:当你想尽办法证明自己是对的,而对方对此态度冷漠口气坚定时,你很可能踩人家脚了。
|
||||
|
||||
很典型的情况是,面对一个关键技术问题,两个人各持己见互不相让,其背后的原因很可能是采用了谁的建议,谁就会在 promotion 的路上向前迈进了一步。有个实际的例子,木头在 Windows 组时,常听到很远的隔壁的两个同事 A 和 B 因为在 Edge 浏览器上做银行插件时究竟应该采用哪种技术方案而进行讨论,A 是一个 Senior Dev,B 是一个 SDE II。后来 B 得到了 promotion 到 Senior 级别,在邮件通告中的罗列的一条理由就是:B 在该项目上贡献突出,在技术方案的选择上与同组的一名 Senior 级别的员工竞争而胜出。
|
||||
|
||||
#### 简洁不发散
|
||||
|
||||
沟通时,每个观点完整是必须的,但是在其它方面要简洁吗,不要过于发散。
|
||||
|
||||
有个同事在每次开 Scrum meeting 时都特能说,你要是仔细听吧,他大部分时间都是在持续不断地补充自己的观点,力图证明是正确的,甚至用一些关系不密切的证据。听起来像是“政治正确的白开水”,特别没有营养。
|
||||
|
||||
但是有一些人又过于简洁,茶壶煮饺子,心里有话但是倒不出来。笔者听说有个同事在 Machine Learning 上很有功底,就跑去请教,结果对方说了一些不是关键点的信息,听得云里雾里的。可能在对方看来,“有些基本的信息我都不用说你自然应该明白”,于是直接进入了细枝末节。
|
||||
|
||||
#### 婉转表达否定
|
||||
|
||||
假设你和领导进行 1:1 的年终总结谈话,领导说:“你在这个项目里承担了一些重要的工作,技术能力很不错,但是在与同事进行技术讨论时,在说话技巧上还有一些进步的空间。”
|
||||
|
||||
“有进步的空间”这句话很艺术,它并没有直接说你现在做得不好,而是很委婉地说你可以做得更好。没有人愿意在和别人比较时甘拜下风,但是如果说自己有潜力可以做得更好的话,当然是可以欣然接受的事实。
|
||||
|
||||
在《星际迷航》电影里,经常会看到这样的对话:船长说“把动力系统全部移到船头进行形成能量网保护”,操作员可能会说“Negative(不行),我们需要至少10%的能量储备用于随时做光速跃迁逃逸。”,用 Positive/Negative 就会比较客观婉转,给船长留了面子。
|
||||
|
||||
#### 注意语气语调
|
||||
|
||||
俗话说“有理不在声高”。有些人说话的音量很大,像是在吵架;有些人语速特别快,通常需要听者在脑子里把话在重复一遍才能明白;还有些人语气比较强硬,不太会用词。
|
||||
|
||||
木头的老板是一个反例,他说话时:
|
||||
|
||||
1. 音量低,这反而能让别人都安静下来仔细听他在说什么。
|
||||
2. 速度慢,还稍微有些结巴(当然这不是优点),不过反而能让人明白他在说什么。
|
||||
3. 不和别人争吵,有不同意见时,他表达完自己的观点后,如果对方不同意,他就会说“行,那再回去研究研究吧”,这样不管最终谁对谁错,都给双方留了余地。
|
||||
|
||||
#### “一会儿回复您”
|
||||
|
||||
如果需要较长时间的思考,也可以回复说“让我先想想,一会儿回复您”。
|
||||
|
||||
曾经有一位朋友(微软中国 ARD 的韦青老师)请笔者去给一个合资公司讲讲“微软的工程师文化”,因为笔者当时很忙,一时不能确定能不能讲好,或者是需要多长时间的准备,所以就在第一时间回复说“让我想想”。两个小时后,给予了对方肯定的答复,然后就在业余时间开始准备演讲内容,大部分内容都是本书中的实践中的软件工程,最后的演讲效果非常好,这才启发、激励笔者继续写完这本书,相信会得到很好的读者反馈。
|
||||
|
||||
#### 面对面的讨论更加有效,慵懒的文字会产生误解
|
||||
|
||||
以前在办公室里听到打字速度很快(而且还大胆地使用了机械键盘)时,就知道这个家伙一定在用电脑微信聊天,因为写代码的速度不可能那么快。现在面对疫情,大家都采用了线上办公,每天进行大量的文字交流。有的人文字表达能力非常差,而且懒,自己头脑中是有上下文信息的,但是不在文字中表达出来,往往造成对方误会。
|
||||
|
||||
有一个同事在和老板文字交流时,越来越觉得领导的态度不对,赶紧要求和老板进行语音通话交流,及时弥补了误会。而更多的时候,那些不善于文字表达的人,写出来的东西看上去一副“态度冷漠语气生硬”的嘴脸,比如领导交代你一件事,你回复“好”、“好~”、“好吧”、“好的”、“好滴”、“好的呢”、“好吧呀”,里面隐藏的情感细节非常丰富。如果不会细腻表达,表情包可以帮你大忙。
|
||||
|
||||
还有一个特点是,一般的实习生在写字时都会带上一个“啊”字,比如:“是啊”、“我也不知道啊”、“就是那样啊”,听上去像吵架。因为“啊”字本身在说出来时是一个轻声的后缀,没有实际含义,但是写出来就变成了一个强调的语气词,看上去很不舒服。
|
||||
|
||||
#### 少用对抗思维,多用平行思维
|
||||
|
||||
同事之间,如果没有上述的立场问题作怪,就尽量“先扬后抑”,或者“多扬少抑”。
|
||||
|
||||
比如,针对一个技术问题的选择,A 的理由是:1. 开发速度快;2. 容易测试;3. 可以多人并行开发。而 B 与 A 的后两点理由相似,但是第一点理由的差别较大。此时,如果 B 一上来就说:“我认为你的第一点理由根本不成立,我们要的是质量而不是速度!”,那么 A 肯定不能接受。这就是对抗思维。
|
||||
|
||||
如果采用平行思维,B 可以这样说:“我非常同意你的第二点和第三点理由,这对项目的帮助很大。我只是在第一点上和你有一些小的差异。” 此时 A 的反应很可能是眼睛一亮好奇地问:“哦?那你说来听听”。然后 B 再娓娓道来。
|
||||
|
||||
这种技巧,是 B 先给了 A 一个较强的心理暗示:咱俩是一个阵营的。这样 A 就会表现出合作的态度。
|
||||
|
||||
#### 说话不要绕弯子
|
||||
|
||||
比如,有个同事建议:“到了年底,因为美国那边要休圣诞节假期,所以我们不如等他们都休假回来后再一起讨论后续的安排。” 其实是这个同事的年假没用完,他想在 12 月底休两周的假,他不直说,却把美国人搬出来当挡箭牌。
|
||||
|
||||
木头的乐队里还有个例子:一个乐队的成员想在元旦时出去玩儿,但是新年音乐会定在了 1 月 6 日,他又怕到时候不能赶回来,所以他们队长就来找我说:1 月 6 日估计很多微软员工休假的还没回来,影响观众的上座率,不如我们延期举办音乐会吧?
|
||||
|
||||
这听上去就是很为演出效果考虑的感觉,但是这一个改变就要到春节后再开音乐会了,排练不好安排。员工们过完春节刚刚来上班,你来个“马后炮”,不论是观众和乐手,心气儿都差远了。木头看出来了是因为他们的乐手凑不齐,所以拒绝了这个队长的请求,说:你如果缺乐手可以向别的乐队借,没必要把自己乐队的困难绕个弯子转嫁到整个演出上。
|
||||
|
||||
#### 相同的话不要重复说
|
||||
|
||||
在工程师层面的沟通,不需要像在大街上聊天似的,为了增加亲密程度和聊天长度而说“车轱辘话”。车轱辘话出现的原因是:
|
||||
|
||||
- 想强调某个理由,但是没有很好地组织语言。
|
||||
- 或者是没有更好的理由,而只好说重复的话。
|
||||
|
||||
一旦出现车轱辘话,在说者看来好像是强调了刚才的观点,但是在听者看来会得到两个结论:这个人固执;他没别的理由了。这与说者想达到的目的正好相反。
|
||||
|
||||
#### 不要乱用“沉默”的权力
|
||||
|
||||
笔者在写本书的“用户与需求”部分时,曾经想要求一位以前共过事的 PM 一起写,就发了一封邀请邮件,但是却石沉大海,也不好再追说,干脆自己写了。笔者感到很不可思议的是,曾经和那位 PM 在项目最艰难的时刻共同努力,最终令项目得到了总部的认可,相当于一起“扛过枪、负过伤”的交情,为什么对方会沉默呢?
|
||||
|
||||
不要怀疑他可能是漏看了邮件,因为他是一个非常细心的人,看邮件回邮件是他的本职工作。其实他完全可以说“工作繁忙、才疏学浅”等等来推脱,笔者是完全可以接受的,但是这种“沉默”是极大的不尊重,相当于断绝了以后交往的可能。
|
||||
|
||||
同样的问题经常发生在同事或朋友之间的微信通信上,有的时候甚至一句“新年快乐”发过去却得不到半点儿回音。笔者只是在对对方的行为或言语极为反感时,才会采用“沉默”这种手段。所以奉劝那些容易忘记回复消息的读者们,真正地把对方放在心上(这样对方才能把你也放在心上),在方便的时候第一时间回复对方。
|
||||
|
||||
#### 不抱怨结果,要分析原因
|
||||
|
||||
无效的沟通往往是从对糟糕的结果的抱怨开始的。
|
||||
|
||||
最典型的是家长面对孩子的考试结果时,第一句便是:“你怎么不好好考试?!”,孩子听完后一脸懵弊,然后就是一言不发。
|
||||
|
||||
因为家长自身处于强势地位,不太注重沟通的方式。但是一般的公司领导会很注意这些细节,在上面那种情况下一般会说:“这次考试(项目)结果不太理想,应该还可以做得更好,你有没有自己分析过是什么原因造成的呢?” 这样拉开话匣子,会让对方可以接受。
|
||||
|
||||
#### 不挑战别人的决定,而是提出建设性意见
|
||||
|
||||
比起上一条来,更进一步。
|
||||
|
||||
经常有一些带有情绪的对话,或者是下级面对上级时,会出现这个问题:“为什么这样做?”
|
||||
|
||||
如果是同级别的人谈话,对方的意思往往是“我有更好的方案”,但是他不直接说,而是以问句开始,这就容易拱火儿。如果是不同级别的人,劝你还是最好不这样问话,因为领导掌握的信息比你多,做出的决策也会更合理,让领导解释理由是很不礼貌的,这相当于是一种挑战。
|
||||
|
||||
不论哪种场合,如果直接了当地把自己的“具有建设性”的意见说出来,会得到领导的赏识和同事的赞许。“建设性”这个词还是木头在学习桥牌时第一次遇到的,叫做“建设性应叫”,意思是对方表达了完整的观点后,我应该在尊重对方观点的前提下,提出自己的一些局部或不同方向的补充,来共同完善这个观点。
|
|
@ -1,14 +1,14 @@
|
|||
## 2.5 解决问题的能力
|
||||
## 3.2 解决问题的能力
|
||||
|
||||
### 2.5.1 能力的评级
|
||||
### 3.2.1 能力的评级
|
||||
|
||||
在前面的故事中提到过“解决问题的能力”,是指的一些简单的问题,只需要做出一两个正确的判断或者动作就可以解决。
|
||||
|
||||
解决问题的能力,需要五个阶段的培养或锻炼,下面我们采用倒序方法从能力高到能力低的顺序来讲述。
|
||||
|
||||
<img src="img/Slide8.JPG"/>
|
||||
<img src="img/Slide4.JPG"/>
|
||||
|
||||
图 2.5.1 培养解决问题的能力
|
||||
图 3.2.1 培养解决问题的能力
|
||||
|
||||
|
||||
|
||||
|
@ -26,9 +26,9 @@
|
|||
|
||||
但是有时候领导可能说得不太准确:木头同学,你需要在一个月的时间内,把所有中国重点城市的公交车的站点处理一下,后面才能写换乘算法。
|
||||
|
||||
<img src="img/Slide9.JPG"/>
|
||||
<img src="img/Slide5.JPG"/>
|
||||
|
||||
图 2.5.2 公交站点的聚类
|
||||
图 3.2.2 公交站点的聚类
|
||||
|
||||
这里面就有很多坑需要木头自己填平,比如:
|
||||
|
||||
|
@ -61,13 +61,13 @@
|
|||
- 你的目标是要做公交站牌聚类;
|
||||
- 我不知道现有的聚类算法是否可以直接使用,我们以前有个例子,是这样的:
|
||||
|
||||
如图 2.5.2,统计了几十个人的身高体重,但是粗心的统计员忘记记录性别了,此时,可以用聚类的办法来大致把这些点分成两类,一类是男性,一类是女性。具体的数据和代码你可以在咱们的代码仓库里 (https://github.com/microsoft/ai-edu)找到,当时我们使用 DBSCAN 算法实现的。
|
||||
如图 3.2.2,统计了几十个人的身高体重,但是粗心的统计员忘记记录性别了,此时,可以用聚类的办法来大致把这些点分成两类,一类是男性,一类是女性。具体的数据和代码你可以在咱们的代码仓库里 (https://github.com/microsoft/ai-edu)找到,当时我们使用 DBSCAN 算法实现的。
|
||||
|
||||
但是,与公交站牌聚类的例子比较,可以看到二者的区别是:一个是在二维空间里的聚类,一个是在一维空间里的聚类,能保证聚类算法的效果是可信的吗?你需要做一些试验,来验证这一点。
|
||||
|
||||
<img src="img/Slide10.JPG"/>
|
||||
<img src="img/Slide6.JPG"/>
|
||||
|
||||
图 2.5.3 人类性别聚类问题
|
||||
图 3.2.3 人类性别聚类问题
|
||||
|
||||
所以,领导即告诉了目标,又告诉了相似的例子,木头需要写代码做试验,这比“给目标,给方法”的难度要稍微高一些。
|
||||
|
||||
|
@ -91,7 +91,7 @@
|
|||
- 在阶段四,只给“目标”,需要自己确定“范围”,通过寻找前人留下的“例子”来确定最终“方法”。
|
||||
- 在阶段五,除了必要的资源以外“啥都不给”,“目标”靠自己来研究挖掘,能力高下立现。
|
||||
|
||||
### 2.5.2 木头遇到的技术问题
|
||||
### 3.2.2 木头遇到的技术问题
|
||||
|
||||
#### 复现问题
|
||||
|
||||
|
@ -101,9 +101,9 @@
|
|||
|
||||
木头拿到了用户的真实环境(模型、测试代码、样本)后,首先在自己的 GPU 环境中复现(repro),32 个样本果真会导致转换失败;然后又用 16 个、8 个、4 个、2 个样本做测试,最后得到的结果是只有 2 个或 1 个样本时,转换才会成功。
|
||||
|
||||
<img src="img/Slide11.JPG"/>
|
||||
<img src="img/Slide7.JPG"/>
|
||||
|
||||
图 2.5.4 培养解决问题的能力
|
||||
图 3.2.4 培养解决问题的能力
|
||||
|
||||
|
||||
#### 排查疑点
|
||||
|
@ -120,7 +120,7 @@ Debug! 通过 debug 大法,木头定位到在验证转换结果时,如果使
|
|||
np.allclose(x, y, rtol=1e-2, atol=1e-3)
|
||||
```
|
||||
|
||||
这个函数返回 False,表示 32 位模型的推理结果 x 与 16 位模型的推理结果 y 在数值上相差比较大。把 4 个不同样本的 32 位结果与 16 位结果打印出来如下:
|
||||
这个函数返回 False,表示 32 位模型的推理结果 $X$ 与 16 位模型的推理结果 $Y$ 在数值上相差比较大。把 4 个不同样本的 32 位结果与 16 位结果打印出来如下:
|
||||
|
||||
```
|
||||
---- 32 位模型推理结果 ----
|
||||
|
@ -148,24 +148,24 @@ np.allclose(x, y, rtol=1e-1, atol=1e-2)
|
|||
```
|
||||
就可以轻松通过验证。由此可以得知就是精度问题导致验证失败。但是,如果就此得出结论“16 位的模型精度有问题”,那就为时过早了。
|
||||
|
||||
如图 2.5.4 所示,我们一直把怀疑集中到转换的过程,在 16 位精度的模型中,一个样本 S 做两次推理得到的结果 Y 和 Y',它们有时候和 X 非常接近,有时候又不是很接近,而 Y 和 Y' 两者之间也会有精度差。
|
||||
如图 3.2.4 所示,我们一直把怀疑集中到转换的过程,在 16 位精度的模型中,一个样本 S 做两次推理得到的结果 $Y$ 和 $Y'$,它们有时候和 $X$ 非常接近,有时候又不是很接近,而 $Y$ 和 $Y'$ 两者之间也会有精度差。
|
||||
|
||||
|
||||
木头忽然想到:如果用 32 位模型做两次推理,得到的结果 X 和 X' 一样吗?于是得到试验结果如下:
|
||||
木头忽然想到:如果用 32 位模型做两次推理,得到的结果 $X$ 和 $X'$ 一样吗?于是得到试验结果如下:
|
||||
|
||||
```
|
||||
---- 第一次推理结果 ----
|
||||
---- GPU 第一次推理结果 ----
|
||||
[[0.44895846 0.55104145]]
|
||||
---- 第二次推理结果 ----
|
||||
---- GPU 第二次推理结果 ----
|
||||
[[0.45693502 0.54306495]]
|
||||
```
|
||||
哈哈,在 32 位模型上原来也是不稳定的!但是模型中没有任何随机因素,为什么会出现这种问题呢?于是木头咨询了领导,领导提示说看看是不是 GPU 出的问题。
|
||||
|
||||
于是木头在 CPU(不是GPU)上做了同样的试验,得到结果如下:
|
||||
```
|
||||
---- 第一次推理结果 ----
|
||||
---- CPU 第一次推理结果 ----
|
||||
[[0.45295522 0.5470447]]
|
||||
---- 第二次推理结果 ----
|
||||
---- CPU 第二次推理结果 ----
|
||||
[[0.45295522 0.5470447]]
|
||||
```
|
||||
两次的推理结果完全一致!
|
||||
|
@ -196,15 +196,15 @@ np.allclose(x, y, rtol=1e-1, atol=1e-2)
|
|||
|
||||
最后如何 fix 这个 bug,并不是木头所在的小组的职责,而是由其它小组专门负责,所以木头就在 GitHub Issues 里给那个小组开了一个 bug,并告知了相关的 PM。
|
||||
|
||||
### 2.5.3 一个非技术的例子
|
||||
### 3.2.3 一个非技术的例子
|
||||
|
||||
再举一个比较通俗的例子:木头在某个级别上很长时间不能得到晋升,如何解决这个问题呢?
|
||||
|
||||
和解决上面的技术问题一样,我们需要排查疑点,也就是影响晋升的因素都有哪些。
|
||||
|
||||
<img src="img/Slide12.JPG"/>
|
||||
<img src="img/Slide8.JPG"/>
|
||||
|
||||
图 2.5.5 培养解决问题的能力
|
||||
图 3.2.5 培养解决问题的能力
|
||||
|
||||
|
||||
- 个人能力
|
||||
|
@ -249,7 +249,7 @@ np.allclose(x, y, rtol=1e-1, atol=1e-2)
|
|||
|
||||
OK,如果你能够从以上几个方面分析好自己当前的境遇,判断出哪一个因素才是“四年没有得到晋升”的关键,抓住重点,就能够“解决”这个问题,提高自己的晋升概率。
|
||||
|
||||
### 2.5.4 提高解决问题的能力
|
||||
### 3.2.4 提高解决问题的能力
|
||||
|
||||
善于观察,勤于思考。
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
## 2.6 系统化思维能力
|
||||
## 3.3 系统化思维能力
|
||||
|
||||
### 2.6.1 思维与系统化思维
|
||||
### 3.3.1 思维与系统化思维
|
||||
|
||||
#### 三个名词
|
||||
|
||||
先理清三个名词:思考(Think),思维(Thinking),思想(Thought)。
|
||||
|
||||
<img src="img/Slide13.JPG"/>
|
||||
<img src="img/Slide9.JPG"/>
|
||||
|
||||
图 2.6.1 三个名词的关系
|
||||
图 3.3.1 三个名词的关系
|
||||
|
||||
思考,是一个动词,是人的大脑的一种能力和行为,就是程序员们常说的“等会儿!让我想想!脑子有点儿乱,这是我写的代码吗?看上去很乱......嗯,这个聚类算法并不适合于做有标签的数据分类学习,对吧?”
|
||||
|
||||
|
@ -67,17 +67,17 @@
|
|||
|
||||
先回忆一下 2.5 节中提到的“解决问题的能力”的主要内容。
|
||||
|
||||
通常来说,一个问题会包含有多个因素,这些因素都是**并列关系**,在拓扑结构上,如图 2.6.2 的**星形结构**。在某个特定条件下,只有一个因素会引发这个问题的出现。发现这个引发因素并加以解决,就是“解决问题的能力”体现。
|
||||
通常来说,一个问题会包含有多个因素,这些因素都是**并列关系**,在拓扑结构上,如图 3.3.2 的**星形结构**。在某个特定条件下,只有一个因素会引发这个问题的出现。发现这个引发因素并加以解决,就是“解决问题的能力”体现。
|
||||
|
||||
而本节中的“系统化思维能力”所面对的问题,不仅仅是简单的一对一的因果关系,更多的是如图 2.6.2 中另外四种形式所示的复杂关系。所以,解决(简单)问题的能力也可以看作是一种简单的系统化思维能力。
|
||||
而本节中的“系统化思维能力”所面对的问题,不仅仅是简单的一对一的因果关系,更多的是如图 3.3.2 中另外四种形式所示的复杂关系。所以,解决(简单)问题的能力也可以看作是一种简单的系统化思维能力。
|
||||
|
||||
<img src="img/Slide14.JPG"/>
|
||||
<img src="img/Slide10.JPG"/>
|
||||
|
||||
图 2.6.2 系统化思维的几种形式
|
||||
图 3.3.2 系统化思维的几种形式
|
||||
|
||||
**这些思维形式的形成,是因为系统(问题)本身就是这种结构**,而并非无中生有。“读万卷书行万里路”是形成系统化思维的必经之路,简单说就是见多识广。
|
||||
|
||||
### 2.6.2 串行化系统与思维形式
|
||||
### 3.3.2 串行化系统与思维形式
|
||||
|
||||
解决单个问题,只需要线性思维就可以了,就是所谓“头疼医头脚疼医脚”。如果问题的依赖链条较长,就需要串行化的“系统思维能力”了,这是系统化思维中最简单的形式。
|
||||
|
||||
|
@ -85,9 +85,9 @@
|
|||
|
||||
要解决这个问题需要一系列的假设数据支持,有些数据是可以从网上查到的,有些是常识,剩下的就需要靠推理了。
|
||||
|
||||
<img src="img/Slide15.JPG"/>
|
||||
<img src="img/Slide11.JPG"/>
|
||||
|
||||
图 2.6.3 北京有多少个加油站
|
||||
图 3.3.3 北京有多少个加油站
|
||||
|
||||
|
||||
正确的解题思路如下:
|
||||
|
@ -169,11 +169,11 @@
|
|||
|
||||
既然有串行化的思维形式,那么有没有并行化的思维形式呢?有!但是其具体表现形式是下面要介绍的金字塔状思维形式和网状思维形式。
|
||||
|
||||
### 2.6.3 金字塔状系统与思维形式
|
||||
### 3.3.3 金字塔状系统与思维形式
|
||||
|
||||
<img src="img/Slide16.JPG"/>
|
||||
<img src="img/Slide12.JPG"/>
|
||||
|
||||
图 2.6.4 如何举办一场音乐会
|
||||
图 3.3.4 如何举办一场音乐会
|
||||
|
||||
#### 0. 总体目标
|
||||
|
||||
|
@ -227,19 +227,19 @@
|
|||
- 从时间上看,以海报任务为例,设计、印刷、张贴、回收,是前后阶段顺序,每个阶段都需要有人、有场地、有方法、有工具才能完成。排练场地本身是一个空间,但是也需要时间的计划才能安排好很多组的排练。
|
||||
- 从空间上看,以场地为例,舞台搭建的位置、音响布置的覆盖面、调音台中控的地点、有长度限制的线材的连接方式、观众的座椅位置、录音录像师的机位、乐器在舞台上的摆放位置、麦克风的排列形式,等等等等,都是需要联动考虑的问题。
|
||||
|
||||
### 2.6.4 环状系统与思维形式
|
||||
### 3.3.4 环状系统与思维形式
|
||||
|
||||
<img src="img/Slide17.JPG"/>
|
||||
<img src="img/Slide13.JPG"/>
|
||||
|
||||
图 2.6.5 环状系统的负反馈
|
||||
图 3.3.5 环状系统的负反馈
|
||||
|
||||
先看一种比较简单常见的环状反馈系统。其原始系统如图 2.6.5 左上所示,只有“输入、信号处理、输出”三个环节。
|
||||
先看一种比较简单常见的环状反馈系统。其原始系统如图 3.3.5 左上所示,只有“输入、信号处理、输出”三个环节。
|
||||
|
||||
但是经常有这种需求:当输出端电平太高时,需要输入端智能地调低电平,所以就在输出端增加一个采样点,把输出信号反馈给输入端,并在结合点上与输入信号电平相减(因为是负反馈),这样在输出端最终得到的就是一个相对平稳的信号。
|
||||
|
||||
在思考时,通常人们会认为自己的思想无比正确,主意无比美妙。但是当你说出你的主意并得到一些 feedback(反馈)后,会纠正你的一些错误想法,把这些信息加入到输入端重新思考,才会得到大家都认可的好主意。
|
||||
|
||||
还有一种比较复杂的形式,一个输入通常是经过了很多个环节处理,最后反馈回来,对最初的输入做矫正。如图 2.6.5 的右图所示的一个例子:
|
||||
还有一种比较复杂的形式,一个输入通常是经过了很多个环节处理,最后反馈回来,对最初的输入做矫正。如图 3.3.5 的右图所示的一个例子:
|
||||
|
||||
|
||||
1. 用户:“现在的系统运行有些慢,希望能够提升一下整体效率。”
|
||||
|
@ -252,28 +252,23 @@
|
|||
|
||||
本来是一个好的出发点,但是经过一个环状的系统走下来,反而事与愿违。用户在得到一个好处(运行性能提高)的同时,可能会等待更长的时间获得新功能,或者花更多的钱来购买设备。
|
||||
|
||||
### 2.6.5 网状系统与思维形式
|
||||
|
||||
<img src="img/Slide18.JPG"/>
|
||||
|
||||
图 2.6.6
|
||||
|
||||
### 3.3.5 网状系统与思维形式
|
||||
|
||||
网状系统(或者说是表格形式)思维是最复杂的一种形式,因为它涉及到了横向思维和纵向思维两个方向,甚至是多维的。而其它的思维形式都是单向的。
|
||||
|
||||
<img src="img/Slide19.JPG"/>
|
||||
<img src="img/Slide14.JPG"/>
|
||||
|
||||
图 2.6.6 环状系统的负反馈
|
||||
图 3.3.6 环状系统的负反馈
|
||||
|
||||
在软件开发过程中,如图 2.6.6 所示,从纵向看,通常是多个小组分别完成各自的子系统,每个子系统又包含一系列的模块。从横向看,不同子系统的模块组成一个端到端的功能。项目管理者在纵向上需要协调各个小组的进度,这样才能在横向上把不同子系统的功能串联起来,尽早得到一个可运行的系统。
|
||||
在软件开发过程中,如图 3.3.6 所示,从纵向看,通常是多个小组分别完成各自的子系统,每个子系统又包含一系列的模块。从横向看,不同子系统的模块组成一个端到端的功能。项目管理者在纵向上需要协调各个小组的进度,这样才能在横向上把不同子系统的功能串联起来,尽早得到一个可运行的系统。
|
||||
|
||||
在机器学习中,通常有很多参数需要调节,比如深度神经网络中的步长值、样本批大小、卷积核的尺寸、正则化的参数等等,这些参数互相影响,网格状的参数搜索可以帮助我们找到最佳的参数组合。
|
||||
|
||||
<img src="img/Slide20.JPG"/>
|
||||
<img src="img/Slide15.JPG"/>
|
||||
|
||||
图 2.6.7 质量指标之间的竞争
|
||||
图 3.3.7 质量指标之间的竞争
|
||||
|
||||
在软件质量控制过程中,如图 2.6.7 所示,需要软件可以达到很多种质量指标,如:正确性、可靠性、易用性、高效率、可维护性、可移植性等等。但是其中的某些指标是相克的,一个指标的提升会带来另外一个指标的下降。
|
||||
在软件质量控制过程中,如图 3.3.7 所示,需要软件可以达到很多种质量指标,如:正确性、可靠性、易用性、高效率、可维护性、可移植性等等。但是其中的某些指标是相克的,一个指标的提升会带来另外一个指标的下降。
|
||||
|
||||
在足球场上,教练会强调两点:一是全队三条线在横向上的步调一致,一起压上进攻,或者一起收缩防守;二是在纵向上,同一边的后卫、中场球员、前锋要协调进攻。在排球场上,六个队员形成 2x3 的网格阵型,兼顾进攻与防守。
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
|
||||
## 2.7 学习能力与方法
|
||||
## 3.4 学习能力与方法
|
||||
|
||||
### 2.7.1 元能力
|
||||
### 3.4.1 元能力
|
||||
|
||||
**学习能力**是一项元能力。元能力,就是提升其它能力的能力。而学习能力所学习的目标是**知识**和**技能**。
|
||||
|
||||
<img src="img/Slide21.JPG"/>
|
||||
<img src="img/Slide16.JPG"/>
|
||||
|
||||
图 2.7.1 能力
|
||||
图 3.4.1 能力
|
||||
|
||||
**知识**是人类从各个途径中获得的,经过提升总结与凝练的对客观世界的系统认识。包括“事实知识、概念知识、过程知识、元认知知识”,在 2.7.3 小节中讲解。
|
||||
**知识**是人类从各个途径中获得的,经过提升总结与凝练的对客观世界的系统认识。包括“事实知识、概念知识、过程知识、元认知知识”,在 3.4.3 小节中讲解。
|
||||
|
||||
**技能**是在获得相关知识的基础上,通过一定练习或实践而获得的某一领域的经验与技巧。包括“硬技能(技巧)、软技能(经验)”。“弹吉他”是一种硬技能,需要头脑清楚、双手配合灵活,但不一定要懂得乐理知识;“编曲”则是一种软技能,需要懂得丰富的乐理知识,当然也需要掌握编曲工具的使用方法。
|
||||
|
||||
|
@ -36,15 +36,15 @@ $$
|
|||
|
||||
另外,对于 IT 行业有其特殊性:新知识、新工具、新方法涌现的速度远远超过其他行业。保持好奇、终身学习,才能不落伍。
|
||||
|
||||
### 2.7.2 Bloom's Taxonomy - 布鲁姆分类
|
||||
### 3.4.2 Bloom's Taxonomy - 布鲁姆分类
|
||||
|
||||
1956年,美国的教育心理学家 Benjamin Bloom 本杰明·布鲁姆发现,美国学校的测试题 95% 以上是在考学生的记忆力,就相当于文科中的历史、政治、法律,这些东西都是已经发生的事件或者已经规定好的条条框框,没有任何商量的余地。
|
||||
|
||||
但是,很多理工科的专业的学生,或者毕业后从事科学研究的人,他们需要的不是记忆力,而是创造力,而那些测试题是阻碍这些人受到良好教育的绊脚石。于是,布鲁姆提出了一个新的学习教育分类法,用于归类不同学习程度的认知框架。2000 年,他的学生 Lorin Anderson 修订过一些内容,这就是影响了两代美国人的“认知目标分类体系”。
|
||||
|
||||
<img src="img/Slide22.JPG"/>
|
||||
<img src="img/Slide17.JPG"/>
|
||||
|
||||
图 2.7.2 布鲁姆分类
|
||||
图 3.4.2 布鲁姆分类
|
||||
|
||||
|
||||
布鲁姆是根据人的“认知过程从简单到复杂,由具体到抽象”这一规律来作为其教育目标分类理论依据的。教育目标分类强调指导教学过程和对结果进行评价,用来判断学生对一个知识点的精通程度,从低层次的“记忆、理解、应用”,到高层次的“分析、评价、创造”。
|
||||
|
@ -156,7 +156,7 @@ $$
|
|||
- 在已有的缓冲区的基础上,再设计一个二级缓冲区,可以容纳更多的数据,会成倍地提高查询的效率,但只付出很小的设备代价。
|
||||
|
||||
|
||||
### 2.7.3 Knowledge Dimensions - 知识的难度分类
|
||||
### 3.4.3 Knowledge Dimensions - 知识的难度分类
|
||||
|
||||
这一分类体系直译为知识的维度,但其实四个维度之间是有继承关系的,所以笔者把它翻译成知识的难度。四种难度的知识依次是:
|
||||
|
||||
|
@ -165,9 +165,9 @@ $$
|
|||
3. 过程知识
|
||||
4. 元认知知识
|
||||
|
||||
<img src="img/Slide23.JPG"/>
|
||||
<img src="img/Slide18.JPG"/>
|
||||
|
||||
图 2.7.3 知识的难度
|
||||
图 3.4.3 知识的难度
|
||||
|
||||
|
||||
#### 1. Factual Knowledge 事实知识
|
||||
|
@ -180,7 +180,7 @@ $$
|
|||
|
||||
任何领域中的术语、具体细节和基本元素都可以定义为事实知识。比如软件和软件工程领域中的编程语言的语法知识、关于算法的名词知识(KNN、DNN、RNN、CNN......)、关于测试的各种名词知识(单元测试、集成测试......)等等。
|
||||
|
||||
是一种非常具像的知识形式,属于纯静态的问题。如图 2.7.1 中的子图 1,有 A、B、C 三个看上去独立的点,表示三个基本的事实知识。
|
||||
是一种非常具像的知识形式,属于纯静态的问题。如图 3.4.3 中的子图 1,有 A、B、C 三个看上去独立的点,表示三个基本的事实知识。
|
||||
|
||||
学习这些静态知识最好的办法就是翻阅教科书,一般的书的作者都会比较严谨,在书中列出的名词及其解释会比较的准确和全面。然后再从其它渠道(比如互联网)获得更多的关于这些名词的实际应用的介绍,而不是机械地背诵它们的定义。
|
||||
|
||||
|
@ -197,7 +197,7 @@ $$
|
|||
- 原理和概括
|
||||
- 理论、模型和结构
|
||||
|
||||
如图 2.7.1 中的子图 2,A、B、C 三个点扩展了其外延,使得本来独立的点连接到了一起,形成多个概念知识。
|
||||
如图 3.4.3 中的子图 2,A、B、C 三个点扩展了其外延,使得本来独立的点连接到了一起,形成多个概念知识。
|
||||
|
||||
概念知识与低级别的事实知识相关,可以理解为是一种上下文相关的知识,而不是局限在某一个点(事实)上。比如我们知道了软件测试包括单元测试和集成测试这个事实(包含两个元素),但是还应该进一步知道它们分别侧重于哪个方面,区别和联系是什么。再比如算法名词,应该知道 KNN 是一种聚类算法,而 DNN、RNN、CNN 其实是深度神经网络中的一些名词,把它们结合起来可以形成强大的深度学习模型。
|
||||
|
||||
|
@ -213,7 +213,7 @@ $$
|
|||
|
||||
注意,技能(skill)指的是人所具有的能力,不是所有人都有;技术(technique)指的是客观存在的东西,任何人都可以使用。具有这些知识并能够灵活运用是这个级别所要求的。比如如何实施单元测试,设计测试用例来覆盖各种情况是一种技能;而使用开发工具提供的单元测试的接口就是一种技术。
|
||||
|
||||
如图 2.7.1 中的子图 3,本来是静态联系,在 A 旋转起来后,发现 B、C 也跟着旋转起来,形成了齿轮组。同理,旋转 B 或 C 时,另外两个齿轮也跟着旋转。
|
||||
如图 3.4.3 中的子图 3,本来是静态联系,在 A 旋转起来后,发现 B、C 也跟着旋转起来,形成了齿轮组。同理,旋转 B 或 C 时,另外两个齿轮也跟着旋转。
|
||||
|
||||
#### 4. Meta-cognitive Knowledge 元认知知识
|
||||
|
||||
|
@ -227,24 +227,24 @@ $$
|
|||
|
||||
这个级别要求我们在充分掌握前面所说的三个层次的知识的前提下,你应该有自知之明,了解自己掌握了多少编程语言的知识、机器学习的知识、测试的知识,你在某个项目中还需要哪些技能才能胜任领导给予你的角色,你距离可以做一次讲座或者指导他人工作的能力还有多远。如果有差距的话,你可以准确地估计出还需要多长时间在哪个方向上的努力才能够达标。
|
||||
|
||||
如图 2.7.1 中的子图 4,在了解了前三层知识后,应该可以从它们“一生二、二生三、三生万物”地分解、模仿、理解、解释、甚至创造出一个齿轮箱。
|
||||
如图 3.4.3 中的子图 4,在了解了前三层知识后,应该可以从它们“一生二、二生三、三生万物”地分解、模仿、理解、解释、甚至创造出一个齿轮箱。
|
||||
|
||||
|
||||
### 2.7.4 当层次遇上难度
|
||||
### 3.4.4 当层次遇上难度
|
||||
|
||||
2.7.2 小节和 2.7.3 小节是两个不同维度的的分类或分层,那么当这两个维度组合在一起,会发生什么事情呢?
|
||||
3.4.2 小节和 3.4.3 小节是两个不同维度的的分类或分层,那么当这两个维度组合在一起,会发生什么事情呢?
|
||||
|
||||
<img src="img/Slide24.JPG"/>
|
||||
<img src="img/Slide19.JPG"/>
|
||||
|
||||
图 2.7.4 二维知识/学习分类
|
||||
图 3.4.4 二维知识/学习分类
|
||||
|
||||
图 2.7.4 就是二者结合的产物:
|
||||
图 3.4.4 就是二者结合的产物:
|
||||
- 在横向上,是知识学习的六个层次,从低级到高级;
|
||||
- 在纵向上,是知识本身的难度,从具象到抽象。
|
||||
|
||||
在表格中用一些关键动词来表示具体行为,但是不够详细,所以表 2.7.1 是具体的解释。由于篇幅原因,把横表变成了纵表。
|
||||
在表格中用一些关键动词来表示具体行为,但是不够详细,所以表 3.4.1 是具体的解释。由于篇幅原因,把横表变成了纵表。
|
||||
|
||||
表 2.7.1 二维学习/知识分类
|
||||
表 3.4.1 二维学习/知识分类
|
||||
|
||||
||事实知识|概念知识|过程知识|元认知知识|
|
||||
|-|-|-|-|-|
|
||||
|
@ -255,9 +255,9 @@ $$
|
|||
|**评价**|评价一篇论文<br>的优缺点|确定各种采样<br>结果之间的相关性|判断各种采样<br>技术的效果|给一种负载分配<br>策略评分|
|
||||
|**创造**|写一篇短文介绍刚刚<br>学习的神经网络知识|设计一个分类<br>体系把各种用户<br>需求区别开来|设计出有效的<br>项目工作流|提出学习深度学习<br>理论的方式|
|
||||
|
||||
有了表 2.7.1 的指导,我们可以准确地判断一个具体问题所处的层次、难度,也可以判断自己的能力所在的层次、难度。
|
||||
有了表 3.4.1 的指导,我们可以准确地判断一个具体问题所处的层次、难度,也可以判断自己的能力所在的层次、难度。
|
||||
|
||||
### 2.7.5 学习方法
|
||||
### 3.4.5 学习方法
|
||||
|
||||
#### 1. 费曼学习法
|
||||
|
||||
|
@ -300,9 +300,10 @@ SQ3R 代表着五个单词:
|
|||
|
||||
这是英国人托尼·博赞发明的,他是世界记忆锦标赛和世界快速阅读锦标赛创始人,曾经帮助英国查尔斯王子提高记忆力,被称为记忆力之父。
|
||||
|
||||
标准的思维导图,是一个由中心向四周发散的层次逐级递减的图,可以认为是分类逐渐细化
|
||||
标准的思维导图,是一个由中心向四周发散的层次逐级递减的图,可以认为是分类逐渐细化,如图 3.4.4 所示。
|
||||
|
||||
<img src="img/Slide20.JPG"/>
|
||||
|
||||
<img src="img/Slide39.JPG"/>
|
||||
图 3.4.4 思维导图
|
||||
|
||||
图 2.7.4 思维导图
|
||||
其实,思维导图的方法和罗列多级列表的方法,在内容上没有任何区别,只不过思维导图具有特别的**形状、颜色、位置、关系连线**等信息,记忆时可以根据这些不同于纯文字的额外信息来辅助。另外,思维导图最好是**读者自己绘制**,这样对绘制的过程(也就是思考和归纳的过程)有很深刻的记忆。
|
|
@ -0,0 +1,5 @@
|
|||
|
||||
|
||||
<img src="img/Slide21.JPG"/>
|
||||
<img src="img/Slide22.JPG"/>
|
||||
<img src="img/Slide23.JPG"/>
|
После Ширина: | Высота: | Размер: 52 KiB |
После Ширина: | Высота: | Размер: 86 KiB |
До Ширина: | Высота: | Размер: 115 KiB После Ширина: | Высота: | Размер: 115 KiB |
До Ширина: | Высота: | Размер: 80 KiB После Ширина: | Высота: | Размер: 80 KiB |
До Ширина: | Высота: | Размер: 93 KiB После Ширина: | Высота: | Размер: 93 KiB |
До Ширина: | Высота: | Размер: 78 KiB После Ширина: | Высота: | Размер: 78 KiB |
До Ширина: | Высота: | Размер: 78 KiB После Ширина: | Высота: | Размер: 78 KiB |
До Ширина: | Высота: | Размер: 56 KiB После Ширина: | Высота: | Размер: 56 KiB |
До Ширина: | Высота: | Размер: 123 KiB После Ширина: | Высота: | Размер: 123 KiB |
После Ширина: | Высота: | Размер: 118 KiB |
До Ширина: | Высота: | Размер: 131 KiB После Ширина: | Высота: | Размер: 131 KiB |
После Ширина: | Высота: | Размер: 81 KiB |
После Ширина: | Высота: | Размер: 72 KiB |
До Ширина: | Высота: | Размер: 81 KiB После Ширина: | Высота: | Размер: 81 KiB |
После Ширина: | Высота: | Размер: 83 KiB |
До Ширина: | Высота: | Размер: 86 KiB После Ширина: | Высота: | Размер: 86 KiB |
После Ширина: | Высота: | Размер: 95 KiB |
До Ширина: | Высота: | Размер: 65 KiB После Ширина: | Высота: | Размер: 65 KiB |
До Ширина: | Высота: | Размер: 52 KiB После Ширина: | Высота: | Размер: 52 KiB |
До Ширина: | Высота: | Размер: 50 KiB После Ширина: | Высота: | Размер: 50 KiB |
После Ширина: | Высота: | Размер: 74 KiB |