├── LICENSE ├── README.md ├── md_images ├── 0.jpg ├── 1.jpg ├── 10.jpg ├── 11.png ├── 12.png ├── 13.png ├── 14.png ├── 15.png ├── 16.png ├── 17.png ├── 18.png ├── 19.png ├── 2.png ├── 20.png ├── 21.png ├── 22.png ├── 23.png ├── 24.png ├── 25.png ├── 26.png ├── 27.png ├── 28.png ├── 29.png ├── 3.png ├── 30.png ├── 31.png ├── 32.png ├── 33.png ├── 34.png ├── 35.png ├── 36.png ├── 37.png ├── 38.png ├── 39.png ├── 4.png ├── 40.png ├── 41.png ├── 42.png ├── 5.jpg ├── 6.jpg ├── 7.jpg ├── 8.jpg └── 9.jpg ├── mlyearning-Chinese ver ├── chapter1.md ├── chapter10.md ├── chapter11.md ├── chapter12.md ├── chapter13.md ├── chapter14.md ├── chapter15.md ├── chapter16.md ├── chapter17.md ├── chapter18.md ├── chapter19.md ├── chapter2.md ├── chapter20.md ├── chapter21.md ├── chapter22.md ├── chapter23.md ├── chapter24.md ├── chapter25.md ├── chapter26.md ├── chapter27.md ├── chapter28.md ├── chapter29.md ├── chapter3.md ├── chapter30.md ├── chapter31.md ├── chapter32.md ├── chapter33.md ├── chapter34.md ├── chapter35.md ├── chapter36.md ├── chapter37.md ├── chapter38.md ├── chapter39.md ├── chapter4.md ├── chapter40.md ├── chapter41.md ├── chapter42.md ├── chapter43.md ├── chapter44.md ├── chapter45.md ├── chapter46.md ├── chapter47.md ├── chapter48.md ├── chapter49.md ├── chapter5.md ├── chapter50.md ├── chapter51.md ├── chapter52.md ├── chapter53.md ├── chapter54.md ├── chapter55.md ├── chapter56.md ├── chapter57.md ├── chapter6.md ├── chapter7.md ├── chapter8.md └── chapter9.md └── mlyearning-Draft ├── NG_MLY10.pdf ├── NG_MLY11.pdf ├── Ng_MLY01.pdf ├── Ng_MLY02.pdf ├── Ng_MLY03.pdf ├── Ng_MLY04.pdf ├── Ng_MLY05.pdf ├── Ng_MLY06.pdf ├── Ng_MLY07.pdf ├── Ng_MLY08.pdf ├── Ng_MLY09.pdf ├── Ng_MLY12.pdf └── Ng_MLY13.pdf /LICENSE: -------------------------------------------------------------------------------- 1 | Attribution-ShareAlike 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More_considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution-ShareAlike 4.0 International Public 58 | License 59 | 60 | By exercising the Licensed Rights (defined below), You accept and agree 61 | to be bound by the terms and conditions of this Creative Commons 62 | Attribution-ShareAlike 4.0 International Public License ("Public 63 | License"). To the extent this Public License may be interpreted as a 64 | contract, You are granted the Licensed Rights in consideration of Your 65 | acceptance of these terms and conditions, and the Licensor grants You 66 | such rights in consideration of benefits the Licensor receives from 67 | making the Licensed Material available under these terms and 68 | conditions. 69 | 70 | 71 | Section 1 -- Definitions. 72 | 73 | a. Adapted Material means material subject to Copyright and Similar 74 | Rights that is derived from or based upon the Licensed Material 75 | and in which the Licensed Material is translated, altered, 76 | arranged, transformed, or otherwise modified in a manner requiring 77 | permission under the Copyright and Similar Rights held by the 78 | Licensor. For purposes of this Public License, where the Licensed 79 | Material is a musical work, performance, or sound recording, 80 | Adapted Material is always produced where the Licensed Material is 81 | synched in timed relation with a moving image. 82 | 83 | b. Adapter's License means the license You apply to Your Copyright 84 | and Similar Rights in Your contributions to Adapted Material in 85 | accordance with the terms and conditions of this Public License. 86 | 87 | c. BY-SA Compatible License means a license listed at 88 | creativecommons.org/compatiblelicenses, approved by Creative 89 | Commons as essentially the equivalent of this Public License. 90 | 91 | d. Copyright and Similar Rights means copyright and/or similar rights 92 | closely related to copyright including, without limitation, 93 | performance, broadcast, sound recording, and Sui Generis Database 94 | Rights, without regard to how the rights are labeled or 95 | categorized. For purposes of this Public License, the rights 96 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 97 | Rights. 98 | 99 | e. Effective Technological Measures means those measures that, in the 100 | absence of proper authority, may not be circumvented under laws 101 | fulfilling obligations under Article 11 of the WIPO Copyright 102 | Treaty adopted on December 20, 1996, and/or similar international 103 | agreements. 104 | 105 | f. Exceptions and Limitations means fair use, fair dealing, and/or 106 | any other exception or limitation to Copyright and Similar Rights 107 | that applies to Your use of the Licensed Material. 108 | 109 | g. License Elements means the license attributes listed in the name 110 | of a Creative Commons Public License. The License Elements of this 111 | Public License are Attribution and ShareAlike. 112 | 113 | h. Licensed Material means the artistic or literary work, database, 114 | or other material to which the Licensor applied this Public 115 | License. 116 | 117 | i. Licensed Rights means the rights granted to You subject to the 118 | terms and conditions of this Public License, which are limited to 119 | all Copyright and Similar Rights that apply to Your use of the 120 | Licensed Material and that the Licensor has authority to license. 121 | 122 | j. Licensor means the individual(s) or entity(ies) granting rights 123 | under this Public License. 124 | 125 | k. Share means to provide material to the public by any means or 126 | process that requires permission under the Licensed Rights, such 127 | as reproduction, public display, public performance, distribution, 128 | dissemination, communication, or importation, and to make material 129 | available to the public including in ways that members of the 130 | public may access the material from a place and at a time 131 | individually chosen by them. 132 | 133 | l. Sui Generis Database Rights means rights other than copyright 134 | resulting from Directive 96/9/EC of the European Parliament and of 135 | the Council of 11 March 1996 on the legal protection of databases, 136 | as amended and/or succeeded, as well as other essentially 137 | equivalent rights anywhere in the world. 138 | 139 | m. You means the individual or entity exercising the Licensed Rights 140 | under this Public License. Your has a corresponding meaning. 141 | 142 | 143 | Section 2 -- Scope. 144 | 145 | a. License grant. 146 | 147 | 1. Subject to the terms and conditions of this Public License, 148 | the Licensor hereby grants You a worldwide, royalty-free, 149 | non-sublicensable, non-exclusive, irrevocable license to 150 | exercise the Licensed Rights in the Licensed Material to: 151 | 152 | a. reproduce and Share the Licensed Material, in whole or 153 | in part; and 154 | 155 | b. produce, reproduce, and Share Adapted Material. 156 | 157 | 2. Exceptions and Limitations. For the avoidance of doubt, where 158 | Exceptions and Limitations apply to Your use, this Public 159 | License does not apply, and You do not need to comply with 160 | its terms and conditions. 161 | 162 | 3. Term. The term of this Public License is specified in Section 163 | 6(a). 164 | 165 | 4. Media and formats; technical modifications allowed. The 166 | Licensor authorizes You to exercise the Licensed Rights in 167 | all media and formats whether now known or hereafter created, 168 | and to make technical modifications necessary to do so. The 169 | Licensor waives and/or agrees not to assert any right or 170 | authority to forbid You from making technical modifications 171 | necessary to exercise the Licensed Rights, including 172 | technical modifications necessary to circumvent Effective 173 | Technological Measures. For purposes of this Public License, 174 | simply making modifications authorized by this Section 2(a) 175 | (4) never produces Adapted Material. 176 | 177 | 5. Downstream recipients. 178 | 179 | a. Offer from the Licensor -- Licensed Material. Every 180 | recipient of the Licensed Material automatically 181 | receives an offer from the Licensor to exercise the 182 | Licensed Rights under the terms and conditions of this 183 | Public License. 184 | 185 | b. Additional offer from the Licensor -- Adapted Material. 186 | Every recipient of Adapted Material from You 187 | automatically receives an offer from the Licensor to 188 | exercise the Licensed Rights in the Adapted Material 189 | under the conditions of the Adapter's License You apply. 190 | 191 | c. No downstream restrictions. You may not offer or impose 192 | any additional or different terms or conditions on, or 193 | apply any Effective Technological Measures to, the 194 | Licensed Material if doing so restricts exercise of the 195 | Licensed Rights by any recipient of the Licensed 196 | Material. 197 | 198 | 6. No endorsement. Nothing in this Public License constitutes or 199 | may be construed as permission to assert or imply that You 200 | are, or that Your use of the Licensed Material is, connected 201 | with, or sponsored, endorsed, or granted official status by, 202 | the Licensor or others designated to receive attribution as 203 | provided in Section 3(a)(1)(A)(i). 204 | 205 | b. Other rights. 206 | 207 | 1. Moral rights, such as the right of integrity, are not 208 | licensed under this Public License, nor are publicity, 209 | privacy, and/or other similar personality rights; however, to 210 | the extent possible, the Licensor waives and/or agrees not to 211 | assert any such rights held by the Licensor to the limited 212 | extent necessary to allow You to exercise the Licensed 213 | Rights, but not otherwise. 214 | 215 | 2. Patent and trademark rights are not licensed under this 216 | Public License. 217 | 218 | 3. To the extent possible, the Licensor waives any right to 219 | collect royalties from You for the exercise of the Licensed 220 | Rights, whether directly or through a collecting society 221 | under any voluntary or waivable statutory or compulsory 222 | licensing scheme. In all other cases the Licensor expressly 223 | reserves any right to collect such royalties. 224 | 225 | 226 | Section 3 -- License Conditions. 227 | 228 | Your exercise of the Licensed Rights is expressly made subject to the 229 | following conditions. 230 | 231 | a. Attribution. 232 | 233 | 1. If You Share the Licensed Material (including in modified 234 | form), You must: 235 | 236 | a. retain the following if it is supplied by the Licensor 237 | with the Licensed Material: 238 | 239 | i. identification of the creator(s) of the Licensed 240 | Material and any others designated to receive 241 | attribution, in any reasonable manner requested by 242 | the Licensor (including by pseudonym if 243 | designated); 244 | 245 | ii. a copyright notice; 246 | 247 | iii. a notice that refers to this Public License; 248 | 249 | iv. a notice that refers to the disclaimer of 250 | warranties; 251 | 252 | v. a URI or hyperlink to the Licensed Material to the 253 | extent reasonably practicable; 254 | 255 | b. indicate if You modified the Licensed Material and 256 | retain an indication of any previous modifications; and 257 | 258 | c. indicate the Licensed Material is licensed under this 259 | Public License, and include the text of, or the URI or 260 | hyperlink to, this Public License. 261 | 262 | 2. You may satisfy the conditions in Section 3(a)(1) in any 263 | reasonable manner based on the medium, means, and context in 264 | which You Share the Licensed Material. For example, it may be 265 | reasonable to satisfy the conditions by providing a URI or 266 | hyperlink to a resource that includes the required 267 | information. 268 | 269 | 3. If requested by the Licensor, You must remove any of the 270 | information required by Section 3(a)(1)(A) to the extent 271 | reasonably practicable. 272 | 273 | b. ShareAlike. 274 | 275 | In addition to the conditions in Section 3(a), if You Share 276 | Adapted Material You produce, the following conditions also apply. 277 | 278 | 1. The Adapter's License You apply must be a Creative Commons 279 | license with the same License Elements, this version or 280 | later, or a BY-SA Compatible License. 281 | 282 | 2. You must include the text of, or the URI or hyperlink to, the 283 | Adapter's License You apply. You may satisfy this condition 284 | in any reasonable manner based on the medium, means, and 285 | context in which You Share Adapted Material. 286 | 287 | 3. You may not offer or impose any additional or different terms 288 | or conditions on, or apply any Effective Technological 289 | Measures to, Adapted Material that restrict exercise of the 290 | rights granted under the Adapter's License You apply. 291 | 292 | 293 | Section 4 -- Sui Generis Database Rights. 294 | 295 | Where the Licensed Rights include Sui Generis Database Rights that 296 | apply to Your use of the Licensed Material: 297 | 298 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 299 | to extract, reuse, reproduce, and Share all or a substantial 300 | portion of the contents of the database; 301 | 302 | b. if You include all or a substantial portion of the database 303 | contents in a database in which You have Sui Generis Database 304 | Rights, then the database in which You have Sui Generis Database 305 | Rights (but not its individual contents) is Adapted Material, 306 | 307 | including for purposes of Section 3(b); and 308 | c. You must comply with the conditions in Section 3(a) if You Share 309 | all or a substantial portion of the contents of the database. 310 | 311 | For the avoidance of doubt, this Section 4 supplements and does not 312 | replace Your obligations under this Public License where the Licensed 313 | Rights include other Copyright and Similar Rights. 314 | 315 | 316 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 317 | 318 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 319 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 320 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 321 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 322 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 323 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 324 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 325 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 326 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 327 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 328 | 329 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 330 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 331 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 332 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 333 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 334 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 335 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 336 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 337 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 338 | 339 | c. The disclaimer of warranties and limitation of liability provided 340 | above shall be interpreted in a manner that, to the extent 341 | possible, most closely approximates an absolute disclaimer and 342 | waiver of all liability. 343 | 344 | 345 | Section 6 -- Term and Termination. 346 | 347 | a. This Public License applies for the term of the Copyright and 348 | Similar Rights licensed here. However, if You fail to comply with 349 | this Public License, then Your rights under this Public License 350 | terminate automatically. 351 | 352 | b. Where Your right to use the Licensed Material has terminated under 353 | Section 6(a), it reinstates: 354 | 355 | 1. automatically as of the date the violation is cured, provided 356 | it is cured within 30 days of Your discovery of the 357 | violation; or 358 | 359 | 2. upon express reinstatement by the Licensor. 360 | 361 | For the avoidance of doubt, this Section 6(b) does not affect any 362 | right the Licensor may have to seek remedies for Your violations 363 | of this Public License. 364 | 365 | c. For the avoidance of doubt, the Licensor may also offer the 366 | Licensed Material under separate terms or conditions or stop 367 | distributing the Licensed Material at any time; however, doing so 368 | will not terminate this Public License. 369 | 370 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 371 | License. 372 | 373 | 374 | Section 7 -- Other Terms and Conditions. 375 | 376 | a. The Licensor shall not be bound by any additional or different 377 | terms or conditions communicated by You unless expressly agreed. 378 | 379 | b. Any arrangements, understandings, or agreements regarding the 380 | Licensed Material not stated herein are separate from and 381 | independent of the terms and conditions of this Public License. 382 | 383 | 384 | Section 8 -- Interpretation. 385 | 386 | a. For the avoidance of doubt, this Public License does not, and 387 | shall not be interpreted to, reduce, limit, restrict, or impose 388 | conditions on any use of the Licensed Material that could lawfully 389 | be made without permission under this Public License. 390 | 391 | b. To the extent possible, if any provision of this Public License is 392 | deemed unenforceable, it shall be automatically reformed to the 393 | minimum extent necessary to make it enforceable. If the provision 394 | cannot be reformed, it shall be severed from this Public License 395 | without affecting the enforceability of the remaining terms and 396 | conditions. 397 | 398 | c. No term or condition of this Public License will be waived and no 399 | failure to comply consented to unless expressly agreed to by the 400 | Licensor. 401 | 402 | d. Nothing in this Public License constitutes or may be interpreted 403 | as a limitation upon, or waiver of, any privileges and immunities 404 | that apply to the Licensor or You, including from the legal 405 | processes of any jurisdiction or authority. 406 | 407 | 408 | ======================================================================= 409 | 410 | Creative Commons is not a party to its public 411 | licenses. Notwithstanding, Creative Commons may elect to apply one of 412 | its public licenses to material it publishes and in those instances 413 | will be considered the “Licensor.” The text of the Creative Commons 414 | public licenses is dedicated to the public domain under the CC0 Public 415 | Domain Dedication. Except for the limited purpose of indicating that 416 | material is shared under a Creative Commons public license or as 417 | otherwise permitted by the Creative Commons policies published at 418 | creativecommons.org/policies, Creative Commons does not authorize the 419 | use of the trademark "Creative Commons" or any other trademark or logo 420 | of Creative Commons without its prior written consent including, 421 | without limitation, in connection with any unauthorized modifications 422 | to any of its public licenses or any other arrangements, 423 | understandings, or agreements concerning use of licensed material. For 424 | the avoidance of doubt, this paragraph does not form part of the 425 | public licenses. 426 | 427 | Creative Commons may be contacted at creativecommons.org. 428 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Machine Learning Yearning 2 | 3 | 本项目是 Andrew NG 的关于机器学习策略的工具书的中文翻译稿源文件!(非商用翻译) 4 | 5 | *欢迎Star* 6 | 7 | 更好的阅读体验,请移步本人博客:[博客传送门](https://alberthg.github.io/tags/#maching%20learning%20yearning) 8 | 9 | 本书的英文原稿全文已于2018年9月29日全部推送完毕,感谢 Andrew NG。 10 | 11 | 官网传送门:[https://www.deeplearning.ai/](https://www.deeplearning.ai/) -OR- [http://www.mlyearning.org/](http://www.mlyearning.org/) 12 | 13 | 目的 14 | ------- 15 | 16 | 根据NG的介绍,本书重点不是 ML 的算法,而是如何使 ML 算法发挥作用。琳琅满目的 ML 算法就像是工具箱里边的各种工具一样,这本书则是教会人们如何使用这些工具。 17 | 18 | 对于书名《Machine Learning Yearning》,我将其翻译为《机器学习要领》,希望能表达出 Andrew NG 编写这本书的目的: 19 | 20 | > focused not on teaching you ML algorithms, but on how to make ML algorithms work. 21 | 22 | 经验即要领,同时单词「yearning」读音和「要领」相似,故以此名之。 23 | 24 | 在原稿中,Andrew NG 把每一个主题都浓缩到 1-2 页的阅读量,是非常精炼的: 25 | 26 | - 1-4:绪论 「Introduction」; 27 | - 5-12:配置开发集和训练集 「Setting up development and test sets」; 28 | - 13-19:基本误差分析 「Basic Error Analysis」; 29 | - 20-27:偏差和方差 「Bias and Variance」; 30 | - 28-32:学习曲线 「Learning curves」; 31 | - 33-35:比较人类水平表现 「Comparing to human-level performance」; 32 | - 36-43:不同分布下的训练和测试 「Training and testing on different distributions」; 33 | - 44-46:调试推理算法 「Debugging inference algorithms」; 34 | - 47-52:端到端的深度学习 「End-to-end deep learning」; 35 | - 53-57:根据组件执行误差分析 「Error analysis by parts」; 36 | - 58:全书结语「Conclusion」。 37 | 38 | 翻译的水平有限(如有错误,请指出),而且有些地方是在经过自己的理解之后并尽量遵照原文进行翻译,只是希望尽可能的读起来通顺。 39 | 40 | 翻译稿 41 | ------- 42 | 43 | 在本书中,你将学习多达 50 多个 Andrew NG 多年总结的工程要领: 44 | 45 | ### 绪论 「Introduction」 46 | 47 | [1、为什么需要机器学习策略](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter1.md) 48 | 49 | [2、如何利用本书帮助你的团队](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter2.md) 50 | 51 | [3、预备知识和符号约定](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter3.md) 52 | 53 | [4、规模化驱动下的机器学习发展](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter4.md) 54 | 55 | ### 配置开发集和训练集 「Setting up development and test sets」 56 | 57 | 随着机器学习正朝着更大的数据集方向发展,关于配置开发/测试集的准则也在发生变化,本章内容将指导你如何在团队中调整机器学习策略,以及如何设置开发集和测试集,以适应现代化的机器学习项目。 58 | 59 | [5、你的开发集和测试集](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter5.md) 60 | 61 | [6、发集和测试集应当服从同一分布](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter6.md) 62 | 63 | [7、开发集/测试集多大合适](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter7.md) 64 | 65 | [8、为团队进行算法优化建立单一数字评估指标](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter8.md) 66 | 67 | [9、优化和满足指标](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter9.md) 68 | 69 | [10、使用开发集和评估指标加速迭代](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter10.md) 70 | 71 | [11、何时更改开发/训练集和评估指标](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter11.md) 72 | 73 | [12、小结:设置开发和测试集](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter12.md) 74 | 75 | ### 基本误差分析 「Basic Error Analysis」 76 | 77 | 本章内容将通过描述手动分析误差的流程,来为项目优化选择合适的方向。 78 | 79 | [13、快速搭建第一个系统并开始迭代](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter13.md) 80 | 81 | [14、误差分析:查看开发集样本来评估想法](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter14.md) 82 | 83 | [15、在误差分析中并行评估多个想法](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter15.md) 84 | 85 | [16、清除标注错误的开发/测试集数据](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter16.md) 86 | 87 | [17、 如果你有一个很大的开发集,拆分为两半,并只关注其中一个](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter17.md) 88 | 89 | [18、眼球开发集和黑盒开发集应该多大](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter18.md) 90 | 91 | [19、小结:基本误差分析](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter19.md) 92 | 93 | ### 偏差和方差 「Bias and Variance」 94 | 95 | 传统的关于偏差和方差的观点在现代机器学习项目中变得越来越不适用,是时候更新这些传统的指导方针了,本章将教你如何利用偏差和方差来优化现代机器学习项目。 96 | 97 | [20、偏差和方差:两大误差来源](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter20.md) 98 | 99 | [21、举例说明偏差和方差](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter21.md) 100 | 101 | [22、比较最优误差](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter22.md) 102 | 103 | [23、解决方差和偏差](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter23.md) 104 | 105 | [24、权衡偏差和方差](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter24.md) 106 | 107 | [25、减少可避免偏差的技巧](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter25.md) 108 | 109 | [26、在训练集上的误差分析](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter26.md) 110 | 111 | [27、减少方差的技巧](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter27.md) 112 | 113 | ### 学习曲线 「Learning curves」 114 | 115 | 本章内容将提供一个更加丰富和直观的方式,来帮助你更好地将偏差归因到可避免偏差或者是方差上。 116 | 117 | [28、诊断偏差和方差:学习曲线](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter28.md) 118 | 119 | [29、绘制训练误差曲线](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter29.md) 120 | 121 | [30、解读学习曲线:高偏差](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter30.md) 122 | 123 | [31、解读学习曲线:其他情况](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter31.md) 124 | 125 | [32、绘制学习曲线](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter32.md) 126 | 127 | ### 比较人类水平表现 「Comparing to human-level performance」 128 | 129 | 本章内容将提出通过和人类表现水平的比较来加快机器学习发展的策略。学习算法的性能表现在越来越多的领域超越了人类水平表现,从语音识别到图像识别(狭义领域)。在深度学习领域,与人类水平表现竞争已然成为一项新兴的运动,当你的算法表现超越人类的时候会发生什么呢? 130 | 131 | [33、为什么我们要比较人类表现水平](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter33.md) 132 | 133 | [34、如何定义人类水平表现](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter34.md) 134 | 135 | [35、超越人类表现水平](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter35.md) 136 | 137 | ### 不同分布下的训练和测试 「Training and testing on different distributions」 138 | 139 | 本章内容将探讨当训练集的数据分布和开发/测试集的分布不一致的时候可能出现的情况。有时候不得不将与测试集不同分布的训练集用在构建模型上,那什么时候这种做法合适呢?如何确保你的算法表现总能在目标分布中表现良好呢?此外,本章同时将教会你如何诊断出数据不匹配,你也将学习如何解决数据不匹配的技术。 140 | 141 | [36、当你不得不在不同分布中进行训练和测试](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter36.md) 142 | 143 | [37、如何决定是否使用所有数据](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter37.md) 144 | 145 | [38、如何决定是否包含不一致的数据](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter38.md) 146 | 147 | [39、数据加权](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter39.md) 148 | 149 | [40、从训练集到开发集的泛化](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter40.md) 150 | 151 | [41、辨别偏差、方差和数据不匹配导致的误差](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter41.md) 152 | 153 | [42、解决数据不匹配的问题](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter42.md) 154 | 155 | [43、人工合成数据](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter43.md) 156 | 157 | ### 调试推理算法 「Debugging inference algorithms」 158 | 159 | 本章内容将探讨用于调试语音识别系统、机器翻译系统和增强学习系统的共享 AI 设计模式是什么? 160 | 161 | [44、优化验证测试](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter44.md) 162 | 163 | [45、优化验证测试的一般形式](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter45.md) 164 | 165 | [46、强化学习的例子](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter46.md) 166 | 167 | ### 端到端的深度学习 「End-to-end deep learning」 168 | 169 | Andrew NG 提到他曾经负责开发过一个大型端到端语音识别系统,并取得的很好的效果,但是他同时表示盲目使用该技术并不是好事。本章内容将探讨什么是端到端的深度学习? 什么时候应该使用它,什么时候应该避免它?同时给出了当不适合使用端到端学习技术之时,如何将机器学习任务分解成多个子任务的建议 170 | 171 | [47、端到端学习技术的兴起](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter47.md) 172 | 173 | [48、更多的端到端学习的例子](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter48.md) 174 | 175 | [49、端到端学习的优点和缺点](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter49.md) 176 | 177 | [50、选择管道组件:数据可用性](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter50.md) 178 | 179 | [51、选择管道组件:任务简单性](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter51.md) 180 | 181 | [52、直接学习复杂的输出](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter52.md) 182 | 183 | ### 根据组件执行误差分析 「Error analysis by parts」 184 | 185 | 本章学习到如何进行机器学习管道的误差分析,如何利用复杂系统的组件来为误差分析提供帮助。 186 | 187 | [53、根据组件执行误差分析](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter53.md) 188 | 189 | [54、将误差归因到某个组件](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter54.md) 190 | 191 | [55、误差归因的一般情况](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter55.md) 192 | 193 | [56、组件误差分析与人类效率的比较](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter56.md) 194 | 195 | [57、发现有缺陷的机器学习管道](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter57.md) 196 | 197 | ### 全书结语「Conclusion」 198 | 199 | 结语部分我把它和第57节合并了,没什么内容的! 200 | 201 | [58、全书结语](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/blob/master/mlyearning-Chinese%20ver/chapter57.md) 202 | 203 | 🎉🎉🎉🎉 完结撒花 🎉🎉🎉🎉🎉 204 | 205 | 英文原稿 206 | ------- 207 | 208 | 详见文件夹:[「mlyearning-Draft」](https://github.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/tree/master/mlyearning-Draft) 209 | 210 | - 「Ng_MLY01.pdf」:1-14 节 211 | - 「Ng_MLY02.pdf」:15-19 节 212 | - 「Ng_MLY03.pdf」:20-22 节 213 | - 「Ng_MLY04.pdf」:23-27 节 214 | - 「Ng_MLY05.pdf」:28-30 节 215 | - 「Ng_MLY06.pdf」:31-32 节 216 | - 「Ng_MLY07.pdf」:33-35 节 217 | - 「Ng_MLY08.pdf」:36-39 节 218 | - 「Ng_MLY09.pdf」:40-43 节 219 | - 「Ng_MLY10.pdf」:44-46 节 220 | - 「Ng_MLY11.pdf」:47-49 节 221 | - 「Ng_MLY12.pdf」:50-52 节 222 | - 「Ng_MLY13.pdf」:53-58 节 223 | 224 | 致谢 225 | --------- 226 | 227 | 感谢蒋兆函同学为翻译提供的建议! 228 | 229 | License 230 | ------- 231 | 232 | [知识共享署名-相同方式共享 4.0 国际许可协议(CC BY-SA 4.0)](https://creativecommons.org/licenses/by-sa/4.0/) 233 | 234 | 备注 235 | ------- 236 | 237 | GitHub 的 README.md 文件不提供 LaTeX 公式解析,可使用 Chrome 浏览器插件 [GitHub with MathJax](https://chrome.google.com/webstore/detail/github-with-mathjax/ioemnmodlmafdkllaclgeombjnmnbima) 238 | -------------------------------------------------------------------------------- /md_images/0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/0.jpg -------------------------------------------------------------------------------- /md_images/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/1.jpg -------------------------------------------------------------------------------- /md_images/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/10.jpg -------------------------------------------------------------------------------- /md_images/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/11.png -------------------------------------------------------------------------------- /md_images/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/12.png -------------------------------------------------------------------------------- /md_images/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/13.png -------------------------------------------------------------------------------- /md_images/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/14.png -------------------------------------------------------------------------------- /md_images/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/15.png -------------------------------------------------------------------------------- /md_images/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/16.png -------------------------------------------------------------------------------- /md_images/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/17.png -------------------------------------------------------------------------------- /md_images/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/18.png -------------------------------------------------------------------------------- /md_images/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/19.png -------------------------------------------------------------------------------- /md_images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/2.png -------------------------------------------------------------------------------- /md_images/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/20.png -------------------------------------------------------------------------------- /md_images/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/21.png -------------------------------------------------------------------------------- /md_images/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/22.png -------------------------------------------------------------------------------- /md_images/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/23.png -------------------------------------------------------------------------------- /md_images/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/24.png -------------------------------------------------------------------------------- /md_images/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/25.png -------------------------------------------------------------------------------- /md_images/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/26.png -------------------------------------------------------------------------------- /md_images/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/27.png -------------------------------------------------------------------------------- /md_images/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/28.png -------------------------------------------------------------------------------- /md_images/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/29.png -------------------------------------------------------------------------------- /md_images/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/3.png -------------------------------------------------------------------------------- /md_images/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/30.png -------------------------------------------------------------------------------- /md_images/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/31.png -------------------------------------------------------------------------------- /md_images/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/32.png -------------------------------------------------------------------------------- /md_images/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/33.png -------------------------------------------------------------------------------- /md_images/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/34.png -------------------------------------------------------------------------------- /md_images/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/35.png -------------------------------------------------------------------------------- /md_images/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/36.png -------------------------------------------------------------------------------- /md_images/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/37.png -------------------------------------------------------------------------------- /md_images/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/38.png -------------------------------------------------------------------------------- /md_images/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/39.png -------------------------------------------------------------------------------- /md_images/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/4.png -------------------------------------------------------------------------------- /md_images/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/40.png -------------------------------------------------------------------------------- /md_images/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/41.png -------------------------------------------------------------------------------- /md_images/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/42.png -------------------------------------------------------------------------------- /md_images/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/5.jpg -------------------------------------------------------------------------------- /md_images/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/6.jpg -------------------------------------------------------------------------------- /md_images/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/7.jpg -------------------------------------------------------------------------------- /md_images/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/8.jpg -------------------------------------------------------------------------------- /md_images/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/md_images/9.jpg -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter1.md: -------------------------------------------------------------------------------- 1 | ## 1. 为什么需要机器学习策略? 2 | 3 | 机器学习是很多重要应用的基础,包括网页搜索、垃圾邮件分类、语音识别、商品推荐等等。假设你和你的团队正在开发一项机器学习相关的应用,并且想实现项目的快速迭代。本书介绍的内容将会为你提供帮助。 4 | 5 | 例子:创立一个关于猫咪图片的创业公司 6 | 7 | 假设你正在建立一个新的公司,该公司将为爱猫人士提供丰富的猫咪图片。 8 | 9 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/0.jpg) 10 | 11 | 其中的一个潮流的方法就是:使用神经网络(Neural Network)搭建的计算机视觉系统(Computer Vision System)来检测图片中的猫。 12 | 13 | 但,很不幸的是,系统的学习算法准确率(Accuracy)并不尽如人意,因此,你在改进算法的过程中必须承担来自各个方面的巨大压力,那么,具体怎么办呢? 14 | 15 | 你的团队有很多改善算法点子,例如: 16 | 17 | - 获取更多的数据:收集更多有关猫咪的图片; 18 | - 收集更加多元化的训练集。比如,处在不同位置的猫咪的图片、有不同颜色的猫咪的图片、来自相机不同的参数拍摄出来的猫咪的图片…… 19 | - 通过跑更多轮数的梯度下降(Gradient Descent)迭代,延长网络的训练时间; 20 | - 尝试更大规模的神经网络,比如设置更多的层数、隐藏单元、参数等; 21 | - 尝试较小规模的神经网络; 22 | - 尝试在网络加入正则化(Regularization)(例如L2正则化); 23 | - 改变神经网络的结构(比如改变激活函数(Activation Function)、隐藏单元(Hidden Units)的数量等等) 24 | - …… 25 | 26 | 如果选择了正确的优化方向,你将实现一个领先业界的猫咪图库平台,然后带领你的公司走向巅峰。但是如果你的优化措施选择并不好,大概率你会浪费掉数个月的时间,结果依旧没有改善。你将如何继续呢? 27 | 28 | 本书将会告诉你怎么做!大多数的机器学习问题都会留下一些线索,这些线索则会告诉你什么是有用的尝试,什么是徒劳的。学会理解这些暴露出来的线索能够节省你数月甚至上年的开发时间。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter10.md: -------------------------------------------------------------------------------- 1 | ## 10. 使用开发集和评估指标加速迭代 2 | 3 | 对于一个新的问题很难预先知哪种解决办法最有效。即使是那些经验丰富的机器学习专家,在发现有效的解决办法之前也大量尝试各种想法,在构建一个机器学习系统的时候,我通常: 4 | 5 | 1. 从一些关于如何构建系统的idea开始; 6 | 2. 在代码中实现这些想法; 7 | 3. 通过实验观察这个idea的效果(通常来说最开始的想法都是无效的!),基于这些知识,回过头来产生更多的idea,并继续迭代。 8 | 9 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/4.png) 10 | 11 | 这是一个迭代的过程。这个循环的过程越快,你的进展就会越快。这就是开发/测试集和单一评估指标非常重要的原因:每次你尝试一个想法时,通过在开发集上衡量该想法的性能,让你快速地判断出你自己是否朝着正确的方向前进。 12 | 13 | 相反,假设你没有特定的开发集和评估指标。那么每次当你的团队构建出新的猫分类器时,你都不得不将它整合进你的App里,并好好地玩上个几小时来感受这个新的分类器的性能是否有所提升,这种方法非常慢。另外,如果你的团队将分类器的性能从95.0%提升到95.1%,通过使用App的方式并不能让你感受到这0.1%的变化。而每次这0.1%的改进,累积起来就会帮助你的系统取得很大的进步。拥有一个开发集和评估标准让你能够快速的发现那些成功地带来了小的(大的)改进的想法,从而让你可以快速的决定哪些办法是需要继续提炼的,哪些是可以舍弃的。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter11.md: -------------------------------------------------------------------------------- 1 | ## 11. 何时更改开发/训练集和评估指标 2 | 3 | 每当开始一个新项目的时候,我都会试图快速地去选择开发集和训练集,因为这可以给团队一个明确定义好的目标。 4 | 5 | 我通常会要求我的团队在不到一周的时间内创建好一个初始的开发/训练集(很少情况下会长于这个时间),最好是能够提出一个不太完美的方案并快速行动起来,而不是在过度思考。但是“一周”的这个时间限制并不适用于成熟的应用,比如,反垃圾邮件就是一个成熟的深度学习应用。我曾见过那些负责成熟系统的团队们,甚至会花费数个月的时间来去获取更好的开发/训练集。 6 | 7 | 如果你后来意识到了你的初始开发/训练集或者评估指标没有达到要求,那么一定要尽快地修改它们。例如,如果你的开发集+评估指标认为分类器A好于分类器B,但是你的团队却认为分类器B其实更适合你的产品,那么这可能表示你该修改你的开发/测试集或者评估指标了。 8 | 9 | 下列是可能导致分类器A的评级偏高的三个主要原因: 10 | 11 | - *开发/测试集不服从实际数据的真实分布。* 12 | 13 | 假设你的开发/训练集里大部分都是成年的猫。这时,你检查你的猫分类App发现用户比预期上传了更多小猫咪的图片。这个情况下,开发/测试集的分布就不能很好的代表真实数据的分布了,此时应该做的事就是更新你的开发/训练集使其更具代表性。 14 | 15 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/5.jpg) 16 | 17 | - *你过拟合了开发集。* 18 | 19 | 重复地使用开发集评估想法的过程会导致你的算法慢慢过拟合开发集。当你完成开发后,你会在测试集上评估你的系统,如果发现算法在你的开发集的表现明显优于测试集,这就意味已经过拟合了开发集了,这种情况下,需要获取一个新的开发集。 20 | 21 | 如果你需要跟踪团队的进度,你也可以定期使用测试集对系统进行评估,比如一周一次或者一个月一次。但不要使用测试集来做出关于改进算法任何决定,包括是否回滚到上一周的系统。一旦你这样做了,你的系统将会开始对测试集过拟合,同时再也不能依靠它来给出系统性能的完全无偏估计(Completely Unbiased Estimate)(你可能需要在发表论文或者根据某个评估指标做出重要的商业决策的时候使用这个完全无偏估计)。 22 | 23 | - *该评估指标衡量的不是项目需要优化的内容。* 24 | 25 | 以你的猫分类App为例,你的评估指标是分类准确度,这个评估指标目前认为分类器A好于分类器B.但是当你尝试应用这两种算法的时候,发现分类器A偶尔会将色情图片识别为猫,那么即使分类器A的准确度更高,无法完全将色情图片过滤所引发的不良印象意味着它的表现也是无法被接受的。你应该怎么做? 26 | 27 | 在这个例子中,该评估指标未能准确判断出对于产品而言算法B比算法A更好这一事实。所以,你不能再相信该指标能够选出最优算法,是时候改变评估指标了。比如,你可以更改评估指标来加大对色情图片的惩罚权重。我强烈建议你选择一个新的评估指标,以此来为团队定义一个新的目标,而不是在一个没有可信度的指标下持续太长时间,最后不得不手工选择分类器。 28 | 29 | 在项目中更改开发/测试集或者评估指标是很常见的。使用初始开发/测试集和评估指标能够帮助你快速迭代。如果你发现开发/测试集或者评估指标不再为你的团队指明正确的方向,也不是什么大不了的事情!只需要修改它们,并确保你的团队了解了新的方向。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter12.md: -------------------------------------------------------------------------------- 1 | ## 12. 小结:设置开发和测试集 2 | 3 | - 从能反映你将来希望获得的数据并想做得更好的分布中选取开发集和测试集。这可能不同于你的训练集; 4 | - 尽可能选择服从同一分布的开发集和测试集; 5 | - 为你的团队选择一个单一数字评估指标来进行优化。如果你关心多个目标,考虑将他们合并到一个公式中(例如多个误差指标的均值)或者定义好满足指标和优化指标; 6 | - 机器学习是一个高速迭代的过程:在发现满意的方法之前可能要尝试很多的idea; 7 | - 拥有开发/训练集和单一数字评估指标能够帮助你快速评估算法,从而加快迭代速度; 8 | - 当开始构建一个全新的应用的时候,尝试快速在一周内建立开发/训练集和评估指标。当然,在成熟的应用上花费更长的时间建立这些指标是没问题的; 9 | - 当你拥有大量数据的时候,传统的70%/30%的训练集/测试集分割比例不再适用,开发集和测试集对总数据集的占比可以远远少于30%; 10 | - 你的开发集应该足够大,大到能够检测到你的算法准确率上的有意义的变化,当然也没有必要太大。你的测试集应该大到能够为你系统性能评估提供一个高可信度; 11 | - 如果你的开发集和评估指标不能再正确地指导你的团队,请迅速修改它们:(i)如果你过拟合了开发集,请增大开发集数据量、(ii)如果开发集/测试集的分布不服从真实数据的分布,请获取新的开发/测试集、(iii)如果你的评估指标不再衡量对你而言最重要的内容,请更新评估指标。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter13.md: -------------------------------------------------------------------------------- 1 | ## 13. 快速搭建第一个系统并开始迭代 2 | 3 | 你想要构建一个新的反垃圾邮件系统,你的团队有几个想法: 4 | 5 | - 收集一个大的垃圾邮件训练集,例如,设置诱饵系统(Honeypot):故意将一个假的电子邮件地址分发给已知的垃圾邮件发送方,以便自动收集他们发送的垃圾邮件; 6 | - 开发用于识别电子邮件文本内容的功能; 7 | - 开发用于识别电子邮件标题特征的功能,以分析出邮件消息都经过了哪些服务器; 8 | - 等等…… 9 | 10 | 即使我在反垃圾邮件系统上有着丰富的经验,也很难选择其中的一个方向。如果你不是该领域专家的话,那会更难。 11 | 12 | 所以,不要试图去设计和构建一个完美的系统。相反,应该快速地构建和训练出一个初始系统来——这或许只需要几天时间 [1],即使这个基础系统和你要建立的最佳系统隔个十万八千里。但对这个基础系统进行研究仍然是值得的:你将快速找到一些线索来帮助你指出你该投入时间的最有希望的方向。接下来的几个章节将指导你如何理解这些线索。 13 | 14 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/6.jpg) 15 | 16 | > [1].这个建议是针对那些想要构建人工智能应用程序的读者,而不是那些想要发表学术论文的人。稍后我会回到做研究的话题上来。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter14.md: -------------------------------------------------------------------------------- 1 | ## 14. 误差分析:查看开发集样本来评估想法 2 | 3 | 当你在使用你的猫咪分类App的时候,你注意到有几张狗的照片被错误分类成了猫。这些狗看起来也确实像猫。 4 | 5 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/7.jpg) 6 | 7 | 一个团队成员建议加入第三方软件,这样可以让系统更好的处理狗的图片。这个变动预计将耗费一个月的时间,同时团队的其他成员也很热衷于这个方案。你应该让他们继续下去吗? 8 | 9 | 在投入这一个月的时间来完成这项任务之前,我建议你应该首先评估下这个改变到底能提升多少系统准确率。然后,你才可以更加理性地决定是否值得为此花费一个月的开发时间,或者说不如用这一个月时间去完成一些其他的任务。 10 | 11 | 具体来说,你可以做以下事情: 12 | 13 | 1. 收集你系统误分类((Misclassified)的100个开发集样例,即系统发生错误的那些样本; 14 | 2. 人工检查这些样例,并记录它们中的狗图像的占比。 15 | 16 | 检查误分类样例的过程被称为:误差分析(Error Analysis)。在这个例子中,如果你发现在误分类的样本中狗的图片占比只有5%,那么无论你如何改进对狗的识别算法,都不可能降低5%以上的错误,换句话说,5%是预定的改进计划(加入第三方库)所能提升的“上限(Ceiling)”。因此,如果你的系统目前的准确率是90%(10%的误差),那么这个改进最多能将准确率提升到90.5% [1]。 17 | 18 | > [1].译者注:上一段,说到的10%的误差应该指的是开发集误差。因为取出的100个误分类样例都来自10%的开发集误差样本里边,也就是如果你将这5%的错误全部消除,对于整个开发集来说,提升的性能也就只有0.5%(10%的5%=0.5%),即从90%->90.5%。 19 | 20 | 相反的,如果你发现在误分类的样本中有50%被误分类为狗,那么你可以坚信这个提议(引入第三方软件)会对系统准确率的提升有很大帮助。它可以把准确率从90%提升到95% [2]。 21 | 22 | > [2].译者注:10%的开发集误差,里边有50%是被误分类为狗,假设完全修复这个bug可以提升5%(10%的50%=5%),也就是从90%->95%。 23 | 24 | 这种简单的误差分析计算过程为你提供了一种方法来评估为“修正误分类为狗”这个问题而加入第三方软件的潜在价值。它为决定是否将时间投入到这项工作提供了量化基础。 25 | 26 | 误差分析经常能帮助你弄清楚不同方向所隐藏的价值。我曾经常看到许多工程师都不愿意进行误差分析。相比于质疑某个想法是否值得花时间投入,直接扎入一个想法并行动更加让人感到刺激。这是一个常见的错误:这种习惯可能会导致你的团队花费了一个月的时间才发现它并不能为系统带来什么好处。 27 | 28 | 手动检查这100个误分类样例并不需要花费很长的时间。即使你每幅图片都花费1分钟,总的算下来也就是不到2小时的事情。而这短短的两个小时却能节省你一个月的精力。 29 | 30 | *“误差分析”是指在开发集中检查被算法错误分类的那些样本以便理解错误根本原因的过程。它能够帮助你确定项目的优先顺序(如本例所示),并启发我们接下来将要考虑的新的方向。接下来的几节内容还将接着介绍一些误差分析的最佳实践。* -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter15.md: -------------------------------------------------------------------------------- 1 | ## 15. 在误差分析中并行评估多个想法 2 | 3 | 你的团队有几个改进猫检测器的想法。 4 | 5 | - 修正算法中将狗识别为猫的问题; 6 | - 修正算法中将大型猫科动物(Great Cat)(狮子,豹)识别为家猫的问题; 7 | - 提升系统在模糊图像(Blurry Images)上的性能表现。 8 | - …… 9 | 10 | 你可以同时有效地评估所有的这些想法。我通常会列一张表,并在开发集上检查错误分类的100张图像的时候填写它。我同时也会写下可能帮助我分析具体例子的备注。为了说明这个过程。我们来看下面的一张表,它是一个由四个样本组成的小开发集: 11 | 12 | 图片(Image)|狗(Dog)|大型猫科动物(Great Cat)|模糊图像(Blurry)|备注(Comments) 13 | ---|---|---|---|--- 14 | 1|√|||不寻常颜色的斗牛犬 15 | 2|||√| 16 | 3||√|√|狮子;照片是在雨天的动物园拍摄 17 | 4||√||豹子在树后面 18 | 占总数百分比|25%|50%|50%| 19 | 20 | 在上表中,图片3在“Great Cat”和“Blurry”两列都被勾选了。一个示例可能与多个类别关联,所以底部的百分比总值并不一定等于100%。 21 | 22 | 尽管你可能会制定一些类别(狗,大型猫科动物,模糊图像等等),然后将开发集的误分类图像进行归类,但在实践中,一旦你开始浏览这些样本,你可能会受到启发,发现其他的错误类别。比如在浏览了一些样例之后,你发现许多图片分类错误是因为Instagram的滤镜造成的,你可以回到表格中,添加“Instagram”列。手动查看算法错误分类的示例,并思考“如果是人的话,能否/如何正确标记图片”,通常这能激发你提出新的错误类别和解决方案。 23 | 24 | 你有办法去改进的错误类别才是最有帮助的错误类别。例如,如果你有“撤销Instagram滤镜并将其恢复为原始图像”的好办法的话,那么添加Instagram类别则是最有用的。不过,你不必局限在那些你知道如何去改进的错误类别上。这个过程的目的是建立你最希望关注的领域的直觉。 25 | 26 | 误差分析是一个迭代的过程。如果你开始没有想到任何的错误类别也不用担心。看过几组图片之后,你可能就能想出一些错误类别了。在对一些图片进行手动分类之后,你可能考虑到一些新的类别,此时就要根据新的类别对图片重新检查。 27 | 28 | 假设你完成了对开发集上那100张误分类图片的分类,并得到下列的结果: 29 | 30 | 图片(Image)|狗(Dog)|大型猫科动物(Great Cat)|模糊图像(Blurry)|备注(Comments) 31 | ---|---|---|---|--- 32 | 1|√|||不寻常颜色的斗牛犬 33 | 2|||√| 34 | 3||√|√|狮子;照片是在雨天的动物园拍摄 35 | 4||√||豹子在树后面 36 | ……|……|……|……|…… 37 | 占总数百分比|8%|43%|61%| 38 | 39 | 从上表你发现,处理分类为狗的这个问题最多只能消除8%的错误。而处理“Great Cat”和“Blurry”的问题却可以消除更多错误。因此,你可以挑选后两个之一来继续努力。当然,如果你的团队人手足够,也可以并行地同时开展多个方向的工作,你可以分派一些工程师负责“Great Cat”方向,分派另一些在“Blurry”方向。 40 | 41 | “误差分析”不会产生一个严格的数学公式来告诉你最优先的任务是什么。你还必须考虑你想在不同的错误类别上取得多少的进展,以及处理每个类别所需要的工作量。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter16.md: -------------------------------------------------------------------------------- 1 | ## 16. 清除标注错误的开发/测试集数据 2 | 3 | 在误差分析的过程中,你可能注意到开发集中有些样本被人为的错误标记(Mislabeled)了。当我在这里提到“Mislabeled”的时候,我的意思是这些图片在被输入到算法之前就已经被人为的贴错了标签。比如,样本$(x,y)$中的标签$y$是错的,有一些不是猫的图片被贴上了猫的标签。如果你怀疑被错误标记的数据很重要,请添加一个错误类别来跟踪被贴错标签的样本。 4 | 5 | 图片(Image)|狗(Dog)|大型猫科动物(Great Cat)|模糊图像(Blurry)|贴错标签(Mislabeled)|备注(Comments) 6 | ---|---|---|---|---|--- 7 | ……|……|……|……|…… 8 | 98||||√|不寻常颜色的斗牛犬 9 | 99||√|| 10 | 100||||√|狮子;照片 11 | 占总数百分比|8%|43%|61%|6%| 12 | 13 | 那么是否值得修正开发集中这6%的标记出错的例子呢?请记住,开发集的目的是为了帮助你快速评估你的算法,以便判断是算法A还是算法B更好。如果被贴错标签的开发集数据妨碍了你做出这些判断。那么花时间去纠正这些人为标签错误是值得的。 14 | 15 | 例如:假设你的分类器新性能如下: 16 | 17 | - 开发集的整体准确率-----90%(10%的误差); 18 | - 由于贴错标签导致的错误-----0.6%(占开发集错误的6%); 19 | - 由于其他原因导致的错误-----9.4%(占开发集错误的94%)。 20 | 21 | 这里,相对于9.4%的错误,由于错误标记导致的0.6%变得并不那么重要例如。在开发集中手动修复标记错误的图像没有什么坏处,但是这样做并不是必须的。因为标记出错导致的错误是总体错误的一小部分而已(0.6%对于10%来说,可以忽略了)。 22 | 23 | 假设你不断改进猫分类器并达到了以下性能表现: 24 | 25 | - 开发集的整体准确率-----98.0%(2.0%的误差); 26 | - 由于贴错标签导致的错误-----0.6%(占开发集错误的30%); 27 | - 由于其他原因导致的错误-----1.4%(占开发集错误的70%)。 28 | 29 | 上述中,30%的错误是由于错误标记开发集的样本导致的,当测得的那么大一部分的错误都是来自开发集标记出错。这种情况下,就值得去提高开发集中标签的质量了。(0.6%对于2%来说,已然不能被忽略)。 30 | 31 | 开始时容忍一些错误标记的开发集/测试集样本并不罕见,随着系统的不断优化,错误标记示例的比例随着总的误差降低而增长,当这个比例对于总的误差来说不能被忽略的时候,就不能再继续容忍这些标记错误的样本了。 32 | 33 | 最后一章解释了如何通过算法改进来改善错误类别,例如狗、大型猫科动物、模糊图像等。在本章,你还可以学到通过改进数据标签来处理“Mislabeled”类别。 34 | 35 | 无论你使用什么方式来修复开发集标签,请记住同时将这个方法用在测试集上,以便让开发集和测试集继续服从同一分布。将开发集和测试集一起处理可以避免我们在第二章的第六节提到的问题,这个问题就是:当你的团队优化了开发集的性能之后才意识到是根据不同的测试集来判断不同的标准。(两者不同分布) 36 | 37 | 如果你决定了要提高标签的质量,请考虑仔细检查系统错误分类的示例标签以及正确分类的示例标签。在一个例子中,原始标签和学习算法都可能是错误的。如果你只修复被系统错误分类样例的标签,则会在评估中引入偏差(Bias),如果你有1000个样本大小的开发集,同时你的分类器有98%的准确率,那么检查该算法错误分类的20个样本比检查正确分类的980个样本要容易的多。因为在实践中只检查那些被错误分类的样本要更简单,正因为如此,偏差会蔓延到开发集中去。如果你只对开发产品或者应用程序感兴趣,这点偏差是可以接受的,但是如果你计划在学术论文上使用该结果,或者在需要完全无偏估计测量测试集准确率的时候,就会出现问题。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter17.md: -------------------------------------------------------------------------------- 1 | ## 17. 如果你有一个很大的开发集,拆分为两半,并只关注其中一个 2 | 3 | 假设你有一个5000个样本大小的开发集,其中误差是20%,也就是说,你的算法大约误分类了1000个样本。手动检查这1000个样本需要花费很长时间,因此我们决定在误差分析中只使用一部分误分类样本。 4 | 5 | 在这种情况下,我会明确地将开发集分为两个子集,并全力关注其中一个,通常对于您手动查看的那部分样本会很快的出现过拟合现象。你可以使用另一个子集来对参数进行调优。 6 | 7 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/8.jpg) 8 | 9 | 让我们继续上边的例子,在这里,算法对5000个开发集样本分类,结果是大约有1000个样本被误分类了,同时假设我们将要手动检查100个误分类样本(占总错误的10%)。 10 | 11 | 你应当随机选择10%的开发集样本,将其放入一个我们称之为“眼球开发集(​Eyeball dev set)”的集合中,以提醒自己正在使用我们自己的眼睛来观察(人工检查)。(对于语音识别项目,我们是用耳朵来听音频片段,可能将这部分样本集合称作“耳朵开发集”更贴切一点)。因此,这个“眼球开发集”有500个样本组成,我们希望我们的算法在此数据机上的误分类样本个数大概有100个(误差是20%)。 12 | 13 | 对于开发集的另一个子集,称为“黑盒开发集(Blackbox dev set)”,将会拥有4500个样本。你可以用这个“黑盒开发集”通过测量误差率来自动评估分类器,你也可以使用这部分样本来选择算法或者调整超参数。然而你应该避免对它进行人工检查,我们之所以使用“黑盒”这个词,就是要强调我们使用的这部分数据只是为了用来获取黑盒对分类器的评估。 14 | 15 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/10.jpg) 16 | 17 | 为什么我们要明确地将开发集分为“眼球开发集”和“黑盒开发集”呢?因为既然你能够直接对眼球开发集中的样本进行人工检查,意味着这部分数据会很快出现过拟合现象。如果你发现算法在眼球开发集的性能表现比黑盒开发集中的提升的更快,那么意味着你已经过拟合了眼球开发集了。在这种情况下,你可能需要放弃这部分数据,并通过将更多的黑盒开发集的数据转移到眼球开发集中,或者通过获取新的标记数据来找到新的眼球开发集。 18 | 19 | 将你的开发集数据明确的拆分为“眼球开发集”和“黑盒开发集”,可以让你及时知道在手动误差分析的过程中何时过拟合了眼球开发集。 20 | -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter18.md: -------------------------------------------------------------------------------- 1 | ## 18. 眼球开发集和黑盒开发集应该多大? 2 | 3 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/8.jpg) 4 | 5 | 你的眼球开发集应该足够大,大到能够让你分析出算法的主要错误类别。如果你正在负责一项人类表现良好的任务(如识别图像中的猫),以下是一些粗略的指导方针: 6 | 7 | - 如果你的分类器在眼球开发集中犯错10次——这是非常小的误差,将很难估计不同错误类别的影响,即使你的数据集很小,无法继续扩大开发集规模,但是有总比没有好,这将依然有助于项目的优先级制定; 8 | - 如果分类器在眼球开发集中犯错20次,你将开始大概地了解错误的来源; 9 | - 如果有约50个错误,你会比较好的了解错误的主要来源; 10 | - 如果大约100个错误,你将能够深刻的理解错误的主要来源,我曾看到有人手动分析过多达500个的错误。只要你足够的数据,就不会有什么坏处。 11 | 12 | 假设你的分类器有5%的误差,为了确保在眼球开发集中会出现约100个错误标记的样例,眼球开发集必须有大约2000个样本(0.05*2000=100)。随着分类器的误差变低,为了获得足够多的错误来分析,眼球开发集的样本量则要越大。 13 | 14 | 如果你正在负责一项连人类也没办法做的很好的任务,那么检查眼球开发集的这项操作作用不大,因为很难找出算法不能正确分类一个样本的原因。这种情况下,忽略眼球开发集吧,我们将在后续章节讨论此类问题的解决方案。 15 | 16 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/10.jpg) 17 | 18 | 那黑盒开发集又有哪些要点呢?我们之前提到过,开发集的样本量从1000-10000都是很常见的。现在完善以下这一表述:一个有着1000-10000个样本的黑盒开发集基本上能够为你提供足够的数据量来进行参数调优和模型选择。一个含有100个样本的黑盒开发集虽然小,但依然是有用处的。 19 | 20 | 如果你只有一个小的开发集,那么你可能没办法将其分割成足够大的眼球开发集和黑盒开发集。取而代之的操作是你不得不将整个开发集都当作是眼球开发集——你将手动检查整个开发集。 21 | 22 | 在眼球开发集和黑盒开发集之间,我认为眼球开发集更加重要(假设你正在研究一个人类表现水平很高的问题,检查这些样本能帮你获得对系统性能表现的深刻理解)。如果你只有一个眼球开发集,你可以在这个开发集中进行误差分析、参数调优和模型选择。只有一个眼球开发集的缺点只是出现过拟合的风险更大而已。 23 | 24 | 如果你有大量的数据,那么眼球开发集的大小将主要取决于你想要分配多少时间去手动分析它们。但是,我基本上没看到过有人会去手动分析超过1000个错误。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter19.md: -------------------------------------------------------------------------------- 1 | ## 19. 小结:基本误差分析 2 | 3 | - 当你开始一个新项目,特别是当你并不是该领域的专家时,很难正确猜测最有希望的方向; 4 | - 不要一开始就计划着构建一个完美的系统,尝试在短短的几天时间内快速建立并训练出一个初始系统来,然后使用误差分析手段来识别出最有前途的优化方向并从这个方向出发对算法进行迭代; 5 | - 通过手动检查的方式分析100个算法误分类的开发集样例,并算出主要的错误类别的比例。利用这个信息来确定优先级顺序; 6 | - 考虑将开发集分割成眼球开发集(手动检查)和黑盒开发集(不手动检查)。如果算法在眼球开发集的表现比黑盒开发集的表现好的多,那么说明你已经过拟合了眼球开发集,此时应考虑为眼球开发集获取更多的数据。 7 | - 眼球开发集应该足够大以便你的算法能提供足够的误分类样本供你分析。对于很多应用程序来说,1000-10000个样本大小的黑盒开发集足够了; 8 | - 如果你的开发集不够大,将无法按照这种方式拆分,此时只需将整个开发集当作眼球开发集进行手动错误分析、模型选择和参数调优。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter2.md: -------------------------------------------------------------------------------- 1 | ## 2. 如何利用本书帮助你的团队 2 | 3 | 读完本书之后,您将对如何为机器学习项目设定技术方向有一个深刻的理解。 4 | 5 | 但是你的队友们可能并不能理解您为什么要推荐一个这样一个特定的方向,比如,你建议要定义好一个单一的评价指标。关于你的建议,队友们并不信服,那么你将如何说服他们呢? 6 | 7 | 这也就是为什么本书的章节内容都这么简短的原因:你可以将需要的章节打印出来,让你的队友只需要阅读1-2页你想让他们理解的内容。 8 | 9 | 在优化问题上一个小小的改动就可能对你团队的产品产生巨大的影响。通过帮助团队做出高效的优化改动,来让你成为你团队里边的超级英雄吧。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter20.md: -------------------------------------------------------------------------------- 1 | ## 20. 偏差和方差:两大误差来源 2 | 3 | 假设你的训练、开发和测试集都服从同一分布,那么你应该总是试图去获取更多的训练数据,因为这能提高你的系统性能,对吗? 4 | 5 | 尽管,有大量可供获取的数据并没有坏处,但不幸的是,它并不是总能像你期望的那样给你带来帮助,有时候只顾着获取更多的数据只会是浪费时间。那么该如何决定什么时候添加数据什么时候不添加数据呢? 6 | 7 | 在机器学习中,有两个主要的误差(Error)来源:偏差(Bias)和方差(Variance)。了解这两个指标能够省时省力地帮助我们作出是否添加数据或者其它能够提高系统性能的策略决定。 8 | 9 | 假设你希望构建一个只有5%误差的猫咪识别器。目前,你的训练集误差有15%,而开发集的误差有16%。这种情况下,往训练集塞更多的数据用处不大。此时的你应该关注其他变化。事实上,在你的训练集上增加更多的样本数据只会让你的算法在训练集上表现的越来越好而已。(我们会在后边的章节解释原因!) 10 | 11 | 如果当前你的算法在训练集上的误差是15%(准确率85%),而你的目标是降低误差到5%(准确率95%),因此首要的问题就是提高算法在训练集上的性能表现。算法在开发集和测试集的性能往往要低于训练集,也就是说,如果你的算法在你已有的数据(可以理解为训练集上)上的准确率都只有85%的话,那么想要算法在未见过的数据(可以理解为在开发集上)中达到95%的准确率无异于是天方夜谭。 12 | 13 | 假设你的算法在开发集上的误差是16%(准确率84%),通常将16%的误差分为两个部分: 14 | 15 | - 首先,算法在训练集上的误差,在此例中是15%。我们非正式地把它看作是算法的偏差(Bias); 16 | - 其次,算法在开发集上的表现和训练集上的表现的差值(开发集误差-训练集误差),在此例中,开发集和训练集的准确度差值为1%。我们非正式地把它看作是算法的方差(Variance) [1]。 17 | 18 | > [1]:在统计学领域,对于方差和偏差有更正式的定义。但大致上可以将偏差定义为当你有一个很大的训练集的时候算法在训练集上的误差;将方差定义为算法在测试集表现和训练集表现的差值。当你的误差指标是均方误差时,你可以写出指定这两个量的公式,并证明“总体误差=偏差+方差”。但为了简化叙述如何通过对偏差和方差的分析来解决机器学习问题,这里给出非正式定义的偏差和方差就足够了。 19 | 20 | 学习算法的一些优化措施能够解决误差的第一部分——偏差——提高算法在训练集上的表现。有一些优化措施能够解决误差的第二部分——方差——帮助算法顺利地从训练集推广到开发/测试集上 [2]。为了选择出最能提升算法性能表现的优化方向,深刻理解错误的两个组成部分的优先级顺序会有奇效。 21 | 22 | > [2]:还有一些方法可以通过对系统架构进行重大改动来同时减少方差和偏差,但这往往操作难度很大。 23 | 24 | 培养关于偏差和方差的良好直觉能够帮助你为算法选择有效的优化措施。 25 | -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter21.md: -------------------------------------------------------------------------------- 1 | ## 21. 举例说明偏差和方差 2 | 3 | 考虑我们的猫分类任务。 一个“理想”的分类器(比如人)在这项任务中可能会取得近乎完美的表现。 4 | 5 | 假设你的算法表现如下: 6 | 7 | - 训练集误差 = 1% 8 | - 开发集误差 = 11% 9 | 10 | 从上边的数据能看出什么问题吗?应用前一节的定义,我们估计该分类器的偏差为1%,同时方差为10%(11%-1%=10%)。因此,它存在高方差(High Variance)问题。分类器的训练集误差很小,但未能把在训练集上完美表现推广到开发集中,这也被称为“过拟合”(Overfitting)。 11 | 12 | 现在,算法表现变成了下列所示: 13 | 14 | - 训练集误差 = 15% 15 | - 开发集误差 = 16% 16 | 17 | 我们估计该分类器的偏差达到了15%,方差是1%。这个分类器对训练集的拟合效果很差,误差居然有15%,但是它在开发集上的误差和训练集上相当(也有16%)。因此该分类器存在高偏差(High Bias​​)问题,这也被称为“欠拟合”(Underfitting)。 18 | 19 | 再来看一种情况: 20 | 21 | - 训练集误差 = 15% 22 | - 开发集误差 = 30% 23 | 24 | 我们估计偏差为15%,方差也达到了15%。该分类器同时存在高偏差和高方差问题:训练集的表现效果很差,因此偏差很大,同时他在开发集的表现更差,因此方差也很大。这是由于分类器模型设计的有问题,属于最糟糕的情况,欠拟合/过拟合的优化技术很难应用到这类情况中来。 25 | 26 | 再来看最后一种情况: 27 | 28 | - 训练集误差 = 0.5% 29 | - 开发集误差 = 1% 30 | 31 | 这个分类器表现完美,同时拥有低方差和低偏差,祝贺你取得了这样的成绩。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter22.md: -------------------------------------------------------------------------------- 1 | ## 22. 比较最优误差 2 | 3 | 在我们的猫咪识别器的例子中,理想的误差,即最优分类器的误差应该接近0%。一个人类几乎总是能认出照片里边的猫来,所以,我们也希望机器能达到这个水平。 4 | 5 | 有些问题难度则更大,比如,假设你正在建立一个语言识别系统,并发现在音频片段中有14%都是背景噪声,或者是无法理解的内容,即使是人类来也无法识别出这部分信息。在这种情况下,意味着即使是“最佳的”语音识别系统也可能存在14%的误差。 6 | 7 | 假设在这个语音识别问题上,你的算法的表现如下: 8 | 9 | - 训练集误差 = 15% 10 | - 开发集误差 = 30% 11 | 12 | 从上边可以看出,算法在训练集上的性能表现已经接近了14%的最优误差,因此,就偏差或者训练集性能方面而言,已经没有太大的改进空间了。但是由于该算法对于开发集的拟合并不好,因此对于方差而言却存在着更大的改进空间。 13 | 14 | 这个例子类似上一节中的第三个例子(训练集误差15%,开发集误差30%)。如果最优误差是~0%,则15%的训练集误差就有很大改进空间,这表明执行减少偏差的改进措施是将会很有效果。但是,如果最优误差为14%,则相同的训练集表现告诉我们在分类器的偏差方面能改进的空间真的很小。 15 | 16 | 对于这种最优误差远远大于0%的问题,这里有关于算法误差更详细的分类。继续我们上边提到的语音识别的例子,30%的总开发集误差可细分为以下几类(类似的分类可以同时应用于对测试集误差的分析过程中): 17 | 18 | - 最优误差(Optimal Error Rate):14%。假设我们定义:即使是世界上最优秀的语音系统也存在14%的误差。我们可以将这部分误差归类为学习算法偏差中“不可避免”的部分; 19 | - 可避免偏差(Avoidable Bias):1%。这被定义为是在训练误差和最优误差之间的差值(训练误差-最优误差) [3]; 20 | - 方差(Variance):15%。这被定为是开发集误差和训练集误差之间的差值(开发集误差-训练集误差)。为了和我们之前的一些定义统一起来,偏差和可避免偏差有下列联系 [4]; 21 | - 偏差 = 最优误差 + 可避免偏差 22 | 23 | > [3]:如果这个差值是负数,那么你的训练集的表现比最优分类器都还要好,意味着你的算法在训练集过拟合了,并且该算法已经“Over-Memorized”了训练集。你应该专注于减少方差,而不是继续减少偏差。 24 | 25 | > [4]:选择这样定义是为了更好地传达关于如何改进学习算法的思想。这些定义与统计学家对这些概念的定义并不一样。从技术上来说,本文所定义的“偏差”应该被称为“我们归因于偏差的错误”(Error we attribute to bias),“可避免偏差”应该被称为“我们归因于学习算法偏差超过了最优误差的错误”(error we attribute to the learning algorithm's bias that is over the optimal error rate)。 26 | 27 | “可避免偏差”反映了算法在训练集上的表现与“最优分类器”比还差多少。 28 | 29 | 方差的概念和前面的一样,没有变化。因为从理论上来说,我们总是可以通过大规模训练集的训练来将方差减少到零,只要使用足够大的训练集就可以完全避免方差,因此所有的方差都是“可避免的”。 30 | 31 | 再考虑一个例子,这里我们设定最优误差是14%: 32 | 33 | - 训练集误差 = 15% 34 | - 开发集误差 = 16% 35 | 36 | 在前一节的内容中,我们将有上述表现的分类器称为“高偏差”分类器。而现在我们可以认为该分类器的可避免偏差只有1%,也就是说,这个算法已经很优秀,几乎没有改进的空间了,因为它在开发集上的表现仅比最优分类器差了2%而已。 37 | 38 | 从这些例子中我们可以看出,知道最优误差有助于指导我们进行后续的步骤。在统计学中,“最优误差”也被称为“贝叶斯误差”(​Bayes Error Rate)或者“贝叶斯率” 39 | 40 | 那我们怎么知道最优误差是多少呢?对于一些人类擅长的任务来说,例如识别图片或者音频片段转录等,你可以要求人类来去对训练集数据进行识别,也就是测量出人类对于这个训练集的准确率来。这将给出最优误差的估计(用人类水平误差替代最优误差)。但是如果你正在解决一个对于人类而言都很困难的任务(比如,预测要推荐什么电影或者是向用户展示何种广告),最有误差是很难用这种方法来估计的。 41 | 42 | 在“比较人类表现水平”(第33节-第35节)这一部分内容中,我将会更加详细的讨论比较学习算法表现和人类水平(Human-Level)表现的这一过程。 43 | 44 | 在本章最后几节内容中,你将学习到如何通过查看训练和开发集误差来估计可避免/不可避免的偏差和方差。下一节我们将会讨论如何通过深入的分析理解来考虑优先使用的技术,即是减少偏少的技术还是减少方差的技术。根据项目当前的问题是“高(可避免)偏差”还是“高方差”,来应用完全不同的技术手段。请继续往下读! -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter23.md: -------------------------------------------------------------------------------- 1 | ## 23. 解决方差和偏差 2 | 3 | 这是解决偏差和方差最简单的公式: 4 | 5 | - 如果存在高可避免偏差问题(High Avoidable Bias),增大你模型的规模(比如,为模型设计更多的层数和神经元); 6 | - 如果存在高方差问题(High Variance),则为训练集添加更多的数据。 7 | 8 | 如果你能够增加神经网络的规模并且无限制地增加训练数据,那么可以很好地解决许多学习算法出现的问题。 9 | 10 | 实际上,盲目增加模型的规模最终会导致你遇到计算成本的问题,因为训练非常大的模型是很慢的。而你也可能会耗尽获取更多训练数据的能力。(即使在网上,关于猫咪的图片也是有限的) 11 | 12 | 不同的模型架构——例如,不同的神经网络架构——会对你的问题产生不同的大小的偏差/方差量。近期的很多深度学习的研究开发出了很多有创新性的模型架构。所以如果你正在使用神经网络,那么学术文献将是一个很好的灵感来源。同时在 Github 上也有很多开源代码。但是需要提醒的一点就是:尝试新的模型架构产生的后果将会比单纯的增大原有模型规模和增加数据量更加难以预料。 13 | 14 | 增大模型的尺寸通常会减少偏差,但同时也会有使方差增大和过拟合的风险出现。然而,这种过拟合的问题一般只在你不使用正则化(Regularization)的时候才存在,如果在你的架构中已经包含了精心设计的正则化方法,那么就可以放心的增大模型的规模而不用担心过拟合的问题。 15 | 16 | 假设你正在使用诸如L2正则化、Dropout等深度学习技术去正则化参数来让算法在开发集上有好的表现,在此基础上如果增加模型的规模,对算法来说,他的性能通常会得到改善,至少不会变差。计算成本增加是避免使用更大规模的模型的唯一原因。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter24.md: -------------------------------------------------------------------------------- 1 | ## 24. 权衡偏差和方差 2 | 3 | 你可能听说过:“权衡偏差和方差”,在你可以对大多数学习算法所能作出的更改中,有一些能够减少偏差,但会增大方差,或者是在减少方差的时候却增大了偏差。这就需要在偏差和方差问题上进行“权衡(Trade Off)”。 4 | 5 | 比如,增大你模型的规模——也就是在神经网络中增大神经元或者层的数量,或者是增加输入特征——这通常会减少偏差,但可能会增大方差。另外,增加正则化措施则会增加偏差但是会减少方差。 6 | 7 | 在当代,我们可以很容易地获取到海量的数据,并且可以使用大规模的神经网络(深度学习)。因此,需要作出这种权衡的机会比以前要少,因为现在有更多的方法能够做到在减少偏差的同时保证方差的在可接受范围,反之亦然。 8 | 9 | 比如,你通常可以增加神经网络的规模并通过调整正则化方法使得在减少偏差的同时不会导致方差显著增大。通过增大训练集数据,你也可以做到减少方差的同时不影响偏差。 10 | 11 | 如果你选择的模型框架非常适合于你的任务的话,那么你也能够做到同时减少偏差和方差,不过选择出这种架构的难度可能会很大。 12 | 13 | 在接下来的几节内容中,我们将会具体讨论解决偏差和方差问题的特殊技巧。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter25.md: -------------------------------------------------------------------------------- 1 | ## 25. 减少可避免偏差的技巧 2 | 3 | 如果你的学习算法遇到了高可避免偏差问题,你可以尝试以下技巧: 4 | 5 | - 增大模型规模(增加层或者神经元数量):此技巧能够减少偏差,因为它能够帮助你更好的去拟合训练集。如果你发现这种做法增大了方差,那么使用正则化,这通常会抑制方差的增大; 6 | - 根据误差分析修改输入特征:假设你的误差分析促使你添加额外的特征来帮助算法消除特定类别的错误。(我们将在下一节的内容里进一步讨论)也就是说,这些新特征能有助于避免偏差和方差。从理论上来看,添加更多的特征会导致方差增大,但当你发现这种情况的时候,使用正则化吧,它能够抑制方差的增大; 7 | - 减少或取消正则化(L2正则化、L1正则化、Dropout):虽然正则化会减少方差,但是会增大偏差啊; 8 | - 修改模型架构:通过修改模型的架构来让模型更契合你的问题,这通常会同时影响你的偏差和方差。 9 | 10 | 另外,需要提醒的一点就是: 11 | 12 | - 添加更多的训练数据:此技巧往往有助于解决方差问题,但对偏差问题没什么用。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter26.md: -------------------------------------------------------------------------------- 1 | ## 26. 在训练集上的误差分析 2 | 3 | 你的算法首先得在训练集上表现良好,才能谈得上在开发集/测试集上的表现。 4 | 5 | 除了前面介绍的解决高偏差的技巧之外,我有时还会对训练数据进行误差分析,遵循类似于“眼球开发集”的误差分析模式。如果你的算法有很高的偏差的话,换句话说,你的算法不能很好的适用在训练集上,这可能会很有用。 6 | 7 | 比如,假设你正在为你的应用程序构建一个语音识别系统,并收集了一批来自于志愿者的音频剪辑数据。如果你的系统在该训练集上表现不佳,你应该考虑人工听取一组(100个左右样例)算法难以处理的音频剪辑数据,从而理清训练集误差的主要类别。与开发集上的误差分析类似,你应该计算在不同类别上所犯的错误比例: 8 | 9 | 音频片段|很大的背景噪声|发言者语速过快|声源离麦克风太远|备注 10 | -------|------|------|------|------ 11 | 1|√|||汽车噪声 12 | 2|√||√|餐厅噪声 13 | 3||√|√|用户在客厅里大喊大叫 14 | 4|√|||咖啡店 15 | 占总数百分比|75%|25%|50%| 16 | 17 | 在这里例子里,你可能注意到你的算法在对具有很高背景噪声的样本进行识别的时候会特别困难。因此,你可能会专注于那些能够让你的算法很好的适应带有背景噪声的样本的技术。 18 | 19 | 你还可以进行二次检查:给定与你的算法相同的输入音频片段,让一个人去听,然后看他是否能将这些音频片段转录出来。如果背景噪声太大以至于任何人都没办法确定音频里边所说的话,那么期望有算法能够识别这些数据也是不合理的。我们将在后续章节讨论将你的算法表现和人类水平表现进行比较的好处。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter27.md: -------------------------------------------------------------------------------- 1 | ## 27. 减少方差的技巧 2 | 3 | 如果你的学习算法遇到了高方差问题,你可以尝试以下技巧: 4 | 5 | - 加入更多的训练集数据:这是用来解决方差问题最简单也是最可靠的办法。只要你能获取更多的数据和有足够的计算能力来处理这些数据,那么加吧。 6 | - 加入正则化:(L2正则化、L1正则化、Dropout):正则化减少方差,但是会增大偏差; 7 | - 加入早停止(Early Stopping)(例如根据开发集误差来提前停止梯度下降):这个技巧同样的减少了方差但是增大了偏差。这种早期停止的行为很像是正则化方法,所以有些研究者也把它归类为正则化技术; 8 | - 进行特征筛选(Feature Selection)来减少输入特征的数量/类型:这个技巧同样可能会在有助于减少方差的同时增大偏差。稍微减少特征的数量(比如总共有1000个特征然后减少到900个)不太可能对偏差产生很大的影响。只要不把很多的主要特征给剔除掉,显著减少它(假设我们把总过1000个特征砍剩100个,减少了10倍)更可能产生明显的效果。在当今条件下的深度学习中,在我们拥有了海量的数据之后,我们的精力就已经从特征选择中转移出来了,现在我们更倾向于将我们拥有的所有特征都丢给算法,然后让算法自己根据数据去分类使用哪些特征。但是当你的训练集很小的时候,进行特征选择将会是很有用的方法; 9 | - 降低模型的规模(层和神经元数量):慎重使用!!!!这个技巧可以减少方差,但可能会增大偏差。但是,我不推荐使用这种方法来解决方差问题。为算法增加正则化就可以提高分类性能。减少模型的规模的最大好处是降低计算成本从而加快训练模型的速度,如果加速训练模型速度是有效果的,那么我们务必通过办法来降低其规模。但,如果你的目标是减少方差,同时并不在意计算成本的问题,请优先考虑使用正则化! 10 | 11 | 这里有两个额外的策略,与25节讨论“减少可避免偏差的技巧”重复: 12 | 13 | - 根据误差分析修改输入特征:假设你的误差分析促使你添加额外的特征来帮助算法消除特定类别的错误。也就是说,这些新特征能有助于避免偏差和方差。从理论上来看,添加更多的特征会导致方差增大,但当你发现这种情况的时候,使用正则化吧,它能够抑制方差的增大; 14 | - 修改模型架构:通过修改模型的架构来让模型更契合你的问题,这通常会同时影响你的偏差和方差。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter28.md: -------------------------------------------------------------------------------- 1 | ## 28. 诊断偏差和方差:学习曲线 2 | 3 | 我们已经见过一些方法,并使用它们来估计有多少误差被归因到可避免偏差或者是归因到方差上。比如,我们通过估计最优误差和计算学习算法的训练集和开发集误差做到了这一点。现在,让我们来讨论一个信息量更大的方法:绘制学习曲线(Learning Curves)。 4 | 5 | 学习曲线以你的训练样本的数量为横轴,误差为纵轴。要绘制它,你可以使用不同的训练集大小来重复运行算法,得出在不同训练集大小下的开发集误差。比如,你总共有1000 个样本,则可以让算法分别在100、200、300、……、1000大小的样本尺寸下进行训练,然后绘制出在训练集大小不断增大下的开发集误差的变化趋势,如下图: 6 | 7 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/11.png) 8 | 9 | 随着训练集大小的增加,开发集误差在下降。 10 | 11 | “期望误差率(Desired Error Rate)”是我们希望学习算法能够最终达到的那个表现水平,例如: 12 | 13 | - 如果我们希望达到“人类表现水平”,那么“期望误差率”指的就是人类误差率; 14 | - 如果我们的学习算法为特定的产品提供服务(例如为猫APP提供猫咪识别器),我们可能会需要一种直觉,来发觉需要达到怎么的表现水平的算法才能给用户提供一个绝佳的体验。 15 | - 如果你长期从事在一个关键的应用程序上,那么你可能具备这个直觉,能够预计出在下季度/下一年中能够取得多大的进展。 16 | 17 | 所以,将期望的表现水平添加到你的学习曲线中: 18 | 19 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/12.png) 20 | 21 | 在图中,可以管观察红色的开发误差曲线,从而猜测出可以通过添加更多的数据来算法达到期望的性能水平。在上图展示的例子中,通过加倍训练集尺寸来促使学习算法朝着期望的性能改进看起来是合理的。 22 | 23 | 但是,假设开发误差曲线已经被“压平了(Plateaued)”,下图,你就能够立刻反应过来,继续添加数据已经不能够帮助你的算法往目标逼近了: 24 | 25 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/13.png) 26 | 27 | 通过观察学习曲线,你可能就能避免在花费了数月时间收集多达两倍的训练数据后,才意识到这对优化性能并没有帮助。 28 | 29 | 这个过程的一个缺点是:如果你只关注开发误差曲线,在有大量数据的情况下你很难推断和预测红色曲线的走势。所以,现在有另外一根额外的曲线可帮助你评估添加更多数据对性能的影响:训练误差曲线。 30 | -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter29.md: -------------------------------------------------------------------------------- 1 | ## 29. 绘制训练误差曲线 2 | 3 | 随着训练集大小的增加,你的开发集(和测试集)的误差应该会减少;但是随着训练集大小的增加,你的训练集的误差应该是会增加的。 4 | 5 | 让我们以例子来说明这种情况,假设你的训练集只有两个样本:一个猫图和一个非猫图。然后学习算法很容易的就学习到了训练集中的这两个样本,并达到了0%的训练集误差。即使其中一个或者两个训练样本的标签都被标记错误了,对于学习算法来说,仍然能够轻松的记住这两个标签。 6 | 7 | 现在假设你的训练集有100个样本,也许有一些例子时被错误标记的,或者是模棱两可——图片模糊到即使是人类也无法分辨图片中有无猫。也许学习算法仍然能够“记忆”大部分或全部训练集样本,但也很难取得100%的准确率了。通过将训练集样本量从2个增加到100个,你会发现训练集准确率会稍微下降。 8 | 9 | 最后,假设你的训练集有10000个样本,在这种情况下,算法更加难以去拟合这10000个样本了,特别是还存在模糊图片或者时标记错误图片的情况下。因此你的算法表现在训练集上会变得更差。 10 | 11 | 让我们将训练误差曲线绘制到之前的那张图上: 12 | 13 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/14.png) 14 | 15 | 你可以看到蓝色的“训练误差曲线”是随着训练集样本量的增大而增大的。此外,你的算法的在训练集上的表现通常要好于开发集,因此,红色的开发及误差曲线一般来说会严格地高于训练误差曲线。 16 | 17 | 接下来,让我们讨论如何解读这些曲线图。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter3.md: -------------------------------------------------------------------------------- 1 | ## 3. 预备知识和符号约定 2 | 3 | 如果你在MOOC平台或者Coursera上学习过一些机器学习相关的课程,或者是你有一些应用“监督学习”的经验,你将能够理解本章节的内容。 4 | 5 | 我假设你对“监督学习”(Supervised Learning​​)非常熟悉:通过使用有标签的训练样例$(x,y)$,来学习一个从$x$映射到$y$的函数。“监督学习”算法包括了:线性回归(Linear 6 | Regression)、逻辑回归(Logistics Regression)和神经网络。机器学习有很多形式,但大部分有实用价值的机器学习算法主要来自“监督学习”。 7 | 8 | 我会经常提到“神经网络”(也叫做“深度学习“(Deep Learning)),你只需要对他们有一个基本的了解。 9 | 10 | 如果你对上边提及的概念还很不是熟悉的话,建议观看Coursera上机器学习前三周的课程,网址是:[http://ml-class.org](http://ml-class.org) 11 | -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter30.md: -------------------------------------------------------------------------------- 1 | ## 30. 解读学习曲线: 高偏差 2 | 3 | 假设你的开发误差曲线看起来是这样的: 4 | 5 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/15.png) 6 | 7 | 我们之前说过,如果你的开发误差曲线平稳,也就是说,无法通过添加数据来让算法达到期望的性能。 8 | 9 | 但是我们很难切确的知道红色的开发误差曲线的外推([外推法](https://baike.baidu.com/item/%E5%A4%96%E6%8E%A8%E6%B3%95))是怎样的。如果开发集很小,则更不确定,因为曲线可能是有噪声的。 10 | 11 | 假设我们将训练误差曲线添加到该图中并得到以下结果: 12 | 13 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/16.png) 14 | 15 | 现在,你可以绝对确定,添加更多的数据本身是无效的。为什么?记住我们下面提到两个结论: 16 | 17 | - 随着我们添加越来越多的训练数据,训练误差只会越来越大。因此,蓝色的训练误差曲线只能够保持当前水平或者更糟糕(曲线趋势往上),所以随着训练集数据的增多,曲线会往远离期望性能曲线(绿线)的方向发展。 18 | - 红色的开发误差曲线通常高于蓝色训练误差曲线,意味着,当训练误差曲线都高于期望性能曲线(绿线)并有继续远离的趋势的时候,几乎不可能通过添加数据的方式来让红色的开发误差曲线下降到期望的性能水平。 19 | 20 | 在同一个图表上同时检查开发误差曲线和训练误差曲线。使我们能够更加自信的去推断开发误差曲线。 21 | 22 | 为了更好的阐述,假设我们把对最优误差的估计作为期望性能表现,那么上图就是一个教科书式的关于一个具有高可避免偏差的学习曲线的例子:在最大的训练集规模下(大概理解为对应于我们所有的训练数据),训练误差和期望误差之间存在很大的差距(进步空间),说明该案例遇到了高可避免偏差问题。此外,训练误差曲线和开发误差曲线的差距很小,意味着方差不大。 23 | 24 | 以前,我们只在该图的最右点来测量训练集和开发集的误差,这个点与我们算法使用了全部可用训练数据相对应。而绘制完整的学习曲线可以让我们更加全面的了解在不同训练集大小下的算法性能表现。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter31.md: -------------------------------------------------------------------------------- 1 | ## 31. 解读学习曲线:其他情况 2 | 3 | 来看下面这个学习曲线图: 4 | 5 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/17.png) 6 | 7 | 这张趋势图体现出了高方差、高偏差还是两者都有? 8 | 9 | 这条蓝色的训练误差曲线相对较低,然后红色的这条开发误差曲线则远高于蓝色的训练误差曲线。因此,该情况属于偏差很小方差很大情况。则,增加更多的训练数据可能有助于减小开发误差和训练误差之间的差距。 10 | 11 | 现在,曲线图变成这样: 12 | 13 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/18.png) 14 | 15 | 这一次,训练误差(蓝线)变得很大,因为它远高于期望的性能水平(绿线)。而开发误差(红线)也比训练误差大得多。因此,这种情况同时存在这高方差和高偏差问题。你必须找到一种方法来减少算法中的高偏差和高方差。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter32.md: -------------------------------------------------------------------------------- 1 | ## 32. 绘制学习曲线 2 | 3 | 假设你有一个非常小的训练集(100个样例)。你可以使用随机挑选的10个样本组成的子集,然后是20个样本组成的子集,然后是30个……一直到100个样本的集合来训练算法——以10的间隔递增。然后用这10个数据点来绘制学习曲线,你可能就会发现,在小的训练集下,曲线看起来波动很大(意思是这些值比预期值要高/或者低)。 4 | 5 | 当只对10个随机选择的样本进行训练时,脸黑的时候你可能会随机出了一个垃圾训练集——有很多模糊/标记错误的样本。或许,你很幸运的得到了一个很好的训练集。一个很小的训练集意味着开发误差和训练误差会很容易出现随机的波动。 6 | 7 | 如果你的机器学习应用严重偏好于某一类(比如在猫咪分类任务中,反例的分数比正例的要大的多),或者如果训练任务中需要识别大量的类(例如识别100种不同的动物种类),那么选择出那种特别“不具代表性”或者是坏的训练集的机会也更大。例如,如果你的总样本中有80%都是负例样本(y=0),而只有20%是正例样本(y=1),那么很有可能随机抽样出来的那10个样本组成的子集里边只包含了负例样本,这样的话算法很难学习出一些有意义的东西来。 8 | 9 | 如果训练曲线中因为噪声的原因使得我们很难观察到真实的变化趋势,这里提供两个解决方案: 10 | 11 | - 放弃使用在10个样本的数据集上训练一个模型的方法,取而代之 [1] 的是从100个原始集合中随机抽样几个(3-10)由10个样本组成的数据子集作为训练集。然后在每个训练子集上训练出模型来,并计算出每个模型的训练误差和开发误差。最后计算并绘制它们的平均训练误差和平均开发误差。 12 | - 如果你的训练集偏向某一类,或者是如果有很多类别,请选择一个“均衡”一点的子集,而不是简单的从100个样本中随机抽取10个。举例子来说,如果你切确知道你的样本中那个20%是正例样本,80%是反例样本,合理的做法就是,你应该尽量保证每个类的样本所占的比例尽可能接近原始训练集的整体比例。 13 | 14 | > [1]:这里的采样和替换的意思是:你从100个样本中随机挑选10个样本组成第一个训练子集。然后为了组成第二套训练子集,重新挑选10个样本(依旧从100个样本中挑)。因此,一个例子可能同时出现在第一和第二套训练子集里边。相比之下,如果你没有使用替换去采样,第二套训练子集则从第一套抽样完之后剩余的90个中挑选。当然,在实际操作中,两种方法并不会有太多差异,但前者是常见的做法。 15 | 16 | 除非你已经尝试去画了学习曲线,并且认为画出来的线波动过大以至于没办法观察到本质的变化趋势,否则我不会去为这些技术烦恼。如果你的训练集很大——10000个样本——并且你的类别分布比较均衡,那么上述的技术你可能用不上。 17 | 18 | 最后,绘制学习曲线的计算成本可能很高:例如,假设你可能需要训练10个模型出来——从1000个,然后是2000个……一直到10000个样本。因为使用小数据集训练要比使用大数据集训练快得多,所以,实际上并不是像上面那样均匀地将训练集大小按照线性步长来划分,更通用的是将训练集划分为1000个、2000个、4000个、6000个和10000个样本的集合,然后训练它们得到对应的模型参数。这应该仍然能够让你清楚的了解学习曲线的趋势。当然,只有在训练模型的计算成本很大的时候,这种技术才有意义。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter33.md: -------------------------------------------------------------------------------- 1 | ## 33. 为什么我们要比较人类表现水平 2 | 3 | 许多机器学习系统旨在自动化人类已经做的很完美的那些事情,例子包括:图像识别、语言识别、邮箱垃圾邮件分类等。经过发展,学习算法也有了长足的进步,现在我们的算法在越来越多类似的任务中的表现都超过了人类的表现水平(Human-Level Performance)。 4 | 5 | 此外,如果你使用机器学习正在努力完成一项人类非常擅长的工作,那么建立机器学习系统相对容易的原因有如下几个: 6 | 7 | 1. 能够轻松地获取人类标签数据:例如:由于人们可以很轻易的识别出猫咪的图片来,那么,人们可以很轻易的为你的学习算法提供高精度的标签。 8 | 2. 能够借鉴人类直觉来进行误差分析:假设一个语音识别算法远比不上人类的表现。比如,算法将音频片段转录拼写为 "This recipe calls for a pear of apples" 其实算法将 "pair" 错误转录为 "pear"。你可以利用人类的直觉,试图去理解一个人的话,他是用什么信息来去获得正确的转录信息的,并将其用来修改学习算法。 9 | 3. 能够利用人类水平表现来估计最佳误差率并设置好“期望误差率”:假设你的学习算法在目标任务中达到了 10% 的误差水平,但在同样的任务中,人的误差只有 2% 或者更低。然后我们就知道了最优误差率是 2% 或者更低,也就是说可避免偏差至少有 8% 。因此,你应该尝试那些能够减少偏差的技巧。 10 | 11 | 尽管第三项听起来好像不是很重要,但我发现有一个合理且可实现的目标误差率有助于加速团队的进度。知道你的算法具有高可避免偏差是非常有价值的,因为它为我们提供了一个可尝试去优化的选项。 12 | 13 | 当然,对于那些人类来说本来就不是很擅长的任务。比如,为你推荐书籍、或者在网页上为特定用户显示特定的广告、或者预测股市走势。计算机的表现已经远远超过了大部分人的能力表现,对于这些任务来说,我们在建立机器学习系统时有以下问题: 14 | 15 | 1. 获取标签数据相对困难:比如,负责为样本贴标签的人很难用“最佳”书籍标签去标注用户数据集。如果你利用销售图书的网站和应用的话,那还可以通过向用户展示图书并统计他们购买的内容来获取数据。如果你不经营类似的网站,那么你可能需要找到更多有创意的方法才能获取到数据了。 16 | 2. 无法指望人类的直觉:例如,几乎没人能够准确预测股票市场。因此,如果我们的股票预测算法没能比随机猜测来的更好,那么我们也很难去搞清楚应该如何改进它。 17 | 3. 很难去定义最佳误差率和期望误差率:假设你已经设计出一个不错的图书推荐系统。你怎么知道在没有人类基准表现水平的情况下它的性能还能提高多少? -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter34.md: -------------------------------------------------------------------------------- 1 | ## 34. 如何定义人类水平表现 2 | 3 | 假设你正在研究一种医疗影像系统,该系统能够自动根据X射线图像进行诊断。下列的哪个误差率能够作为人类水平表现基准呢? 4 | 5 | - 除了一些基本的医学训练之外没有其他专业医学背景的志愿者在这项任务中能够达到 15% 的误差; 6 | - 初级医生的误差是 10%; 7 | - 一位有经验的医生的误差是 5%; 8 | - 通过讨论,一个由医生组成的小组的误差是 2%。 9 | 10 | 在这种情况下,我会使用 2% 代表人类性能表现作为我们的最优误差率。同时,你还可以将 2% 设置为期望性能水平,因为在上一节“为什么我们要比较人类表现水平”中所提到的三个原因在此都适用: 11 | 12 | 1. 能够轻松地获取人类标签数据:你可以让医生小组为您提供数据标签,误差率只有 2%。 13 | 2. 能够借鉴人类直觉来进行误差分析:通过与医生小组讨论图像,你可以借鉴他们的专业直觉。 14 | 3. 能够利用人类水平表现来估计最佳误差率并设置好“期望误差率”:使用 2% 来作为我们对最优误差率的估计是合理的。在本例中,最优误差率只可能比 2% 更低而不会更高,因为这是专业的医生团队所能做到的最好的表现了(代表了人类最高水平)。相反,使用 5% 和 10% 来作为对最优误差率的估计的话是不合理的,因为我们知道这些估计值偏高了(人类能做的更好)。 15 | 16 | 如果您的系统目前有 40% 的错误,那么纠结于使用初级医生(10% 的误差)还是一个有经验的医生(5% 的误差)来标记数据和提供直觉并不是那么重要。但是如果你的系统误差已经优化到 10% 了,那么将人类水平参考定义为 2% 将为你的系统优化带来更有用的帮助。 17 | -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter35.md: -------------------------------------------------------------------------------- 1 | ## 35. 超越人类表现水平 2 | 3 | 你正在进行语音识别的研究并有一个音频剪辑的数据集。假设你的数据集有很多的噪声音频片段,以至于人能达到的最好表现的误差都有 10%。 这个时候假设你的系统的误差有 8% 的话。那能否使用第 33 节的描述的三种技术中的任何一种来继续加速研发速度呢? 4 | 5 | 如果你可以确认在一些数据子集中,人类表现水平要远好于你的系统表现水平,例如,在你的系统中,识别嘈杂环境中的音频性能表现要好于人类表现,然而在转录那些语速非常快的音频片段中人类表现则比机器表现要好。那么你依然可以使用这些技术手段去推动研究进度。 6 | 7 | 对于上述表述的语速非常快的音频数据子集: 8 | 9 | 1. 你仍然可以从人类中获得质量高于你算法的输出的转录文本; 10 | 2. 你可以借鉴人类的直觉来理解为什么你的系统没能够正确听出语速非常快的音频片段; 11 | 3. 你可以将快速语音音频片段下的人类水平表现作为期望表现目标。 12 | 13 | 更一般的说,只要在开发集中,你是正确的而算法是错误的,那么前面描述的许多技术都能适用。这是真话,即使在整个开发/测试集的平均水平上,你的算法的表现已经超过了人类的性能表现。 14 | 15 | 有很多重要的机器学习应用程序,其中机器的表现超过了人类的表现。例如,机器在预测电影评级、对送货车在某地驾驶时长的预测、或者是评断是否批准申贷人的贷款申请等方面的效果都要比人类表现更好。一旦人类很难识别出算法明显出错的例子,那么只有一部分技术能用上。因此,在机器表现已经超越人类表现的问题上,研发进展通常较慢。而在当机器的表现不能够和人类表现媲美的情况下,进展较快。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter36.md: -------------------------------------------------------------------------------- 1 | ## 36. 当你不得不在不同分布中进行训练和测试 2 | 3 | 你将你的猫咪图片应用程序的用户上传的 1 万张图片,手动分类为 “猫” 和 “非猫” 两种。同时你也通过互联网下载了额外的 20 万张图片。这种情况下,你应该如何去定义训练/开发/测试集呢? 4 | 5 | 因为 1 万张来自于用户的猫咪图像密切反映了你的算法想要去拟合的数据概率分布,因此,你可以将这部分数据用于开发集和测试集。如果你正在训练对数据有大规模需求的算法(Data-Hungry Algorithm),你可以将取自互联网的那 20 万张猫咪图片用于训练你的算法。这样的话,你的训练集和开发/测试集的数据就不服从同一分布了。这会对你的算法性能产生什么影响呢? 6 | 7 | 与其将数据单纯的划分为训练/开发/测试集,不如将 21 万张图片混合然后随机分配到训练/开发/测试集中。这种情况下,所有的数据均来自相同的分布了。但是我不推荐使用这种方法,因为 20.5万/21万 ≈ 97.6% 的开发/测试集数据会来自互联网图片,这比例并不能很好的反映出你数据的真实分布。切记,我们对选择开发/测试集的忠告: 8 | 9 | - 选择能够映射出你在未来将要获得的数据,且表现出良好效果的开发集和测试集。 10 | 11 | 关于机器学习的大多数学术文献都认为训练集、开发集和测试集来自同一分布 [1] 。在机器学习的早期,数据很稀缺,我们通常只能从某个概率分布中获取一个数据集,所以我们会随机的将这些数据分割为训练/开发/测试集,并假设所有的数据来自于同一分布,上述做法效果不错。 12 | 13 | [1]:有一些专门研究在不同分布下算法训练和测试的学术文献。例子包括:域适配(Domain Adaptation)、迁移学习(Transfer Learning)和多任务学习(Multitask Learning)等。但因为理论和实践之间仍存在巨大的差异,如果你的算法在数据集 A 上训练然后用一些不同类型的数据集 B 去测试,你的算法效果好坏可能会与你的运气密切相关(在这里,“运气”包括了研究人员为特定任务手工设计的特征,以及一些我们还不了解的因素),这使得对不同分布下算法训练和测试的学术研究难以系统的进行。 14 | 15 | 但在大数据时代,我们有能力获取到大量数据,例如猫的互联网图片。即使训练集的数据和开发/测试集的数据来源于不同分布,我们仍然希望用这些数据来用于算法学习,因为它可以为算法提供大量信息。 16 | 17 | 对于猫咪检测器的例子,与其将所有的用户上传的猫图分配给开发/测试集,不如将 5000 张(一半)分配给开发/测试集,然后将剩下的那 5000 张图片给训练集。这样,你的 205000 张训练集图片既包含了 5000 张来自用户上传的图片,也包含了那来自互联网的 20 万张图片,我们将在后续章节讨论为什么这种方法是有效的。 18 | 19 | 让我们来看第二个例子,假设你正在构建一个语音识别系统用来为语音控制的移动地图/导航应用程序转录街道地址。你有 2 万个用户口述街道名称的样本,同时你还有 50 万个用户讨论其他主题的音频样本。你可能将 10000 个街道相关的样本置入开发/测试集,并将剩下的 10000 个样本连同那 50 万个其他主题的样本用来进行算法的训练。 20 | 21 | 我们继续假设你的开发集数据和测试集数据来自同一分布。但是重要的是要明白不同的训练集和开发/测试集概率分布会带来一些额外的挑战。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter37.md: -------------------------------------------------------------------------------- 1 | ## 37. 如何决定是否使用所有数据 2 | 3 | 假设你的猫咪检测器的训练集包含了 1 万张用户上传的图像。这些数据都是来自于和独立的开发/测试集相同的分布,同时代表的是你的算法想要表现良好的那种分布。你还有额外的 2 万张取自互联网的猫咪图片。你是否应该将 2万 + 1万 = 3万 这所有的图片作为你的训练集的数据?或者是放弃那 2 万张图片以防止你的学习算法出现偏差? 4 | 5 | 当使用早期的学习算法(比如手工设计计算机视觉特征,然后使用一个简单的线性分类器)时,合并这两种类型的数据导致性能更差的风险是存在的。因此,一些工程师会警告你不要把这来自网络的 2 万张图片包括进来。 6 | 7 | 但在当今这个强大、灵活的学习算法时代——比如大型神经网络——这种风险已经大大降低。如果你能负担得起用足够多的隐藏单元/层来构建一个神经网络,你就可以安全地将 2 万张图片添加到你的训练集中。 8 | 9 | 这种观察依赖于这样一个事实:存在 $x \rightarrow y$ 的映射,对于来自不同分布的两种类型的数据都适用。换句话说,存在这样的一个系统,无论是输入来自互联网的图片还是输入用户上传的图片,它都能准确的预测出正确的标签来,即使不知道图像的来源。 10 | 11 | 添加额外的 2 万张图像会产生以下效果: 12 | 13 | 1. 它能为你的神经网络提供更多的例子说明猫是什么样子的。这很有帮助,因为互联网图片和用户上传的移动应用图片确实有一些相似之处。你的神经网络可以将从互联网图像中获得的一些知识应用到处理移动应用程序图像中来; 14 | 2. 它迫使神经网络分出一部分能力来学习特定于互联网图像的属性(例如分辨率较高,图像帧的不同分布等)。如果这些属性和移动应用程序中的图像差别很大的话,它将“消耗”掉一部分神经网络的性能。因此,从移动应用程序图像的分布中识别数据的能力就会降低——这是你真正关心的。理论上,这可能会影响算法的性能。 15 | 16 | 为了使用不同的术语来描述第二种效应,我们求助于虚拟人物夏洛克·福尔摩斯,他说你的大脑就像一个阁楼:它只有有限的空间。“每增加一点知识,你就会忘记一些你以前知道的东西。”因此,最重要的是,不要让无用的事实把有用的事实挤掉 [2]。 17 | 18 | [2]:阿瑟·柯南·道尔的《血字的研究》 19 | 20 | 幸运的是,如果你有足够的计算能力来构建一个足够大的神经网络——即足够大的阁楼——那么这不是一个严重的问题。你有足够的能力同时从互联网和移动应用图片中学习,而不需要担心两种类型的数据争夺你的阁楼容量。你的算法的“大脑”足够大,就不必担心阁楼空间用完。 21 | 22 | 但是如果你没有足够大的神经网络(或者其他高度灵活的学习算法),那么你应该更加注意你的训练集和你的开发/测试集的分布问题。 23 | 24 | 如果你认为你所拥有的数据对提升算法表现没有任何好处,那么,你应该出于计算原因而忽略这些数据。例如,假设你的开发/测试集主要包含了人物、地点、地标和动物的随机图片,可能你还有大量扫描的历史文档。 25 | 26 | 这些图片不包含任何类似于猫的元素。它们看起来完全不同于你的开发/测试集。没有必要将这些图片归类到反例中,因为这些样本对于算法来说并不能体现出前边提到的第一个效果——几乎没有哪一个神经网络能够从这些样本中学习出用于你的开发/测试集分布的知识。同时它们还会浪费神经网络的计算资源和表示能力。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter38.md: -------------------------------------------------------------------------------- 1 | ## 38. 如何决定是否包含不一致的数据 2 | 3 | 假设你想学习预测纽约市的房价。考虑到房子的大小(输入特征 x), 您需要预测价格(目标标签 y)。 4 | 5 | 纽约市的房价非常高。假设你有关于密歇根州底特律的房价的第二个数据集,那里的房价要低得多。你应该在你的训练集中包含这些数据吗? 6 | 7 | 如果给定相同的 x (房子大小一样),y 房子的价格则根据其是在纽约市还是在底特律(地点不同)而不同。如果你只关心预测纽约市的房价,那么把这两个数据集放在一起就会影响你的算法表现。在这种情况下,最好忽略不一致的底特律房价数据[^3]。 8 | 9 | [^3]:有一种方法可以解决底特律数据与纽约市数据不一致的问题,即为每一个城市的训练样本添加额外的特征。给定输入 x ——现在指定了城市—— y 的目标值现在是明确的。然而,在实践中,我并没有经常看到这种做法。 10 | 11 | 这个纽约市和底特律的例子与移动应用程序和网络猫图片的例子有什么不同? 12 | 13 | 猫图像的例子是不同的,因为在给定输入图像 x 的情况下,即使不知道图像是互联网图像还是移动应用上传的图像,也可以可靠地预测标签 y 表明是否有猫。也就是说,有一个函数 $f(x)$ 可以可靠的从输入 x 映射到目标输出 y,即使不知道 x 的来源。因此,互联网图像识别任务与移动应用图像识别任务“一致”。这意味着除了计算成本之外,包含所有的样本几乎没有什么负面影响,或许还有一些潜在的显著优势。相比之下,纽约市和密歇根州底特律的数据并不一致,给定相同的 x(房子的大小),根据房子的位置,价格是非常不同的。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter39.md: -------------------------------------------------------------------------------- 1 | ## 39. 数据加权 2 | 3 | 假设你有 20 万张来自互联网的图片和 5000 张来自移动应用用户的图片。这些数据集的大小之间的比率为 40:1。理论上,只要你建立一个巨大的神经网络,并对所有 205000 张图像进行足够长时间的训练,那么尝试让算法同时在网络图像和移动图像上都表现出色的做法并没有什么坏处。 4 | 5 | 但在实践中,与仅对 5000 幅图像进行训练相比,使用比移动应用程序图像多 40 倍的互联网图像来训练算法,可能意味着你需要花费 40 倍甚至更多的计算资源来对两者进行建模。 6 | 7 | 如果你没有庞大的计算资源,你可以给互联网图像一个低得多的权重作为妥协。 8 | 9 | 例如,假设你的优化目标是平方误差(Squared Error)(这对于分类任务来说不是一个好的选择,但它会简化我们的解释)。因此,我们的学习算法试图优化: 10 | 11 | $$\underset{\theta }{min} \ \ \sum_{(x,y)\in MobileImg}\left ( h_{\theta } (x)-y\right )^2+\sum_{(x,y)\in InternetImg}\left ( h_{\theta } (x)-y\right )^2$$ 12 | 13 | 上边公式第一项计算的是对 5000 张移动应用程序图像的平方误差求和,第二项计算的是对 20 万张移动互联网图像的平方误差求和,你可以对第二项设置超参数 $\beta$ 来优化公式: 14 | 15 | $$\underset{\theta }{min} \ \ \sum_{(x,y)\in MobileImg}\left ( h_{\theta } (x)-y\right )^2+\beta \sum_{(x,y)\in InternetImg}\left ( h_{\theta } (x)-y\right )^2$$ 16 | 17 | 如果设定 $\beta = 1/40$ ,算法相当于给予了 5000 个移动图像和 20 万个互联网图像相同的重视程度。当然,你也可以通过结合验证集等方式,把参数 $β$ 设置为其他值。 18 | 19 | 通过降低附加的互联网图片的权重,你就不必构建一个庞大的神经网络来保障算法在这两种类型的任务上都有效运作。只有当您觉得附加的数据(互联网图片)与开发/测试集的分布差异较大,或者是附加的数据比来自与开发/测试集(移动应用程序图像)相同分布的数据大得多的时候,才需要这种类型的重新加权。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter4.md: -------------------------------------------------------------------------------- 1 | ## 4. 规模化驱动下的机器学习发展 2 | 3 | 很多深度学习相关的想法已经存在了数十年,为什么它们现在突然又火了起来? 4 | 5 | 近期的两个最大的驱动因素是: 6 | 7 | - 海量可供使用的数据。人们在数字设备上所花费的时间大大提高,借此产生的海量数据,能够用于训练机器学习算法。 8 | - 大规模的计算。从前几年开始,我们才敢设计足够大的网络来充分利用我们拥有的海量数据。 9 | 10 | 具体来说,如果使用那些传统的学习算法,比如逻辑回归,即使我们拥有再多的数据,算法的“学习曲线”会变得平坦(高原效应(Flattens Out))。这意味着,即使提供再多的数据,算法也会停止改进。 11 | 12 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/1.jpg) 13 | 14 | 这看起来传统的算法并不知道怎么利用我们提供的海量数据。 15 | 16 | 对于同样的一个“监督学习”任务,如果你训练一个小型的神经网络,那么你可能会获得稍微好一点的性能表现。 17 | 18 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/2.png) 19 | 20 | 在这里,所谓的小型神经网络指的是该网络只有少数的隐藏单元/层/参数。最后,逐渐增大你网络的规模,网络的性能表现也会同步提高 [1]。 21 | 22 | > [1].该图显示了神经网络在小数据集上也能做的很好,这个效果与神经网络在大型数据集上表现出的良好效果并不一致。在小型数据集中,更多的取决于如何对特征进行手工设计,传统算法可能表现的更好也可能表现更差。比如,你有20个训练样本,那么是否使用逻辑回归或者神经网络可能无关紧要,对特征的手工设计比选择何种学习算法会对性能表现产生更大的影响。但是如果你有100万的训练样本,使用神经网络将会是一个明智的选择。 23 | 24 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/3.png) 25 | 26 | 很多其他的细节,比如神经网络架构,也是非常重要的,这里边也有很多可以创新的地方。但,在今天来看,提高算法性能更有效的方法依然是:(i)规模更大的网络;(ii)更多的数据。 27 | 28 | 如何实现(i)和(ii)的过程非常复杂,本书将会详细讨论这些细节。我们将从对传统的学习算法和神经网络都有效的一般策略入手,为构建现代深度学习系统提出更加现代化的策略。 29 | -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter40.md: -------------------------------------------------------------------------------- 1 | ## 40. 从训练集到开发集的泛化 2 | 3 | 假设你正准备在训练集和开发/测试集分布不同的情况下中应用机器学习,比方说:训练集包含互联网图像 + 手机App图像,而开发/测试集却只包含手机App图像。不过,该算法运行起来效果不佳,以下是一些可能出些了问题的地方: 4 | 5 | 1. 机器学习算法在训练集表现不佳。这是在训练集分布上出现了高(可避免)偏差的问题; 6 | 2. 算法对训练集表现良好,但没法推广运用于之前没有见过的数据中(这些数据与训练集分布相同)。这是高偏差问题。 7 | 3. 算法能很好地泛化到从与训练集相同的分布中抽取的新数据中,而不是从开发/测试集分布中抽取的数据。我们将此问题称之为:数据不匹配(Data Mismatch)——训练集数据和开发/测试集数据不匹配。 8 | 9 | 例如,假设人类在猫识别任务上达到接近完美的表现。 你的算法实现了这一点: 10 | 11 | - 在训练集上的误差有 1%; 12 | - 算法在和训练集相同分布中提取的新数据上的误差为 1.5%; 13 | - 开发集上的误差有 10%。 14 | 15 | 在这种情况下,显然存在数据不匹配的问题。要解决这个问题,您可以尝试使训练集数据去接近开发/测试集的数据,我们将在后续内容里讨论这类技术。 16 | 17 | 为了计算出算法受到上述各个问题(1、2、3)的影响程度,额外提供一个数据集是很有帮助的。具体来说,不是将所有的训练集数据都喂给算法,我们将训练集分为两部分:一部分是用于算法训练的实际训练集,另一部分我们则将它称为“训练-开发”集,该部分数据不参与算法训练。 18 | 19 | 因此,现在你有四个数据子集: 20 | 21 | - 训练集:这是拿来训练算法的数据集(例如:互联网图片+移动应用程序图片)。当然这不要求一定要和我们的真实数据分布(开发/测试集数据分布)一样。 22 | - 训练-开发集:这部分数据集来自与训练集相同分布(例如:互联网图片+移动应用程序图片),这通常比训练集要小。他只需要足够用来评估和跟踪我们学习算法的进度就行了。 23 | - 开发集:这与测试集的数据分布相同。,它反映了我们最终关注的数据的分布情况(例如:移动应用程序图片)。 24 | - 测试集:这是和开发集相同分布的数据集(例如:移动应用程序图片)。 25 | 26 | 有了这四个独立的数据集,您现在可以评估: 27 | 28 | - 训练误差,通过训练集进行评估; 29 | - 通过训练-开发集来评估算法泛化到与训练集相同分布的新数据的能力; 30 | - 使用开发/测试集来评估算法应用在你关心的数据分布上的能力。 31 | 32 | 在之前的 5-7 节中的提到的指导原则同样适用于训练-开发集。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter41.md: -------------------------------------------------------------------------------- 1 | ## 41. 辨别偏差、方差和数据不匹配导致的误差 2 | 3 | 假设人类在猫检测任务中表现是几乎完美的(≈0%的误差),因此最优错误率约为 0%。 假设你有: 4 | 5 | - 训练集误差 1% ; 6 | - 训练-开发集误差 5%; 7 | - 开发集误差 5%。 8 | 9 | 上述数据告诉了你什么?这里,你发现你的算法存在高方差问题。之前讨论的解决高偏差的那些技术能够帮助你取得积极的进展。 10 | 11 | 现在,假设你有: 12 | 13 | - 训练集误差 10% ; 14 | - 训练-开发集误差 11%; 15 | - 开发集误差 12%。 16 | 17 | 这就告诉了你:你的算法在训练集上存在高可避免偏差问题,即,算法在训练集上表现很差,之前讨论的解决高可避免偏差的那些技术能够帮助你取得积极的进展。 18 | 19 | 在上述的两个例子中,算法只是分别遇到了高方差和高可避免偏差的问题,而算法可能会遇到导致同时出现高可避免偏差、高方差和数据不匹配的子集,比如: 20 | 21 | - 训练集误差 10% ; 22 | - 训练-开发集误差11%; 23 | - 开发集误差 20%。 24 | 25 | 通过将它们用表格的方式列出来,可能更容易理解不同类型的误差是如何互相关联的: 26 | 27 | ·|分布 A :互联网图片+移动应用程序图片|分布 B:移动应用程序图片 28 | ---|---|--- 29 | 人类水平|人类表现水平误差(0%)|· 30 | 算法对训练集的数据上表现|训练误差(10%)|· 31 | 算法对与训练集相同分布的新数据的表现|训练-开发集误差(11%)|开发-测试集误差(20%) 32 | 33 | - 11%-20% 之间体现的是数据不匹配问题; 34 | - 0%-10% 之间体现了可避免的偏差问题; 35 | - 10%-11% 之间体现了方差问题; 36 | 37 | 继续以猫图像检测器为例,您可以看到 x 轴上有两种不同的数据分布。 在 y 轴上,我们有三种类型的错误:人类水平误差、算法对训练集的数据上表现、算法对与训练集相同分布的新数据的表现。我们将之间的关系和上一节的内容做一个对应——数据百分值之间体现了不同的问题。 38 | 39 | 愿意的话,你也可以填写该表中剩下的两个单元格。填写右上角的单元格时,可以找人来给你的移动应用程序图片进行人工识别并标注标签,然后根据计算的准确率来填写(该单元格体现了移动应用程序图片上的人类表现水平);填写另一个单元格时,可以选取移动应用程序图片(分布 B)的一小部分(子集)放入训练集中,再经过神经网络的学习后,计算出对该子集的训练误差来填写此单元格。通过填写这两个额外的单元格,有时可以得到关于该算法在两种不同分布(分布 A 和分布 B )上所做操作的更深入更详细的信息。 40 | 41 | 通过了解算法遭受的错误类型,您将更好地决定是关注于减少偏差、减少方差还是减少数据不匹配的问题。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter42.md: -------------------------------------------------------------------------------- 1 | ## 42. 解决数据不匹配的问题 2 | 3 | 假设你开发出一套语音识别系统,该系统在训练集和训练-开发集上都表现得好,但是,它在你的开发集上表现不好——意味着你的系统存在数据不匹配的问题。你怎么办? 4 | 5 | 我的建议是: 6 | 7 | - 尝试去了解训练集和开发集的数据分布之间的哪些属性不一样; 8 | - 尝试去找到更多与你的算法遇到麻烦的开发集样本相匹配的训练集数据 [3]。 9 | 10 | >[3]:还有一些关于“域适应”的研究——如何在一个分布上训练算法,并将其泛化到其他分布中,这些方法通常只适用于一些特殊类型的问题,而且比本章节所描述的思想应用范围要小得多。 11 | 12 | 例如,假设您对语音识别开发集进行了误差分析:你手动检查了100个样本,并尝试分析出算法到底哪里出了问题。你发现你的算法性能不好,是因为在开发集数据样本中大部分的音频剪辑片段都是在汽车里录制的,而大部分的训练集数据样本都是在安静的环境下录制的,意味着,发动机和道路噪声极大的恶化了你的语音系统的性能。在这种情况下,你应该尝试去获取更多在汽车里录制的那些附带噪声的音频样本作为训练集数据。误差分析的目的是了解训练集和开发集分布之间的显著差异——这是导致数据不匹配的原因。 13 | 14 | 如果你的训练集和训练-开发集含有在车内录制的音频样本,你就应该再检测一下算法系统对其中部分数据的处理性能。如果算法对训练集中的车内录制音频样本表现良好,而对训练-开发集中的车内录制音频样本表现不佳,那么就进一步证实了获取更多车内录制数据会有用的假设。这就解释了在之前的章节中,我们为什么要讨论为你的训练集添加从相同分布的开发/测试集中选取的数据的可能性。这样你就能比较出算法分别对训练集中的音频样本和开发/测试集中的音频样本(两者均录制于车内)的性能差异了。 15 | 16 | 不幸的是,在这个过程中无法做出保证。 例如,如果你无法获得更多与开发集数据更匹配的训练集数据,则可能没有一个明确的途径来改进性能。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter43.md: -------------------------------------------------------------------------------- 1 | ## 43. 人工合成数据 2 | 3 | 你的语音系统需要更多的数据,这些数据需要听起来需要像是录制自汽车里的。与其在开车时来收集数据,还不如通过人工合成的方法来更高效地获得数据。 4 | 5 | 假设你从一些网站下载得到了大量的纯粹的汽车/道路噪音音频剪辑数据。同时,你还有大量的关于人在安静的房间里讲话的训练集数据。方法是这样的:你将一个人在安静的房间里说话的训练集音频剪辑数据添加到汽车/道路噪音音频剪辑数据中,这样你就合成了一条新的音频数据,该数据听起来就像是有一个人在很吵的汽车里或者道路边上讲话一样。通过这种方法,我们就可以合成大量的数据,使得这些数据就好像是在车内录制的一样。 6 | 7 | 更一般地说,在一些情况下,人工数据合成允许您创建一个与开发集合理匹配的大型数据集。作为数据合成的第二个例子,我们回到我们的猫咪检测器案例中来,你注意到了在开发集中有相当一部分数据存在运动模糊的问题,因为它们都是来着用户手机上传的图片,手机拍摄加上用户的习惯导致了这些图片在拍摄的一瞬间发生了抖动。你该如何使用互联网上的那些高清图片去合成上述效果的图片呢?简单!为高清图片添加运动模糊滤镜,从而人为地使这些高清图片变的和开发集上的模糊图片差不多。 8 | 9 | 请记住,人工数据合成有一定的挑战性:有时合成出让人感觉真实的数据比合成出让计算机感觉真实的数据更容易。例如,假设您有 1000 小时的语音训练数据,但只有 1 小时的汽车噪音数据。如果你重复地利用这 1 个小时的汽车噪声数据去和这 1000 个小时语音训练数据的不同部分来合成数据,你最终会得到一个同一段噪音重复出现的合成数据集。当我们找一个人来听这段合成数据集中的音频时,他可能没法察觉出什么不同(其实所有的汽车噪声对于我们大多数人来说都是一样的),但是学习算法可能就会“过拟合”这 1 个小时的汽车噪声。这样的话,一旦新的音频片段里的汽车噪声和这 1 小时的汽车噪声不一样的话,泛化性能就会变得很差。 10 | 11 | 或者,假设你有 1000 小时的汽车噪音,但所有的这些噪音都来自 10 辆不同的汽车。在这种情况下,算法有可能“过拟合”这 10 辆车的噪声,导致如果我们对来自其他不同汽车的音频进行测试的时候算法表现就会变得很差。不幸的是,这些问题很难被发现。 12 | 13 | 再举一个例子,你正在构建一个识别汽车的计算机视觉系统,假设你与一家视频游戏公司合作,该公司拥有多辆汽车的计算机图形模型。为了训练您的算法,您可以使用这些模型生成汽车的合成图像,即使合成图像看起来非常逼真,但最终你会发现这种方法实际使用效果不好。这款游戏在整个视频游戏中可能有大约 20 辆汽车的模型——制作一辆汽车的 3D 模型的成本是非常大的。如果你在玩这个游戏,你可能不会注意到在游戏里你看到的汽车其实都是同一个模型(20 个当中的某一个),也许只是模型表面的喷漆不一样而已。换句话说,就是这些数据在你看来是很真实的。但与现实道路上的所有汽车的集合相比较,你就能发现这些来自于 20 个汽车模型生成的汽车数据对于整个世界的汽车分布来说只是其中极小的一部分。也就是说,如果你的如果您的 10 万个训练样本都基于这 20 辆汽车模型合成的话,那么很明显你的算法将“过拟合”这 20 个特定汽车模型,也就是意味着你的算法将无法泛化到有其他车型组成的开发/测试集中。 14 | 15 | 当综合数据时,考虑一下你是否真的合成了一组有代表性的样本。尽量避免在给出合成数据属性的情况下,使学习算法能够区分合成和非合成样本——然而如果所有合成数据都来自 20 辆汽车模型中的某一辆,或者所有合成音频都利用了这 1 小时的汽车噪音的话,这个建议将很难被遵循。 16 | 17 | 在进行数据合成时,我的团队有时会花上数周的时间,才能合成出一些与实际分布非常接近数据,从而更好的发挥出合成数据的效果来。但是一旦如果你能把细节弄清楚,你就能得到一个比以前大得多的训练集了。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter44.md: -------------------------------------------------------------------------------- 1 | ## 44. 优化验证测试 2 | 3 | 假设你正在构建语言识别系统,你的系统通过输入音频片段 A 并为每一个输出的语句 S 计算可能性 $Score_A(S)$。例如,假设输入音频是 A,你可能会通过 $Score_A(S) = P(S|A)$ 来估计得分——即将音频 A 正确转录为句子 S 的概率。给定计算 $Score_A(S)$ 的方法,你需要找到使 $Score_A(S)$ 最大化的那个句子 S: 4 | 5 | $$Output=arg\ \underset{S}{max}\ Score_A(S)$$ 6 | 7 | 那么,该如何计算上式中的 “arg max”呢?如果我们的英文单词有 5 万个,那么一个长度为 $N$ 的句子中单词的组合的可能性则有 $(50000)^N$ 种,实在是太多了。所以,你可以应用一个近似的搜索算法来找到一个合理的 S 来优化(最大化)$Score_A(S)$。关于这种搜索算法,其中有一种叫做“集束搜索”(Beam Serach),它在搜索过程中只保留前 K 个表现最好的作为候选值。(就本章而言,你无需了解关于“集束搜索”的细节)然而,这样的算法并不能保证找到一个 S 来最大化 $Score_A(S)$。 8 | 9 | 假设一个音频剪辑 A 记录了某人说“我喜欢机器学习”。但你的系统输出的不是正确的转录语句——音频被转录为了“我爱机器人”。出现这种错误有下列两种可能性: 10 | 11 | 1. 搜索算法的问题: 近似搜索算法(波束搜索)并没有找到能够最大化 $Score_A(S)$ 的 S 的值。 12 | 2. 目标(评分函数)问题:我们对$Score_A(S) = P(S|A)$ 的估计是不准确的。特别是,我们选择的 $Score_A(S)$ 并不能体现出“我喜欢机器学习”才是正确的转录语句。 13 | 14 | 取决于不同失败的原因,你应该用不同的方式来优先考虑你的工作重心。如果是问题 #1,那么你应该努力去改进你的搜索算法;如果是问题 #2,你应该是着重去研究能够准确估算 $Score_A(S)$ 的学习算法。 15 | 16 | 面对这种情况,一些研究者会随机地选择搜索算法;另一些人则会随机选择一种更好的方法来学习 $Score_A(S)$ 的值,但是,除非你知道这些错误的根本原因,否则大部分努力都是白费的。那么,如何更系统地决定要做什么呢? 17 | 18 | 我们用 $S_{out}$ 来指代系统转录的输出——“我爱机器人”。用 $S^{* }$ 来指代正确的转录内容——“我爱机器学习”。为了深刻了解我们的系统出现的问题到底是上述的 #1 还是 #2 ,你可以执行优化验证测试(Optimization Verification test):首先计算 $Score_A(S^{* })$ 和 $Score_A(S_{out})$,然后检查是否有 $Score_A(S^{* }) > Score_A(S_{out})$。在这里存在两种情况: 19 | 20 | 情况 1: $Score_A(S^{* }) > Score_A(S_{out})$ 21 | 22 | 在这种情况下,您的学习算法已经正确给出 $S^{* }$ 比 $S_{out}$ 更高的分数。 尽管如此,我们的近似搜索算法依然选择了 $S_{out}$ 而不是 $S^{* }$。 这就说明了你的近似搜索算法没有选择最大化 $Score_A(S)$ 的 S 的值。换句话说,优化验证测试告诉了你:你有一个搜索算法问题,应该专注于此。 例如,您可以尝试增加集束搜索的集束宽度。 23 | 24 | 情况 2: $Score_A(S^{* }) \leq Score_A(S_{out})$ 25 | 26 | 在这种情况下,你知道计算 $Score_A(.)$ 的方式存在问题,它无法对正确的输出 $S^{* }$ 给出严格高于 $S_{out}$ 的分数。优化验证测试告诉您有一个目标(评分)函数问题,因此,你应该专注于改进你的算法对不同的句子 S 学习或者近似 $Score_A(S)$ 的方式 。 27 | 28 | 我们上述的讨论都集中在一个例子上。然而要在实践中应用优化验证测试,您应该检查开发集中的错误。 对于开发集中的每个错误,你都要检查评分是否满足 $Score_A(S^{* }) > Score_A(S_{out})$。 满足这个不等式的所有的开发集错误样本的错误原因都将被归咎为优化算法的问题,而不满足不等式的所有的开发集错误样本的错误原因则都将被归咎为计算 $Score_A(.)$ 的方式存在问题。 29 | 30 | 例如,假设您发现在所有的开发集错误样本中有 95% 的错误是由于评分函数 $Score_A(.)$导致的,而只有 5% 是由于优化算法所导致的。通过这个你就能得知,无论您如何改进优化过程,实际上您只会消除大约 5% 的错误。因此,你应该将重点放在如何准确评估 $Score_A(.)$ 的问题上。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter45.md: -------------------------------------------------------------------------------- 1 | ## 45. 优化验证测试的一般形式 2 | 3 | 当给定一些输入 $x$ 时,您可以应用优化验证测试,您知道如何计算$Score_x(y)$,通过这个指标来衡量输出 $y$ 对输入 $x$ 的响应有多好。此外,你还正在使用一种近似算法试图找到 $arg\ max_y\ Score_x(y)$,但怀疑近似搜索算法有时并不能找到满足条件的最大值。在我们之前的例子中, $x=A$指代音频剪辑数据,$y=S$ 指代输出转录。 4 | 5 | 我们还是约定 $y^{* }$ 是“正确的”输出,算法的输出约定为 $y_{out}$。然后,关键的测试是衡量指标之间的关系是否满足 $Score_x(y^{* }) > Score_x(y_{out})$,如果这个不等式成立,那么我们将错误归咎于优化算法——请参考前一章,以确保您理解背后的逻辑——否则,我们则将错误归咎于 $Score_x(y)$ 的计算。 6 | 7 | 让我们再看一个例子。假设您正在构建一个汉英机器翻译系统。你的系统通过输入中文句子 C 并计算出每个可能的英文句子 E 的评分 $Score_C(E)$ 来选出最恰当的翻译句子。例如,你利用公式 $Score_C(E) = P(E|C)$ 来计算出在给定中文句子 C 的前提下,翻译出句子 E 的概率来。 8 | 9 | 您的算法通过尝试计算下列公式来翻译句子: 10 | 11 | $$Output=arg\ \underset{E}{max}\ Score_C(E)$$ 12 | 13 | 但是,所有可能的英语句子 E 的集合太大了,所以你需要依赖启发式搜索算法。 14 | 15 | 假设你的算法输出一个不正确的翻译 $E_{out}$ 而不是一些正确的翻译 $E^{* }$。然后,优化验证测试会要求你计算 $Score_C(E^{* }) > Score_C(E_{out})$,如果这个不等式成立,也就是说 $Score_C(.)$ 正确地判断出 $E^{* }$ 是 $E_{out}$ 的最优输出,则我们将错误归咎于算法优化不够好。否则,我们则将错误归咎于 $Score_x(y)$ 的计算。 16 | 17 | 在 AI 中,最常见的“设计模式”是先学习一个近似评分函数 $Score_C(.)$,然后使用近似最大化算法。如果你能够发现这种模式,你将能够使用优化验证测试来了解错误的来源。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter46.md: -------------------------------------------------------------------------------- 1 | ## 46. 强化学习的例子 2 | 3 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/19.png) 4 | 5 | 假设你正在使用机器学习来教直升机进行复杂的飞行操作。这是一个电脑控制器直升机在引擎关闭时执行着陆的延时照片。 6 | 7 | 这是一个被称为“自动旋转(autorotation)”策略。即使直升机的引擎意外失灵,它也能允许直升机降落。人类飞行员将练习这个策略作为他们训练的一部分。你的目标是使用一种学习算法让直升机通过一个轨迹 T 来安全着陆。 8 | 9 | 为了应用强化学习,你必须设置一个“奖励函数” $R(.)$ 它给出一个分数来衡量每个可能的轨迹 T 有多好。 例如,如果轨迹 T 导致直升机坠毁,那么回报可能是 $R(T) = -1000$ ——这可真是一个巨大的负面报酬啊。一个能够让飞机安全着陆的轨迹 T 可能会产生一个正值 $R(T)$,具体值则取决于着陆的顺利程度。 通常通过手动选择奖励函数 $R(.)$ 来量化不同轨迹 T 的理想程度。它必须权衡着陆的颠簸如何,直升机是否落在正确的位置,乘客下落的程度等等多方面因素。 设计出一个好的奖励函数并不是一件容易的事。 10 | 11 | 给定奖励函数 $R(T)$,增强学习算法的任务是控制直升机,使其达到 $max_TR(T)$。然而,强化学习算法在实现这一最大化的过程中,可能会产生很多近似值,这样就无法逼近这个最大值了。 12 | 13 | 假设你选择了一些奖励函数 $R(.)$ 并运行了你的学习算法。然而,算法的表现似乎比人类飞行员糟糕得多——着陆时的颠簸更大,看起来也比人类飞行员控制的飞机更加危险。那么,你应该如何来判断故障到底是因为强化学习算法在试图找到一条轨迹 T 来实现 $max_TR(T)$ 呢?还是由于奖励函数试图在飞机降落颠簸度和飞机降落准确度之间的权衡导致的? 14 | 15 | 为了应用优化验证试验,设 $T_{human}$ 为人类飞行员所控制飞机的轨迹,设 $T_{out}$ 为算法控制飞机所实现的轨迹。根据我们上面的描述,$T_{human}$ 是 $T_{out}$ 的最优轨迹。因此关键的测试被等价为不等式是否满足:$R(T_{human}) >R(T_{out})$? 16 | 17 | 情形1:如果这个不等式成立,那就意味着,从奖励函数 $R(.)$ 中确实能得出 $R(T_{human})$ 优于 $R(T_{out})$ 的结论。也就是说我们的强化学习算法找到的是一个不是很优秀的 $T_{out}$,这表明,我们的强化学习算法还需改进。 18 | 19 | 情形2:假设不等式是 $R(T_{human}) \leq R(T_{out})$,这意味着即使我们知道 $T_{human}$ 是非常优秀路线,但是奖励函数 $R(.)$ 却给它分配了一个很差劲的分数。这表明,你应该努力改进 $R(.)$ 以更好地获得与良好着陆情况相对应的权衡。 20 | 21 | 许多机器学习应用程序都有使用近似搜索算法优化近似评分函数 $Score_X(.)$ 的“模式”。有时,没有指定的输入 $x$,则可以将评分函数简化为 $Score_(.)$。在我们上面的例子中,评分函数是奖励函数 $Score(T)= R(T)$,优化算法则具体为是一个试图让直升机执行良好轨迹 T 的强化学习算法。 22 | 23 | 与前面的示例不同的是,我们一直都是在与人类级别的性能 $T_{human}$ 进行比较,而不是“最佳”输出。我们假设人类级别的性能 $T_{human}$ 很好,即使不是“最佳”。一般来说,只要你有 $y^{* }$ (在本例中是 $T_{human}$ )即使它不是“最优”输出,它也是你当前学习算法性能的优秀输出,那么优化验证测试依然能指导你确定优化算法和评分函数的改进方向。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter47.md: -------------------------------------------------------------------------------- 1 | ## 47. 端到端学习技术的兴起 2 | 3 | 假设您希望构建一个系统来检索关于在线购物网站上的产品评论,并自动通知你,用户是否喜欢或不喜欢该产品。例如,您希望识别出以下评论是属于积极评论: 4 | 5 | - This is a great mop! 6 | 7 | 识别出以下评论是属于消极评论: 8 | 9 | - This mop is low quality--I regret buying it. 10 | 11 | 识别正面和负面意见的机器学习问题被称为“情感分类”问题。为了建立这个系统,你可以构建一个由两部分组成的“管道(Pipeline)”: 12 | 13 | 1. 解析器(Parser):一种用来标注文本内容中最重要的单词信息 [1] 的系统,例如,你可以使用解析器来标记文本中所有的形容词和名词,因此例子变成了下列所示的那样: 14 | - This is a $great_{Adjectve}$ $mop_{Noun}$! 15 | 2. 情感分类器( Sentiment classifier):一种将带注释的文本作为输入,并预测整体情绪的学习算法。解析器的注释可以极大地帮助这个学习算法:通过给予形容词一个更高的权重,你的算法将能够快速地识别出那些重要的单词(如“great”),同时忽略不那么重要的单词,例如“this”。 16 | 17 | [1]: 解析器给出的文本注释要比这个丰富得多,但是这个简化的描述足以解释端到端的深度学习 18 | 19 | 我们将两个组件组成的“管道”可视化如下: 20 | 21 | ![20](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/20.png) 22 | 23 | 近期出现了用单一学习算法替代管道系统的趋势。这项任务的端到端学习算法尝试在仅输入原始文本“This is a great mop!”的情况下直接识别情绪的可能性: 24 | 25 | ![21](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/21.png) 26 | 27 | 神经网络通常用于端到端学习系统。术语“端到端(End-to-end)”指的是我们要求学习算法直接从输入到所需的输出。即,学习算法直接将系统的“输入端”连接到“输出端”。 28 | 29 | 在处理一些数据丰富的应用中,端到端学习算法非常成功。但这并不意味着它们总是一个好的选择。接下来的几章将给出更多的端到端系统的例子,并给出关于何时应该使用它们和不应该使用它们的建议。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter48.md: -------------------------------------------------------------------------------- 1 | ## 48. 更多的端到端学习的例子 2 | 3 | 假设你想建立一个语音识别系统。那么你可以构建一个包含三个组件的系统: 4 | 5 | ![22](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/22.png) 6 | 7 | 这些组件的职能如下: 8 | 9 | 1. 计算特征:提取手工设计的特征,例如 MFCC 特征(梅尔频率倒谱系数),它尝试捕捉话语的内容,同时忽略不太相关的属性,例如说话者的音调; 10 | 2. 音素识别器:一些语言学家认为声音的基本单位是“音素”。例如,“keep”中最初的“k”音与“cake”中的“c”音相同。这个识别器试图识别音频片段中的音素; 11 | 3. 最终识别器:取出识别的音素序列,并尝试将它们串成一个输出抄本。 12 | 13 | 相反,端到端的系统可能会输入一个音频剪辑,并尝试直接输出文本: 14 | 15 | ![23](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/23.png) 16 | 17 | 到目前为止,我们只描述了完全线性的机器学习“管道”——输出顺序从一个阶段传递到下一个阶段。然而,管道可能更复杂,例如,这里有一个自动驾驶汽车的简单架构: 18 | 19 | ![24](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/24.png) 20 | 21 | 它有三个组成部分:一个负责使用相机图像检测其他车辆; 一个负责检测行人; 最终的组件则为我们的汽车出规划一条避开汽车和行人的道路来。 22 | 23 | 然而,并不是说管道中的每个组件都需要训练和学习。例如,有关“机器人运动规划”的文献中就有大量关于汽车最终路径规划步骤的算法。这里边的许多算法都不涉及学习。 24 | 25 | 相反,端到端的方法可能尝试接受传感器输入并直接输出转向方向。 26 | 27 | ![25](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/25.png) 28 | 29 | 尽管端到端学习已经取得了许多成功,但它并不总是最好的方法。例如,我们认为端到端的语音识别效果很好,但对自主驾驶的端到端学习则持怀疑态度。接下来的几章我会解释原因。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter49.md: -------------------------------------------------------------------------------- 1 | ## 49. 端到端学习的优点和缺点 2 | 3 | 考虑与我们之前的例子相同的语音系统管道: 4 | 5 | ![22](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/22.png) 6 | 7 | 这条管道的许多部分都是“手工设计的”: 8 | 9 | - MFCCs 属于手工设计的音频特征集。虽然它们提供了一个合理的音频输入的摘要,但它们也因为丢弃一些信息使得输入信号简化了。 10 | - 音素是语言学家的发明。它们是语音的不完美表现。如果“音素”对现实声音的近似很差,那么迫使一个算法使用音素来表示则会限制语音系统的性能。 11 | 12 | 虽然这些手工设计的组件限制了语音系统的潜在性能。但是,允许手工设计的组件也有一些优点: 13 | 14 | - MFCC 提取的特征能对与内容无关的某些语音属性(如扬声器音高)具有鲁棒性。因此,它们有助于简化学习算法的问题; 15 | - 音素在一定程度上也是一种合理的语音表达,也可以帮助学习算法理解基本的语音成分,从而提高其性能。 16 | 17 | 拥有更多手工设计的组件通常可以让语音系统以更少的数据进行学习。MFCCs 和基于音素捕获的手工工程知识“补充”了我们的算法从数据中获得的知识。当我们没有太多的数据时,这些知识是有用的。 18 | 19 | 现在,考虑端到端系统: 20 | 21 | ![23](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/23.png) 22 | 23 | 该系统缺乏手工设计的知识。因此,当训练集很小时,它可能比手工设计的管道更糟糕。 24 | 25 | 然而,当训练集很大时,它不会受到 MFCC 或基于音素表示的限制。如果学习算法是一个足够大的神经网络,同时经过了足够多的训练数据的训练,那么它就有可能做得很好,甚至可能接近最优错误率。 26 | 27 | 当有大量的“两端”(输入端和输出端)标记数据时,端到端学习系统往往会做得很好。在本例中,我们需要一个大数据集(音频-文本对)。因此,当这种类型的数据不可用时,请小心谨慎地进行端到端的学习。 28 | 29 | 如果你正在研究一个机器学习问题,而训练集非常小,那么你的算法的大部分知识都必须来自于你的人类洞察力——即,来自您的“手工工程”组件。 30 | 31 | 如果您选择不使用端到端系统,那么您必须决定管道中的每一个步骤,以及它们连接次序。在接下来的几章中,我们将对此类管道的设计提出一些建议。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter5.md: -------------------------------------------------------------------------------- 1 | ## 5. 你的开发集和测试集 2 | 3 | 让我们回到一开始那个猫咪图片识别的例子来。你投入运营了一个手机App,用户可以上传很多不同类型的图片到你的App来。此时,你希望在App上实现一个自动识别猫咪图片的功能。 4 | 5 | 你的团队通过从不同的网站抓取到很多猫图(正例)和非猫图(反例)组成了一个很大的数据集,然后按照70%/30%的法则将数据集分为了训练集和测试集两部分。通过使用这些数据,团队实现了一个在训练集和测试集上均表现良好的猫咪检测器。 6 | 7 | 但是,当你将这个检测器部署到手机App上的时候,发现它的性能变得相当糟糕! 8 | 9 | 这……发生了什么? 10 | 11 | 你发现用户上传的图片数据和团队从网站上抓取下来作为训练集的图片数据存在差异:用户上传的图片普遍使用手机拍摄,这些图片的分辨率比较低,清晰度差甚至曝光不足,然而,你的训练集/测试集上的图片则是来自网页抓取的图片。因此,你的分类器算法并不能很好的泛化到App的实际场景中——识别来自手机拍摄的图片。 12 | 13 | 在大数据时代来临之前,使用70%/30%的比例将数据集随机分割成训练集和测试集是传统机器学习的通用法则。这种做法是可行的,但是,当越来越多的应用部署在与训练集(来自网页抓取的图片)有着不同分布的使用场景(用户手机拍摄的图片)中的时候,这种分割做法就比较糟糕了。 14 | 15 | 我们通常定义: 16 | 17 | - 训练集(Training Set):对算法或者模型进行训练所使用的数据集; 18 | - 开发集(Dev(development) Set​​):用于调整参数,选择特征和做出其他算法相关决定的数据集,又称作“交叉验证集”(Hold-Out Cross Validation Set); 19 | - 测试集(Test set​​):只用来评估算法性能而不会对使用何种算法或者参数做出决策的数据集。 20 | 21 | 一旦定义好了开发集和测试集之后,你的团队将会尝试很多新的想法,例如,设置不同的学习算法参数来看一下哪种效果最佳。总之,开发集和测试集的使用可以让你的团队对算法调优进行快速迭代。 22 | 23 | 换句话说,*设置开发集和测试集的目的是指导你的团队对机器学习系统做出最正确的优化。* 24 | 25 | 因此,你应该遵从下列原则: 26 | 27 | - 选择能够映射出你在未来将要获得的数据,且表现出良好效果的开发集和测试集。 28 | 29 | 也就是说,你的测试集不应该仅仅包含现阶段可用数据的30%,特别是当你期望得到的数据(用户的手机拍摄的图片)和你的训练集的数据(网站抓取的图片)来自不同分布的时候。 30 | 31 | 如果你还没有上线你的App,那么你可能还没有任何用户,因此无法获取符合未来数据分布的图片,但是您仍然可以尝试去模拟这种分布。比如,请求你的朋友们使用手机拍些猫咪的图片给你。一旦应用上线,就可以使用用户上传的数据去更新你的开发集和测试集了。 32 | 33 | 如果真的没有任何办法去获取那些符合未来数据分布的图片的话,也许你可以使用上边提到的网站抓取的图片来优化算法,但是应该清醒地意识到这种方式训练出来的系统的泛化(Generalize)性能肯定是不好的。 34 | 35 | 你需要有一定的判断力来决定投入多少预算去提高开发集和测试集的质量。切记不要假定你的训练集和测试集有着相同的分布,尝试挑选那些能够很好的体现出你最终想要的结果的数据作为测试样本,而不仅仅是挑那些和训练集有着相同分布的数据。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter50.md: -------------------------------------------------------------------------------- 1 | ## 50. 选择管道组件:数据可用性 2 | 3 | 在构建非端到端学习的管道系统时,管道组件的最佳选择是什么?如何设计管道将极大地影响整个系统的性能,其中一个重要因素是你是否可以轻松收集数据来训练管道的每个组件。 4 | 5 | 例如,下列这个自动驾驶汽车的算法架构: 6 | 7 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/24.png) 8 | 9 | 你可以使用机器学习算法来检测汽车和行人。此外,获取这些数据并不困难:有许多计算机视觉数据集——大量标记了汽车和行人。你还可以使用众包(比如Amazon Mechanical Turk)来获取更大的数据集。因此,对于训练自动驾驶算法的汽车和行人检测器来说,训练数据的获取相对容易。 10 | 11 | 相反,考虑一种纯粹的端到端方法: 12 | 13 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/25.png) 14 | 15 | 为了训练这个系统,我们需要一个大的(图像,方向)对数据集。让人们驾驶汽车并记录他们的转向方向来收集这些数据是非常耗时和昂贵的。同时你需要一支特别装备的车队,以及通过大量的驾驶来尽可能的覆盖所有可能遇到的场景,这使得端到端的学习系统很难训练。相比而言,获得大量的有标记的汽车或行人图像的数据集要容易得多。 16 | 17 | 更一般地说,如果有许多数据可用来训练管道的「中间模块」(例如,汽车检测器或者行人检测器),那么你可以考虑使用具有多个阶段的管道。这种结构可能更优越,因为你可以使用所有可用数据来训练中间模块。 18 | 19 | 在更多的端到端数据可用之前,我认为非端到端方法对于自动驾驶来说更有希望:它的架构能够更好地发挥出数据的价值来。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter51.md: -------------------------------------------------------------------------------- 1 | ## 51. 选择管道组件:任务简单性 2 | 3 | 除了数据可用性之外,在选择管道组件时还应考虑第二个因素:单个组件需要解决的任务有多简单? 您应该尽可能尝试选择那些易于构建或学习的管道组件。那么,对于一个管道组件来说,何谓之「易于」学习呢? 4 | 5 | ![26](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/26.png) 6 | 7 | 思考下列的机器学习任务,并按照从难到易的顺序依次列出: 8 | 9 | 1. 分类图像是否曝光过度(如上例所示); 10 | 2. 分类图像是室内还是室外拍摄; 11 | 3. 分类图像是否包含猫; 12 | 4. 分类图像是否包含黑色和白色毛皮的猫; 13 | 5. 分类图像是否包含暹罗猫(特定品种的猫)。 14 | 15 | 上述任务每一个都是属于图像的二分类任务:输入图片,输出 0 或者 1。但是列表前面的知识似乎更容易让神经网络学习到。也即是说,用更少的样本训练更简单的任务。 16 | 17 | 到目前,机器学习还没有一个好的正式定义来定义是什么导致了一项任务变得容易或困难 [2]。但随着深度学习和多层神经网络的兴起,我们有时候会将那些只需要较少的计算步骤就能完成的任务定义为「容易」(对应于浅层神经网络)。而将那些需要更多的计算步骤才能完成的任务定义为「困难」(对应于深层神经网络)。但这都是非正式定义。 18 | 19 | [2]: 信息论中有一个概念叫做:「柯尔莫哥洛夫复杂性(Kolmogorov Complexity)」——学习函数的复杂性等价于可以产生该函数的最短计算机程序的长度。然而,这一理论概念在人工智能中几乎没有实际应用。详见:[https://en.wikipedia.org/wiki/Kolmogorov_complexity](https://en.wikipedia.org/wiki/Kolmogorov_complexity) 20 | 21 | 如果您能够将一个复杂的任务,将其分解为更简单的子任务,那么通过显式地对子任务的步骤进行编码,你就给了算法先验知识,这可以帮助它更有效地学习一项任务。 22 | 23 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/27.png) 24 | 25 | 假设您正在构建一个暹罗猫检测器。 下列是一个纯粹的端到端学习架构: 26 | 27 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/28.png) 28 | 29 | 相比之下,您可以选择使用管道,步骤有两个: 30 | 31 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/29.png) 32 | 33 | 第一步(猫检测器)检测图像中的所有猫: 34 | 35 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/30.png) 36 | 37 | 然后,第二步将每个检测到的猫(一次一个)的裁剪图像传递给猫品种分类器,如果检测到的猫分类为是暹罗猫,则输出 1。 38 | 39 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/31.png) 40 | 41 | 与使用标签 0/1 训练纯粹的端到端分类器相比,管道中的两个组件中的每一个——猫探测器和猫品种分类器——似乎都更容易学习,并且只需要更少的数据[^3]。 42 | 43 | [^3]:如果你熟悉对象物体检测算法,那么你应该知道它们不仅仅只学习 0/1 图像标签,而是使用作为训练数据的一部分提供的边界框进行训练。对他们的讨论超出了本书的范围,详见 Coursera ([http://deeplearning.ai​](http://deeplearning.ai​)),有相关课程专门讨论对象物体检测。 44 | 45 | 作为最后一个例子,让我们重新回顾之前的自动驾驶算法管道: 46 | 47 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/24.png) 48 | 49 | 通过使用这条管道,你可以告诉算法有 3 个关键步骤:(1)检测其他车辆;(2)检测行人;(3)为你的汽车规划道路。此外,与纯粹的端到端学习方法相比,这些方法都是一个相对简单的函数,因此可以用更少的数据来学习。 50 | 51 | 总之,在决定管道组件应该是什么时,尝试去构建一个管道,让其中每个组件都是一个相对「简单」的功能,从而让组件能够使用较少的数据进行学习。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter52.md: -------------------------------------------------------------------------------- 1 | ## 52. 直接学习复杂的输出 2 | 3 | 图像分类算法输入图像 $x$,输出一个表示对象类别的整数。那么,算法可以输出描述图像的句子吗? 4 | 5 | 比如: 6 | 7 | ![32](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/32.png) 8 | 9 | 传统的监督学习算法学习函数 $h$:$X\rightarrow Y$,其中输出 $y$ 通常是整数或者实数。例如: 10 | 11 | 12 | 应用场景 | X | Y 13 | ---------|----------|--------- 14 | 垃圾邮件分类 | 邮件 | 垃圾邮件/不是垃圾邮件(0/1) 15 | 图像识别 | 图片 | 整数标签 16 | 房子价格预测 | 房子的特征 | 房子价格 17 | 产品推荐 | 商品或者用户特征| 购买的机会 18 | 19 | 20 | 端到端的深度学习中最令人兴奋的发展之一是它可以让我们直接学习到比数字复杂得多的 $y$。在上面的图像字幕示例中,可以让神经网络输入图像 $x$ 并直接输出标题 $y$。 21 | 22 | 更多的例子: 23 | 24 | 应用场景 | X | Y | 例子引用 25 | ---------|----------|--------- 26 | 图像字幕 | 图片 | 文字 | Mao et al., 2014 27 | 机器翻译 | 英文文本 | 法文文本 | Suskever et al., 2014  28 | 问答系统 | 问题文本 | 答案文本 | Bordes et al., 2015 29 | 语音识别 | 音频 | 转录文本 | Hannun et al., 2015  30 | 文本转语音 | 文本特征 | 音频 | van der Oord et al., 2016 31 | 32 | 这是深度学习中的一个趋势:当你有正确的(输入、输出)标记对时,你就可以尝试去使用端到端学习技术,即使输出是一个句子、一个图像、音频或其他比单个数字更丰富的输出。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter53.md: -------------------------------------------------------------------------------- 1 | ## 53. 根据组件执行误差分析 2 | 3 | 假设你的系统是使用复杂的机器学习管道构建的,并且希望提高系统的性能,那么你应该对整个机器学习管道的哪一个部分进行改进呢?通过将错误归因于管道的特定部分,你可以决定如何确定工作的优先级。 4 | 5 | 让我们以我们的暹罗猫分类器作为示例: 6 | 7 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/29.png) 8 | 9 | 第一部分是猫分类器,负责探测图片中猫咪部分并把它们抠出来;第二部分是猫的品种分类器,用来判定抠出来的猫图是否是暹罗猫品种。改进两个组件中的任何一个都可能花费你数年的时间,那么你该决定关注哪个(些)组件呢? 10 | 11 | 通过根据组件执行误差分析,你可以尝试将算法所犯的每个错误归因于管道的两个部分中的一个(或两个)。例如:某张图片样本的正确标签为含有暹罗猫($y=1$),算法却将其标签误分类为不含有暹罗猫($y=0$)。 12 | 13 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/33.png) 14 | 15 | 让我们手动检查算法两个步骤的执行过程,假设猫检测器从下图中检测出一只猫: 16 | 17 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/34.png) 18 | 19 | 这意味着下图将作为猫咪品种分类器的输入: 20 | 21 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/35.png) 22 | 23 | 接下来,猫品种分类器将该输入正确分类为不包含暹罗猫。因此,作为猫品种分类器而言,输入包含一堆岩石的图片并输入一个 $y=0$ 的标签是没问题的。实际上,作为人而言,如果给出这样的图片,也会把它标签标定为 $y=0$ 。因此,我们就可以得出,整个猫分类器管道出问题的地方在第一部分——猫探测器。 24 | 25 | 另一方面,如果猫探测器输出了以下边界框: 26 | 27 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/36.png) 28 | 29 | 你会得出如下结论,猫探测器是工作正常的,并且我们可以将出问题的组件定位在猫品种分类器上。 30 | 31 | 假设你遍历100个错误分类的开发集图像,并发现90个错误可归因于猫探测器,只有10个错误可归因于猫品种分类器。 那么你可以有把握地得出结论:应该更加关注如何改进猫探测器。 32 | 33 | 到目前为止,我们关于如何将误差归因于管道的某个组件的描述是非正式的:你查看每个部分的输出,看看是否可以决定哪个部分出错了。这种非正式的方法可能就是你所需要的。但在下一章中,你还将看到一种更正式的误差归因方式。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter54.md: -------------------------------------------------------------------------------- 1 | ## 54. 将误差归因到某个组件 2 | 3 | 让我们继续使用这个例子: 4 | 5 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/29.png) 6 | 7 | 假设猫检测器输出了这样的边界框: 8 | 9 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/37.png) 10 | 11 | 被裁减的图片将会作为猫品种分类器的输入,因此它给出了错误的分类结果 $y=0$, 即图片中没有猫。 12 | 13 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/38.png) 14 | 15 | 猫检测器的效果很糟糕。然而,一个技术娴熟的人仍然可以从这糟糕的裁剪图像中识别出暹罗猫。那么我们是否将此误差归因于猫检测器或猫品种分类器两者之一,或两者兼而有之? 答案是模棱两可的。 16 | 17 | 如果像这样的模糊情况的数量很少,你可以做出你想要的任何决定并获得类似的结果。但是这里有一个更正式的测试方法,可以让你更明确地将错误归因于一个组件: 18 | 19 | 1. 用手动标记的边界框替换猫检测器的输出; 20 | 2. 通过猫品种分类器处理相应的裁剪图像。如果猫品种分类器仍将其错误地分类,则将误差归因于猫品种分类器。否则,将此误差归因于猫检测器; 21 | 22 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/39.png) 23 | 24 | 换句话说,跑一个实验,在其中为猫品种分类器提供「完美」输入,则会出现两种情况: 25 | 26 | - 情况1:即使给出了一个「完美」的边界框,猫品种分类器仍然错误地输出 $y = 0$。 在这种情况下,很明显猫品种分类器是有问题的; 27 | - 情况2:给定一个「完美」的边界框,品种分类器现在正确输出 $y = 1$。这表明如果只有猫探测器给出了一个更完美的边界框,那么整个系统的输出就是正确的。因此,我们将错误归因于猫探测器。 28 | 29 | 通过对开发集中误分类的图像执行此分析流程,你现在可以明确地将每个错误归因于一个组件。这允许你对整个管道的每个组件引起的错误程度进行分析,从而决定将注意力集中在哪一块。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter55.md: -------------------------------------------------------------------------------- 1 | ## 55. 误差归因的一般情况 2 | 3 | 以下是误差归因的一般步骤。假设管道有三个步骤 A,B 和 C,其中 A 直接输入到 B,B 直接输入到 C。 4 | 5 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/40.png) 6 | 7 | 对于系统在开发集上存在的每个错误样本: 8 | 9 | 1. 尝试手动修改 A 的输出为 「完美」 输出(例如,猫的 「完美」 边界框),并在此输出上运行管道其余的 B,C 部分。 如果算法现在给出了正确的输出,那么这表明,只要 A 给出了更好的输出,那么整个算法的输出就是正确的;因此,你可以将此误差归因于组件 A。 否则,请继续执行步骤 2。 10 | 2. 尝试手动修改 B 的输出为 「完美」 输出。如果算法现在给出正确的输出,则将误差归因于组件 B。否则,继续执行步骤 3。 11 | 3. 将误差归因于组件 B。 12 | 13 | 让我们来看一个复杂一点的例子: 14 | 15 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/41.png) 16 | 17 | 如上图所示,你的自动驾驶汽车算法使用上述管道。 如何根据组件的错误分析来决定要关注哪个(些)组件呢? 18 | 19 | 你可以将三个组件映射到 A, B, C,如下所示: 20 | 21 | - A:检测汽车 22 | - B:检测行人 23 | - C:规划汽车路径 24 | 25 | 按照上述程序,假设你在封闭的轨道上对你的汽车进行测试的时候出现这种情况:汽车选择了一个比熟练司机更激进的转向方向。在自动驾驶领域,这种情况通常被称为场景(scenario)。接着你需要: 26 | 27 | 1. 尝试手动修改 A (检测汽车)的输出,使之成为 「完美」 输出(例如,手动干预并告诉它其他汽车在哪里)。然后像之前一样运行管道其余的 B 和 C 部分,同时允许 C (规划路径)使用 A 现在的完美输出。如果发现算法为汽车规划出一条更好的路径,那么表明,如果 A 给出更好的输出,整个算法的输出会更好;因此,你可以将此误差归因于组件 A。否则,继续执行步骤 2。 28 | 2. 尝试手动修改 B(检测行人)的输出,使之成为 「完美」 输出。如果算法最终给出正确的输出,则将错误归因于组件 B.否则,继续执行步骤3。 29 | 3. 将误差归因于组件 C。 30 | 31 | 机器学习管道的组件应该根据有向无环图(DAG)排序,这意味着你应该能够以一些固定的从左到右的顺序计算它们,后面的组件应仅依赖于早期组件的输出。只要组件 A -> B -> C顺序的映射遵循 DAG 排序,那么误差分析就没问题。但是假设你交换了 A 和 B,那么结果可能略有不同: 32 | 33 | - A:检测行人(以前是检测汽车) 34 | - B:检测汽车(以前是检测行人) 35 | - C:规划汽车路径 36 | 37 | 但是这种分析的结果仍然是有效的,并能为你的注意力集中在哪里提供了良好的指导。 38 | -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter56.md: -------------------------------------------------------------------------------- 1 | ## 56. 组件误差分析与人类效率的比较 2 | 3 | 对学习算法进行误差分析就像使用数据科学来分析机器学习系统的误差,目的是作出有关下一步该做什么的决策。从最基本的角度来看,组件的误差分析最重要的是告诉了我们哪些组件的是最值得努力改进的。 4 | 5 | 假设你有一个关于客户在网上购物的数据集。数据科学家可能有许多不同的方法来分析数据,并可能会得出许多不同的结论:关于网站是否应该提高价格?关于是否应该通过不同营销活动获得的客户的终身价值等等。在这里,分析数据集的方法没有所谓的正确与否,不同的方法都有可能得出有用的决策。同样,也没有一种绝对「正确」的方法来进行误差分析。通过这些章节,你已经学习了许多最常见的设计模式,可以用于分析机器学习系统并得出有利于优化系统的决策,当然你也可以自由地尝试其他分析误差的方法。 6 | 7 | 让我们回到自动驾驶的应用程序中来,其中汽车检测算法输出附近汽车的位置(可能是速度),行人检测算法输出附近行人的位置,这两个输出最终被用于为这辆车规划行驶路线。 8 | 9 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/41.png) 10 | 11 | 如果想要调试该机器学习管道,却不希望严格遵循上一章中提到的过程,你可以非正式地询问: 12 | 13 | 1. 在检测汽车时,汽车检测组件与人类水平表现相差多少? 14 | 2. 在检测行人时,行人检测组件与人类水平表现相差多少? 15 | 3. 整个系统的性能与人类表现相差多少?在这里,人类水平的表现假定:人类必须仅根据前两个组件的输出(而不是根据摄像机图像)来规划汽车的路径。换句话说,当人类只得到相同的输入时,路径规划组件的性能与人类的性能相较如何? 16 | 17 | 如果你发现其中一个组件的性能表现远低于人类水平表现,那么应该专注于提高该组件的性能。 18 | 19 | 许多的误差分析过程在我们去尝试自动化人类所做的工作的时候效果最好,因此可以针对人类水平表现进行基准测试。我们前面的大多数例子都有这个隐式假设。如果你正在构建一个机器学习系统,其中的最终输出或一些中间组件正在做一些连人类都做不到的事情,那么上述一些过程将不适用。 20 | 21 | 总而言之,这是处理人类可以解决的问题的另一个优势——你有更强大的误差分析工具,因此你可以更有效地为团队的工作标定优先级。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter57.md: -------------------------------------------------------------------------------- 1 | ## 57. 发现有缺陷的机器学习管道 2 | 3 | 如果机器学习管道的每个单独组件的性能都达到了人的水平或接近人的水平,但是管道的整体性能却远远低于人的水平,这通常意味着管道有缺陷,需要重新设计。误差分析还可以帮助你了解是否需要重新设计管道。 4 | 5 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/41.png) 6 | 7 | 在前一章中,我们有讨论到这三个部分组件的表现是否达到人类水平的问题。假设所有三个问题的答案都是肯定的,也即是系统满足: 8 | 9 | 1. 汽车检测部件在用于从摄像机图像中检测汽车中(大概)达到人类级别的性能; 10 | 2. 行人检测组件在用于从摄像机图像中检测汽车中(大概)达到人类级别的性能; 11 | 3. 路线规划组件能达到和利用前两个组件的输出(而不是根据摄像机图像)来规划汽车的路径的专业人士相当的性能表现。 12 | 13 | 然而,你的自动驾驶汽车系统的整体性能远远低于人类水平。换句话说,能够访问摄像机图像的人可以为汽车规划出明显更好的路径。据此你能得出什么结论? 14 | 15 | 唯一可能的结论是机器学习管道结构存在缺陷。在这种情况下,规划路径组件在给定其输入的情况下运行得很好,但是输入并没有包含足够的信息。此时应该问问自己,除了前面两个管道组件的输出之外,还需要什么其他信息才能很好地规划汽车行驶的路径。换句话说,一个熟练的驾驶员还需要什么其他信息? 16 | 17 | 例如,假设你意识到人类驾驶员还需要知道车道标记的位置,这建议你应该重新设计管道如下【1】: 18 | 19 | 【1】:在上面的自动驾驶案例中,理论上,我们可以通过将原始相机图像直接输入规划组件来解决这个问题。但是,这违反了第 51 节中描述的「任务简单性」的设计原则,因为路径规划模块现在需要输入原始图像,并且有一个非常复杂的任务需要解决。这就是为什么添加一个检测车道标记组件是一个更好的选择的原因——它有助于将重要的和以前缺少的有关车道标记的信息提供给路径规划模块,同时可以避免使任何特定模块过于复杂而变得无法构建/训练。 20 | 21 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/42.png) 22 | 23 | 最后,如果你认为,即使在每个组件都具有人类级别的性能的情况下(请记住,你是在和与管道组件具有相同输入的人进行比较),管道整体上也不会达到人类水平的性能,则表明管道有缺陷,应该重新设计。 24 | 25 | ## 本书结语 26 | 27 | 恭喜你完成这本书的阅读! 28 | 29 | 在第 2 章中,我们讨论了本书如何帮助你成为团队的超级英雄。 30 | 31 | 唯一比成为超级英雄更好的事情就是成为超级英雄团队的一员。我希望你能把这本书的分享给你的朋友和队友,并帮助他们成为超级英雄! -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter6.md: -------------------------------------------------------------------------------- 1 | ## 6. 开发集和测试集应当服从同一分布 2 | 3 | 根据你的App的受众地区,将猫咪数据来源分为四个区域:(i)美国、(ii)中国,(iii)印度和(iv)其他。我们提出了一个服从这样分布(Distribution)的开发集和测试集:将美国和印度地区的数据归入开发集中,将来自中国和其他地区的数据归入测试集中。简单说就是,我们随机将两个地区的数据分配给开发集,另外两个分配给测试集。这种分法对吗? 4 | 5 | ![](https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/master/md_images/9.jpg) 6 | 7 | 一旦定义好开发集和测试集,你的团队将会专注于提高开发集上的表现。所以,开发集应该要反映出你最想要改进的任务——在四个区域都表现良好,而不是其中的两个。 8 | 9 | 开发集和测试集服从不同分布导致的第二个问题是:你的团队可能会构建出来在开发集上表现良好的系统,但发现它在测试集中却表现很差,我曾在大量的挫折和错误的努力中得到过这种结果。现在要避免这种悲剧发生在你身上。 10 | 11 | 还是以例子来说明,假设你的团队构建的系统在开发集上表现良好但是在测试集却很糟糕。如果此时你的开发集和测试集服从同一个分布,那么你将非常清楚的知道哪里出了问题——数据过拟合了。一个有效的办法就是获取更多的开发集数据。 12 | 13 | 但是,如果开发集和测试集服从不同的分布,那么你的决策就不那么明朗了,以下几个方面都可能是出错的地方: 14 | 15 | 1. 你过拟合(Overfit)了开发集; 16 | 2. 测试集的数据比开发集数据要更加复杂,你的算法已经达到了预期的效果并且已经无法进一步改善了; 17 | 3. 测试集的数据并不比开发集数据复杂,只是因为服从不同分布,所以开发集上良好的性能表现并不能泛化到训练集中。在这种情况下,你在开发集上所做的努力就全部白费了。 18 | 19 | 开发机器学习应用已经足够困难,不匹配的开发集和测试集则引入了额外的不确定性——改进开发集的分布是否能提高测试集表现?这会使得更加难以确定哪些优化措施是有效的哪些是徒劳的,从而难以指定优化措施的优先级顺序。 20 | 21 | 如果你处理第三方的基准测试,它们的创建者可能指定了来自不同分布的开发集和训练集。与服从同一分布的开发集和训练集相比,对于基准测试的性能表现,运气将会比技巧产生更大的影响。当然,构建能够在一种分布中表现良好而且能泛化到其他分布的学习算法是很重要的研究方向。但是,如果你的目标是构建出能在特定的机器学习应用中取得进展的话,我建议你尝试选择服从同一分布的开发集和测试集,这会使您的团队更有效率。 22 | -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter7.md: -------------------------------------------------------------------------------- 1 | ## 7. 开发集/测试集多大合适? 2 | 3 | 开发集应该足够大,大到能够检测出你在尝试的不同算法之间的差异。比如,如果分类器A的准确率有90%,分类器B的准确率有90.1%,那么只有100个样本的开发集是无法检测到这0.1%的差异的。与我所见过的机器学习问题相比,100样本大小的开发集着实很小。样本规模在1000-10000之间的开发集很常见,通过10000样本大小的开发集,你才有更大的可能性检测出这0.1%的提高 [1]。 4 | 5 | >[1].理论上,我们还可以在开发集上测试算法的改变能否产生统计意义上的显著差异。事实上,大多数团队不会为此而操心(除非他们正在准备发表学术论文),而且我通常没有发现对测量中期进展有用的统计显着性检验。 6 | 7 | 对于那些成熟的,重要的应用来说,比如那些广告、搜索引擎和产品推荐等,我也看到过为了提升那0.01%而不懈努力的团队,这个努力将直接影响公司的利润。在这种情况下,为了能够检测到更加小算法性能改进,开发集的大小可能远大于10000。 8 | 9 | 那么测试集的大小多少合适呢?他也应该足够大,大到能够为系统的整体性能提供很高的可信度。一种流行的启发性方法就是将数据集的30%用于训练集,这适用于一个具有中等大小规模(100-10000个样本)的数据集。但是在大数据时代,我们所面临的可能是有着数十亿样本的机器学习问题,分配给开发/测试集的数据比例一直在降低,但是开发/测试集的数据量却是不断递增的。总之,在给开发/测试集分配数据时,没有必要分配超出评估算法性能所需的数据量。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter8.md: -------------------------------------------------------------------------------- 1 | ## 8. 为团队进行算法优化建立单一数字评估指标 2 | 3 | 分类准确率是单一数字评估指标(Single-Number Evaluation Metric​​)的其中一种:你在开发集(测试集)上运行你的分类器,然后得到一个样本分类准确率的一个数字,通过这个指标,如果分类器A的准确率是97%,而分类器B的准确率是90%,则我们判定分类器A更好。 4 | 5 | 相比之下,查准率(Precision)和查全率(Recall) [2]就不属于单一数字评估指标:它给出了两个数字用来评估分类器。使用混合数字评估指标(Multiple-Number Evaluation Metrics)使得比较算法的差异变得更加困难。假设你的算法表现如下表: 6 | 7 | > [2].对于猫分类器这个案例。查准率的定义是:分类器将开发(测试)集标记为猫的样本中,有多少真的是猫,$\frac{预测为正类的正类数量}{预测为正类的数量} * 100%$;查全率就是在开发(测试)集中,分类器正确识别出的真是猫的图片数量占所有的真是猫的图片数量的百分比,$\frac{预测为正类的正类数量}{正类数量} * 100%$。通常需要在高查准率与高查全率之间进行权衡。 8 | 9 | 分类器|查准率|查全率 10 | ---|---|--- 11 | A|95%|90% 12 | B|98%|85% 13 | 14 | 上边的举例中,任意一个分类器都没有明显表现的比另一个好,所以这类混合数字评估指标无法立刻引导你判断出哪一个分类器更好。 15 | 16 | 在开发过程中,你的团队会进行大量关于算法架构、模型参数、特征选择方面的尝试。使用单一数字评估指标,比如准确率,可以允许你依照该指标下的性能表现对所有模型进行排序,从而快速的决断出哪一个模型效果更好。 17 | 18 | 如果你希望综合考虑查准率、查全率的性能度量,我建议使用一种标准的方法将它们组合成一个单一数字性能指标。例如,可以将查准率和查全率的均值作为评价指标。或者你可以计算“F1度量”(F1 score),这是一种基于查准率和查全率的调和平均,比单纯的求两者的均值效果要好 [3]。 19 | 20 | > [3].如果你想更多的了解关于“F1度量”的信息,请参阅:[https://en.wikipedia.org/wiki/F1_score](https://en.wikipedia.org/wiki/F1_score),其计算公式:$F1 = \frac{2}{\frac{1}{P}+\frac{1}{R} } = \frac{2PR}{P+R}$ 21 | 22 | 分类器|查准率|查全率|F1度量 23 | ---|---|---|--- 24 | A|95%|90%|92.4% 25 | B|98%|85%|91.0% 26 | 27 | 当你要在大量分类器中做出选择的时候,单一数字评估指标能帮助你更快的做出决策。它为算法表现提供了一个明确的优先级顺序,从而给出一个清晰的优化方向。 28 | 29 | 作为最后一个例子,假设你已经得到了你的猫分类器在四个主要市场(美国、印度、中国和其他)的分类准确率。这相当于给出了四个指标,通过将这四个地区的分类准确率进行平均或者加权平均,最终将得到一个单一数字指标。取均值或者加权平均是将多个指标合并为一个的最常用的办法之一。 -------------------------------------------------------------------------------- /mlyearning-Chinese ver/chapter9.md: -------------------------------------------------------------------------------- 1 | ## 9. 优化和满足指标 2 | 3 | 这是组合多个评估指标的另一个方法。 4 | 5 | 假定你同时关心算法的准确率和运行时间,你需要从下列三个分类器中选一个最好的。 6 | 7 | 分类器|准确率|运行时间 8 | ---|---|--- 9 | A|90%|80ms 10 | B|92%|895ms 11 | C|95%|1500ms 12 | 13 | 此时,将准确率和运行时间放入单一公式计算得到单一指标的做法似乎并不合适,比如: 14 | 15 | $$Accuracy-0.5 \times RunningTime$$ 16 | 17 | 下面,是你可以尝试的操作:首先,设定一个“可接受”的运行时间,假定说只要是运行时间在100ms以内的算法都是可以接受的。然后,从满足时间要求的分类器里,最大化准确率。在这里,“运行时间”就是“满足指标”——你的分类器只需要在这个指标上表现的足够好就行了(运行时间低于100ms),而“准确率”就是“优化指标”。 18 | 19 | 当你正在权衡N个不同的标准的时候,比如,一个模型的二进制文件的大小(这对于一个移动App来说很重要,因为用户并不想下载很大的App)、运行时间和准确率。可以考虑将其中的N-1个标准设置为“满足指标”,也就是说,只需要这些条件满足一定的值就行了。然后将剩下那个设置为“优化指标”。还是上头的例子,可以将模型的二进制文件大小和运行时间都设置为“满足指标”,并尝试在这些约束条件下不断优化准确率(优化指标)。 20 | 21 | 作为本节最后一个例子,假设你在搭建一个硬件设备,该设备使用麦克风来监听用户说出的某个特定的唤醒词(Wakeword),从而唤醒系统。就好比亚马逊的“Echo”听到“Alexa”、苹果Siri听到“hey Siri”、百度应用听到“你好百度”都会唤醒系统一样。你不仅需要关心假正例( False Positive Rate)——系统在用户没有人说出唤醒词的时候被唤醒,而且还要关心假反例(False Negative Rate)——当用户说出唤醒词系统却没有被唤醒。那么,对于该系统的性能而言,一个合理的优化目标就是最大限度的减少假反例的比例(优化指标),同时满足每隔24小时最多出现一个假正例(满足指标)即可。 22 | -------------------------------------------------------------------------------- /mlyearning-Draft/NG_MLY10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/NG_MLY10.pdf -------------------------------------------------------------------------------- /mlyearning-Draft/NG_MLY11.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/NG_MLY11.pdf -------------------------------------------------------------------------------- /mlyearning-Draft/Ng_MLY01.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/Ng_MLY01.pdf -------------------------------------------------------------------------------- /mlyearning-Draft/Ng_MLY02.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/Ng_MLY02.pdf -------------------------------------------------------------------------------- /mlyearning-Draft/Ng_MLY03.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/Ng_MLY03.pdf -------------------------------------------------------------------------------- /mlyearning-Draft/Ng_MLY04.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/Ng_MLY04.pdf -------------------------------------------------------------------------------- /mlyearning-Draft/Ng_MLY05.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/Ng_MLY05.pdf -------------------------------------------------------------------------------- /mlyearning-Draft/Ng_MLY06.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/Ng_MLY06.pdf -------------------------------------------------------------------------------- /mlyearning-Draft/Ng_MLY07.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/Ng_MLY07.pdf -------------------------------------------------------------------------------- /mlyearning-Draft/Ng_MLY08.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/Ng_MLY08.pdf -------------------------------------------------------------------------------- /mlyearning-Draft/Ng_MLY09.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/Ng_MLY09.pdf -------------------------------------------------------------------------------- /mlyearning-Draft/Ng_MLY12.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/Ng_MLY12.pdf -------------------------------------------------------------------------------- /mlyearning-Draft/Ng_MLY13.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlbertHG/Machine-Learning-Yearning-Chinese-ver/37448eb540d72f0c31defd2ce214e4f7e875e247/mlyearning-Draft/Ng_MLY13.pdf --------------------------------------------------------------------------------