├── LICENSE ├── chapters ├── 10_RNN.md ├── 11_practical.md ├── 12_application.md ├── 1_introduction.md ├── 2_linear_algebra.md ├── 3_probability.md ├── 4_mumerical_computation.md ├── 5_basic_ml.md ├── 6_deep_forawrd.md ├── 7_regularization.md ├── 8_optimization.md └── 9_CNN.md ├── imgs ├── 1 │ ├── AI_system.JPG │ ├── AI_system.png │ ├── MNIST.JPG │ ├── MNIST.png │ ├── con_per_neurons.JPG │ ├── con_per_neurons.png │ ├── concepts.JPG │ ├── concepts.png │ ├── dataset_size.JPG │ ├── dataset_size.png │ ├── depth.JPG │ ├── depth.png │ ├── error_rate.JPG │ ├── error_rate.png │ ├── history.JPG │ ├── history.png │ ├── num_neurons.JPG │ ├── num_neurons.png │ ├── representation.JPG │ ├── representation.png │ ├── venn_diagram.JPG │ └── venn_diagram.png ├── 2 │ ├── cross.JPG │ ├── cross.png │ ├── dot.JPG │ └── dot.png ├── 3 │ ├── expon.png │ ├── gaussian.png │ ├── laplace.png │ ├── sigmoid.png │ ├── sigmoid_softplus.png │ └── softplus.png ├── 4 │ ├── critical_point.JPG │ ├── critical_point.png │ ├── curvature.JPG │ ├── curvature.png │ ├── deeplearning_optimization.JPG │ ├── deeplearning_optimization.png │ ├── g_descent.JPG │ ├── g_descent.png │ ├── saddle.JPG │ └── saddle.png ├── 5 │ ├── bias_var.JPG │ ├── bias_var.png │ ├── capacity.JPG │ ├── capacity.png │ ├── manifold.JPG │ └── manifold.png ├── 6 │ ├── BP_forward.JPG │ ├── BP_forward.png │ ├── BP_forward2.JPG │ ├── BP_forward2.png │ ├── MLP_bp.JPG │ ├── MLP_bp.png │ ├── compu_chain.JPG │ ├── compu_chain.png │ ├── compu_g.JPG │ ├── compu_g.png │ ├── deeper.JPG │ ├── deeper.png │ ├── feedforward.JPG │ ├── feedforward.png │ ├── forward_learn.JPG │ ├── forward_learn.png │ ├── hard_tanh.png │ ├── max_min.png │ ├── mix_gaussian.JPG │ ├── mix_gaussian.png │ ├── more_param.JPG │ ├── more_param.png │ ├── relu.png │ ├── relu_modified.png │ ├── sigmoid_tanh.png │ ├── symbol_symbol.JPG │ ├── symbol_symbol.png │ ├── xor_forward.JPG │ ├── xor_forward.png │ ├── xor_linear.JPG │ ├── xor_linear.png │ ├── xor_net.JPG │ └── xor_net.png ├── 7 │ ├── L2.JPG │ ├── L2.png │ ├── dropout.JPG │ ├── dropout.png │ ├── early_stopping.JPG │ ├── early_stopping.png │ ├── mul_task.JPG │ ├── mul_task.png │ ├── train_validate.JPG │ └── train_validate.png ├── 8 │ ├── explode.JPG │ ├── explode.png │ ├── greedy.JPG │ ├── greedy.png │ ├── ill_condition.JPG │ ├── ill_condition.png │ ├── local_global.JPG │ ├── local_global.png │ ├── momentum.JPG │ └── momentum.png ├── 9 │ ├── 2d_con.PNG │ ├── down_sampling.PNG │ ├── img_output.PNG │ ├── layer.PNG │ ├── local_join.PNG │ ├── local_join2.PNG │ ├── no_padding.PNG │ ├── pooling.PNG │ ├── pooling_num.PNG │ ├── response_cos.PNG │ ├── response_gaussian.PNG │ ├── response_translate.PNG │ ├── rotate_pool.PNG │ ├── same_padding.PNG │ ├── share.PNG │ ├── sparse1.PNG │ ├── sparse2.PNG │ ├── sparse3.PNG │ ├── tiled_conv.PNG │ └── tiled_conv2.PNG ├── 10 │ ├── LSTM.PNG │ ├── bi_RNN.PNG │ ├── deep_rnn.PNG │ ├── deep_rnn2.PNG │ ├── encode_decode.PNG │ ├── memory_cell.PNG │ ├── more_hiden.PNG │ ├── rnn_dag.PNG │ ├── rnn_dag2.PNG │ ├── rnn_more.PNG │ ├── rnn_type1.PNG │ ├── rnn_type2.PNG │ ├── rnn_type3.PNG │ ├── rnn_x.PNG │ ├── teacher_forcing.PNG │ ├── tree_rnn.PNG │ ├── unfolding.PNG │ └── unfolding2.PNG ├── 11 │ └── man_search.PNG └── 12 │ ├── GCN.PNG │ ├── LCN.PNG │ ├── attention.PNG │ ├── nlp_tree.PNG │ └── translate.PNG └── readme.md /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | {one line to give the program's name and a brief idea of what it does.} 635 | Copyright (C) {year} {name of author} 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | {project} Copyright (C) {year} {fullname} 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /chapters/10_RNN.md: -------------------------------------------------------------------------------- 1 | # 十 序列建模:RNN 2 | 3 | 1. 循环神经网络`recurrent neural network:RNN` :一类用于处理序列数据 $\mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)},\cdots,\mathbf{\vec x}^{(\tau)}$ 的神经网络 4 | 5 | - 循环神经网络可以扩展到很长的序列,也可以处理可变长度的序列 6 | 7 | > 卷积神经网络专门处理网格化数据 $\mathbf X$ (如一个图形),它可以扩展到具有很大宽度和高度的图像。 8 | 9 | 2. 循环神经网络是一种共享参数的网络:参数在每个时间点上共享 10 | 11 | - 传统的前馈神经网络在每个时间点上分配一个独立的参数,因此网络需要学习每个时间点上的规则(即参数) 12 | - 循环神经网络在每个时间点上共享相同的权重 13 | 14 | ## 1. 展开计算图 15 | 16 | 1. 考虑动态系统的经典形式 17 | $$ 18 | \mathbf{\vec s}^{(t)}=f(\mathbf{\vec s}^{(t-1)};\mathbf{\vec \theta}) 19 | $$ 20 | 其中 $\mathbf{\vec s}^{(t)}$ 称作系统的状态。对于有限的时间步 $\tau$ ,应用 $\tau-1$ 次定义可以展开这个图: 21 | $$ 22 | \mathbf{\vec s}^{(\tau)}=f(\mathbf{\vec s}^{(\tau-1)};\mathbf{\vec \theta})=\cdots=f(\cdots f(\mathbf{\vec s}^{(1)};\mathbf{\vec \theta})\cdots ;\mathbf{\vec \theta}) 23 | $$ 24 | 以这种方式重复应用定义、展开等式,就得到不涉及循环的表达式。现在可以用传统的有向无环图来表示它: 25 | 26 | ![unfolding](../imgs/10/unfolding.png) 27 | 28 | 2. 如果动态系统有了外部信号驱动: 29 | $$ 30 | \mathbf{\vec s}^{(t)}=f(\mathbf{\vec s}^{(t-1)},\mathbf{\vec x}^{(t)};\mathbf{\vec \theta}) 31 | $$ 32 | 则其展开图如下(左侧为循环图,右侧为展开图。黑色方块,表示单位延时)。为了表明状态 $\mathbf{\vec s}$ 就是网络的隐单元,这里我们用变量 $\mathbf{\vec h}$ 代表状态,重写为: 33 | $$ 34 | \mathbf{\vec h}^{(t)}=f(\mathbf{\vec h}^{(t-1)},\mathbf{\vec x}^{(t)};\mathbf{\vec \theta}) 35 | $$ 36 | ​ 37 | 38 | ![unfolding2](../imgs/10/unfolding2.png) 39 | 40 | 3. 就像几乎所有函数都可以被认为是前馈网络,基本上任何涉及循环的函数都可以被认为是一个循环神经网络 41 | 42 | 4. 当训练循环神经网络根据过去预测未来时,网络通常要将 $\mathbf{\vec h}^{(t)}$ 作为过去序列的一个有损的摘要 43 | 44 | - 这个摘要一般是有损的。因为它使用一个固定长度的向量 $\mathbf{\vec h}^{(t)}$ 来映射任意长度的序列 $(\mathbf{\vec x}^{(t)},\mathbf{\vec x}^{(t-1)},\cdots,\mathbf{\vec x}^{(1)})$ 45 | - 根据不同的训练准则,摘要可能会有选择地保留过去序列的某些部分 46 | 47 | 5. 展开图的两个主要优点: 48 | 49 | - 无论输入序列的长度,学得的模型始终具有相同的输入大小(因为在每个时间步上,它从一种状态迁移到另一个状态,其输入都是相同大小的) 50 | - 可以在每个时间步上相同的转移函数 $f$ ,因此我们需要学的的参数 $\mathbf{\vec \theta}$ 也就在每个时间步上共享 51 | 52 | 这就使得学习在所有时间步和所有序列长度上操作的单一模型 $f$ 成为可能;它允许单一模型 $f$ 泛化到没有见过的序列长度;并且学习模型所需的训练样本远少于非参数共享的模型 53 | 54 | ## 2. 循环神经网络 55 | 56 | 1. 基于图展开核参数共享的思想,我们可以设计各种循环神经网络。一些重要的设计模式有: 57 | 58 | - 第一类:每个时间步都有输出,并且隐单元之间有循环连接的循环网络: 59 | 60 | > 左图为循环图,右图为计算图。$L$ 为损失函数(衡量每个输出 $\mathbf{\vec o}$ 与标记 $\mathbf{\vec y}$ 的距离 ) 61 | 62 | ![rnn_type1](../imgs/10/rnn_type1.png) 63 | 64 | - 第二类:每个时间步都有输出,只有当前时刻的输出和下个时刻的隐单元之间有循环连接的循环网络。 65 | 66 | - 这种 `RNN`只能表示更小的函数集合。第一类 `RNN`可以选择将其想要的关于过去的任何信息放入隐藏状态表达 $\mathbf{\vec h}$ 中,并且通过 $\mathbf{\vec h}$ 传播到未来。而这里的 `RNN` 只有输出 $\mathbf{\vec o}$ 来传播信息到未来。通常 $\mathbf{\vec o}$ 的维度远小于 $\mathbf{\vec h}$ ,并且缺乏过去的重要信息。这使得这种 `RNN` 不那么强大,但是它更容易训练:因为每个时间步可以与其他时间步分离训练,允许训练期间更多的并行化 67 | 68 | ![rnn_type2](../imgs/10/rnn_type2.png) 69 | 70 | - 第三类:隐单元之间存在循环连接,但是读取整个序列之后产生单个输出的循环网络。 71 | 72 | ![rnn_type3](../imgs/10/rnn_type3.png) 73 | 74 | 2. 任何图灵可计算的函数都可以通过这样一个有限维的循环网络计算。在这个意义上,第一类`RNN`的循环神经网络时万能的 75 | 76 | 3. 假设第一类`RNN`使用双曲正切激活函数,输出是离散的(我们将输出 $\mathbf{\vec o}$ 作为每个离散变量可能取值的非标准化对数概率,然后应用 `softmax` 函数处理后,获得标准化概率的输出向量 $\hat{\mathbf {\vec y}}$) 77 | 78 | `RNN` 从特定的初始状态 $\mathbf{\vec h}^{(0)}$ 开始前向传播。从 $t=1$ 到 $t=\tau$ 的每个时间步,我们更新方程: 79 | $$ 80 | \mathbf{\vec a}^{(t)}=\mathbf{\vec b}+\mathbf W\mathbf{\vec h}^{(t-1)}+\mathbf U\mathbf{\vec x}^{(t)}\\ 81 | \mathbf{\vec h}^{(t)}=\tanh(\mathbf{\vec a}^{(t)})\\ 82 | \mathbf{\vec o}^{(t)}=\mathbf{\vec c}+\mathbf V\mathbf{\vec h}^{(t)}\\ 83 | \hat{\mathbf{\vec y}}^{(t)}=softmax(\mathbf{\vec o}^{(t)}) 84 | $$ 85 | 其中:输入到隐藏状态的权重为 $\mathbf U$, 隐藏状态到输出的权重为 $\mathbf V$ ,隐藏状态到隐藏状态的权重为 $\mathbf W$ ;$\mathbf{\vec b},\mathbf{\vec c}$ 为偏置向量 86 | 87 | - 这个循环网络将一个输入序列映射到相同长度的输出序列 88 | 89 | - 给定的 $ \mathbf{\vec x} ,\mathbf{\vec y} $ 的序列对,则总损失为:所有时间步的损失之和。假设 $L^{(t)}$ 为给定 $\mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)},\cdots,\mathbf{\vec x}^{(t)}$ 的条件下,$\mathbf{\vec y}^{(t)}$ 的负对数似然,则: 90 | $$ 91 | L\left(\{\mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)},\cdots,\mathbf{\vec x}^{(\tau)}\},\{\mathbf{\vec y}^{(1)},\mathbf{\vec y}^{(2)},\cdots,\mathbf{\vec y}^{(\tau)}\}\right)\\ 92 | =\sum_{t=1}^{t=\tau}L^{(t)}\\ 93 | =-\sum_{t=1}^{t=\tau}\log p_{model}\left(\mathbf{\vec y}^{(t)}\mid \{\mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)},\cdots,\mathbf{\vec x}^{(t)}\} \right) 94 | $$ 95 | 其中 $p_{model}\left(\mathbf{\vec y}^{(t)}\mid \{\mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)},\cdots,\mathbf{\vec x}^{(t)}\} \right) $ 需要读取模型输出向量 $\hat{\mathbf{\vec y}}^{(t)}$ 中对应于 $\mathbf{\vec y^{(t)}}$ 的项。 96 | 97 | > 因为模型输出向量 $\hat{\mathbf{\vec y}}^{(t)}$ 给出了每个分类的概率,是一个向量。真实的分类 $y^{(t)}$ 属于哪个分类,就提取对应的概率。 98 | 99 | - 这个损失函数的梯度计算是昂贵的。梯度计算涉及执行一次前向传播,一次反向传播。 100 | 101 | - 因为每个时间步只能一前一后的计算,无法并行化,运行时间为 $O(\tau)$ 102 | - 前向传播中各个状态必须保存,直到它们反向传播中被再次使用,因此内存代价也是 $O(\tau)$ 103 | 104 | 4. 在展开图中代价为 $O(\tau) $ 的反向传播算法称作通过时间反向传播 `back-propagation through time:BPTT` 105 | 106 | ### 2.1 Teacher forcing 107 | 108 | 1. 对于第二类循环神经网络,由于它缺乏隐藏状态到隐藏状态的循环连接,因此它无法模拟通用图灵机 109 | 110 | - 优点在于:训练可以解耦:各时刻 $t$ 分别计算梯度 111 | 112 | 2. 第二类循环神经网络模型可以使用 `teacher forcing` 进行训练。该方法在时刻 $t+1$ 接受真实值 $\mathbf{\vec y}^{(t)}$ 作为输入。 113 | 114 | 考察只有两个时间步的序列。对数似然函数为 115 | $$ 116 | \log p(\mathbf{\vec y}^{(1)},\mathbf{\vec y}^{(2)}\mid \mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)})\\ 117 | =\log p(\mathbf{\vec y}^{(2)}\mid \mathbf{\vec y}^{(1)},\mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)})+\log p(\mathbf{\vec y}^{(1)}\mid \mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)}) 118 | $$ 119 | 对右侧两部分分别取最大化。则可以看到:在时刻 $t=2$ 时,模型被训练为最大化 $\mathbf{\vec y}^{(2)}$ 的条件概率。 120 | 121 | 如下图所示为`teacher forcing`过程。左图中,我们将正确的输出 $\mathbf{\vec y}^{(t)}$ 反馈到 $\mathbf{\vec h}^{(t+1)}$ 。一旦模型进行预测时,真实的输出通常是未知的,此时我们用模型的输出 $\mathbf{\vec o}^{(t)}$ 来近似正确的输出 $\mathbf{\vec y}^{(t)}$ 122 | 123 | ![teacher_forcing](../imgs/10/teacher_forcing.png) 124 | 125 | 3. 采用`teacher forcing`的本质上是:当前隐藏状态与早期的隐藏状态没有连接(虽然有间接连接,但是由于 $\mathbf{\vec y}^{(t)}$ 已知,因此这种连接被打断) 126 | 127 | - 只要模型的当前时间步的输出与下一个时间步的某个变量存在连接,就可以使用`teacher forcing`来训练 128 | - 如果模型的隐藏状态依赖于早期时间步的隐藏状态,则需要采用 `BPTT`算法 129 | - 某些模型训练时,需要同时使用`teacher forcing`和`BPTT`算法 130 | 131 | 4. `teacher forcing`的缺点是:如果将网络的输出反馈作为输入(这里的输入指的是网络的输入,而不是隐藏状态的输入),此时,训练期间网络看到的输入与测试时看到的输入会有很大的不同 132 | 133 | ### 2.2 循环神经网络梯度 134 | 135 | 1. 由反向传播计算得到的梯度,结合任何通用的、基于梯度的技术就可以训练 `RNN` 136 | 137 | 2. 第一类循环神经网络中,计算图的节点包括参数 $\mathbf U,\mathbf V,\mathbf W,\mathbf{\vec b},\mathbf{\vec c}$,以及以 $t$ 为索引的节点序列 $\mathbf{\vec x}^{(t)},\mathbf{\vec h}^{(t)},\mathbf{\vec o}^{(t)}$ 以及 $L^{(t)}$ 138 | 139 | > 更新方程为: 140 | > $$ 141 | > \mathbf{\vec a}^{(t)}=\mathbf{\vec b}+\mathbf W\mathbf{\vec h}^{(t-1)}+\mathbf U\mathbf{\vec x}^{(t)}\\ 142 | > \mathbf{\vec h}^{(t)}=\tanh(\mathbf{\vec a}^{(t)})\\ 143 | > \mathbf{\vec o}^{(t)}=\mathbf{\vec c}+\mathbf V\mathbf{\vec h}^{(t)}\\ 144 | > \hat{\mathbf{\vec y}}^{(t)}=softmax(\mathbf{\vec o}^{(t)}) 145 | > $$ 146 | > 147 | 148 | - 根据 149 | $$ 150 | L\left({\mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)},\cdots,\mathbf{\vec x}^{(\tau)}},{\mathbf{\vec y}^{(1)},\mathbf{\vec y}^{(2)},\cdots,\mathbf{\vec y}^{(\tau)}}\right)\\ 151 | =\sum_{t=1}^{t=\tau}L^{(t)} 152 | $$ 153 | 我们有 $\frac{\partial L}{\partial L^{(t)}}=1$ 154 | 155 | - 我们假设 $\mathbf{\vec o}^{(t)}$ 作为 `softmax` 函数的参数。可以从 `softmax`获取输出概率的向量 $\hat{\mathbf{\vec y}}^{(t)}$ 156 | $$ 157 | \hat{\mathbf{\vec y}}^{(t)}=\text{softmax}(\mathbf{\vec o}^{(t)})=\left(\frac{\exp(o^{(t)}_1)}{\sum_{j=1}^{n}\exp(o^{(t)}_j)},\frac{\exp(o^{(t)}_2)}{\sum_{j=1}^{n}\exp(o^{(t)}_j)},\cdots,\frac{\exp(o^{(t)}_n)}{\sum_{j=1}^{n}\exp(o^{(t)}_j)}\right)^{T} 158 | $$ 159 | 160 | > 输出曾其实有多个单元。这里将其展平为一维向量 161 | 162 | - 我们假设损失为:给定了迄今为止的输入后,真实目标 $\mathbf{\vec y}^{(t)}$ 的负对数似然 163 | $$ 164 | L^{(t)}=-\log \hat{\mathbf{\vec y}}^{(t)}_l=-\log \frac{\exp(o^{(t)}_l)}{\sum_{j=1}^{n}\exp(o^{(t)}_j)}\\ 165 | =- o^{(t)}_l+\log\sum_{j=1}^{n}\exp(o^{(t)}_j) 166 | $$ 167 | $l$ 表示 $ \mathbf{\vec y}^{(t)}$ 所属的类别。则: 168 | $$ 169 | (\nabla_{\mathbf{\vec o}^{(t)}}L)_i=\frac{\partial L}{\partial \mathbf{\vec o}_i^{(t)}}=\frac{\partial L}{\partial L^{(t)}}\frac{\partial L^{(t)}}{\partial \mathbf{\vec o}_i^{(t)}}=\frac{\partial L^{(t)}}{\partial\mathbf{\vec o}_i^{(t)}}\\ 170 | =-\mathbf{\vec 1}_{i,l}+\frac{\exp(\mathbf{\vec o}^{(t)}_i)}{\sum_{j=1}^{n}\exp(o^{(t)}_j)}\\ 171 | =\hat{\mathbf{\vec y}}^{(t)}_i-\mathbf{\vec 1}_{i,l} 172 | $$ 173 | 这里的下标 $i$ 表示输出层的第 $i$ 个单元(它其实就是将所有的输出层展平为一维向量,然后再将结果拆分成一个个单元)。最后一个向量是:第 $i$ 个输出单元的真实类别为 $l$ 处对应为 1;其他地方为0。 $\hat{\mathbf{\vec y}}^{(t)}_i$ 表示输出概率向量对应于输出层第 $i$ 个单元 174 | 175 | > 最后一步是因为 $(\log f(x))^{\prime}=\frac {1}{f(x)}f^{\prime}(x) $,另外 $\frac{\exp(\mathbf{\vec o}^{(t)}_i)}{\sum_{j=1}^{n}\exp(o^{(t)}_j)}=\hat{\mathbf{\vec y}}^{(t)}_i$ 176 | 177 | - 从后向前计算隐单元: 178 | $$ 179 | \nabla_{\mathbf{\vec h}^{(t)}}L=\left(\frac{\partial\mathbf{\vec h}^{(t+1)}}{\partial\mathbf{\vec h}^{(t)} }\right)^{T}(\nabla_{\mathbf{\vec h}^{(t+1)}}L)+\left(\frac{\mathbf{\vec o}^{(t)}}{\partial\mathbf{\vec h}^{(t)} }\right)^{T}(\nabla_{\mathbf{\vec o}^{(t)}}L)\\ 180 | =\mathbf W^{T}(\nabla_{\mathbf{\vec h}^{(t+1)}}L)\text{diag}\left(1-(\mathbf{\vec h}^{(t+1)})^{2}\right)+\mathbf V^{T}(\nabla_{\mathbf{\vec o}^{(t)}}L) 181 | $$ 182 | 183 | > 因为有 184 | > $$ 185 | > \mathbf{\vec h}^{(t+1)}=\tanh(\mathbf{\vec b}+\mathbf W\mathbf{\vec h}^{(t)}+\mathbf U\mathbf{\vec x}^{(t+1)}) 186 | > $$ 187 | > 因此 188 | > $$ 189 | > \left(\frac{\partial\mathbf{\vec h}^{(t+1)}}{\partial\mathbf{\vec h}^{(t)} }\right)^{T}=\mathbf W^{T}\text{diag}\left(1-(\mathbf{\vec h}^{(t+1)})^{2}\right) 190 | > $$ 191 | > ​ 192 | 193 | 其中 $\text{diag}\left(1-(\mathbf{\vec h}^{(t+1)})^{2}\right)$ 表示包含元素 $1-(h_i^{(t+1)})^{2}$ 的对角矩阵(它是时刻 $t+1$ 时,隐单元 $i$ 对应的 $\tanh$ 的导数) 194 | 195 | - 上式计算隐单元的梯度时,注意它计算的是 $t=\tau-1 ,\cdots,1$ 的情况。 当 $t=\tau$ 时,位于序列末尾。此时并没有 $\mathbf{\vec h}^{(\tau+1)}$,因此有: 196 | $$ 197 | \nabla_{\mathbf{\vec h}^{(t)}}L=\mathbf V^{T}(\nabla_{\mathbf{\vec o}^{(t)}}L) 198 | $$ 199 | 200 | 3. 一旦获得了隐单元及输出单元的梯度,则我们就可以获取参数节点的梯度。 201 | 202 | - 由于参数在多个时间步共享,因此在参数节点的微积分操作时必须谨慎对待 203 | - 微积分中的算子 $\nabla _{\mathbf W}f$ ,在计算 $\mathbf W$ 对于 $f$ 的贡献时,将计算图的所有边都考虑进去了。但是事实上,有一条边是 $t$ 时间步的 $\mathbf W$;还有一条边是 $t+1$ 时间步的 $\mathbf W$ 204 | - 为了消除歧义,我们使用虚拟变量 $\mathbf W^{(t)}$ 作为 $\mathbf W$ 的副本,用 $\nabla _{\mathbf W^{(t)}} f$ 表示权重 $\mathbf W$ 在时间步 $t$ 对于梯度的贡献 205 | 206 | 4. 剩下的参数梯度公式如下: 207 | $$ 208 | \nabla _{\mathbf{\vec c}}L=\sum_{t=1}^{t=\tau}\left(\frac{\partial \mathbf{\vec o}^{(t)}}{\partial \mathbf{\vec c}}\right)^{T}\nabla_{\mathbf{\vec o}^{(t)}}L=\sum_{t=1}^{t=\tau}\nabla_{\mathbf{\vec o}^{(t)}}L 209 | $$ 210 | 211 | > 这是因为 $\mathbf{\vec o}^{(t)}=\mathbf{\vec c}+\mathbf V\mathbf{\vec h}^{(t)}\rightarrow \frac{\partial \mathbf{\vec o}^{(t)}}{\partial \mathbf{\vec c}}=\mathbf I​$ 212 | 213 | $$ 214 | \nabla _{\mathbf{\vec b}}L=\sum_{t=1}^{t=\tau}\left(\frac{\partial \mathbf{\vec h}^{(t)}}{\partial \mathbf{\vec b}}\right)^{T}\nabla_{\mathbf{\vec h}^{(t)}}L=\sum_{t=1}^{t=\tau}\text{diag}\left(1-(\mathbf{\vec h}^{(t)})^{2}\right)\nabla_{\mathbf{\vec h}^{(t)}}L 215 | $$ 216 | 217 | > 这是因为 $\mathbf{\vec h}^{(t)}=\tanh(\mathbf{\vec b}+\mathbf W\mathbf{\vec h}^{(t-1)}+\mathbf U\mathbf{\vec x}^{(t)}) \rightarrow \frac{\partial \mathbf{\vec h}^{(t)}}{\partial \mathbf{\vec b}}=\text{diag}\left(1-(\mathbf{\vec h}^{(t)})^{2}\right)$ 218 | 219 | $$ 220 | \nabla_{\mathbf V}L=\sum_{t=1}^{t=\tau}\sum_{i}\left(\frac{\partial L}{\partial \mathbf{\vec o}_i^{(t)}}\right)^{T}\nabla_{\mathbf V}\mathbf{\vec o}_i^{(t)}=\sum_{t=1}^{t=\tau}(\nabla_{\mathbf{\vec o}^{(t)}}L)\mathbf{\vec h}^{(t)T} 221 | $$ 222 | 223 | > 这是因为 $\mathbf{\vec o}^{(t)}=\mathbf{\vec c}+\mathbf V\mathbf{\vec h}^{(t)} \rightarrow \nabla_{\mathbf V}\mathbf{\vec o}_i^{(t)}=\mathbf{\vec h}^{(t)T}_i$ 224 | 225 | $$ 226 | \nabla_{\mathbf W}L=\sum_{t=1}^{t=\tau}\sum_{i}\left(\frac{\partial L}{\partial \mathbf{\vec h}_i^{(t)}}\right)^{T}\nabla_{\mathbf W^{(t)}}\mathbf{\vec h}_i^{(t)}\\ 227 | =\sum_{t=1}^{t=\tau}\text{diag}\left(1-(\mathbf{\vec h}^{(t)})^{2}\right)(\nabla_{\mathbf{\vec h}^{(t)}}L)\mathbf{\vec h}^{(t-1)T} 228 | $$ 229 | 230 | > 这是因为 $\mathbf{\vec h}^{(t)}=\tanh(\mathbf{\vec b}+\mathbf W\mathbf{\vec h}^{(t-1)}+\mathbf U\mathbf{\vec x}^{(t)}) \rightarrow\nabla_{\mathbf W^{(t)}}\mathbf{\vec h}_i^{(t)}=\text{diag}\left(1-(\mathbf{\vec h}^{(t)}_i)^{2}\right)\mathbf{\vec h}^{(t-1)T}_i$ 231 | 232 | $$ 233 | \nabla_{\mathbf U}L=\sum_{t=1}^{t=\tau}\sum_{i}\left(\frac{\partial L}{\partial \mathbf{\vec h}_i^{(t)}}\right)^{T}\nabla_{\mathbf U^{(t)}}\mathbf{\vec h}_i^{(t)}\\ 234 | =\sum_{t=1}^{t=\tau}\text{diag}\left(1-(\mathbf{\vec h}^{(t)})^{2}\right)(\nabla_{\mathbf{\vec h}^{(t)}}L)\mathbf{\vec x}^{(t)T} 235 | $$ 236 | 237 | > 这是因为 $\mathbf{\vec h}^{(t)}=\tanh(\mathbf{\vec b}+\mathbf W\mathbf{\vec h}^{(t-1)}+\mathbf U\mathbf{\vec x}^{(t)}) \rightarrow\nabla_{\mathbf U^{(t)}}\mathbf{\vec h}_i^{(t)}=\text{diag}\left(1-(\mathbf{\vec h}^{(t)}_i)^{2}\right)\mathbf{\vec x}^{(t)T}_i$ 238 | 239 | 5. 因为任何参数都不是训练数据 $\mathbf{\vec x}^{(t)}$ 的父节点,因此我们不需要计算 $\nabla _{\mathbf{\vec x}^{(t)}} L$ 240 | 241 | ### 2.3 作为有向图模型的循环网络 242 | 243 | 1. 目前我们将循环神经网络的损失 $L^{(t)}$ 定义为训练目标 $\mathbf{\vec y}^{(t)}$ 和输出 $\mathbf{\vec o}^{(t)}$ 之间的交叉熵 244 | 245 | - 原则上,你可以使用任何损失函数。但是必须根据具体任务来选择一个合适的损失函数 246 | 247 | 2. 对于 `RNN`,我们有两个选择: 248 | 249 | - 根据之前的输入,估计下一个序列元素 $ \mathbf{\vec y}^{(t)}$ 的条件分布,即最大化对数似然函数: 250 | $$ 251 | \log p(\mathbf{\vec y}^{(t)}\mid \mathbf{\vec x}^{(1)},\cdots,\mathbf{\vec x}^{(t)}) 252 | $$ 253 | 254 | - 如果模型包含了来自于一个时间步到下一个时间步的连接(比如第二种类型的循环神经网络),则最大化对数似然函数: 255 | 256 | $$ 257 | \log p(\mathbf{\vec y}^{(t)}\mid \mathbf{\vec x}^{(1)},\cdots,\mathbf{\vec x}^{(t)},\mathbf{\vec y}^{(1)},\cdots,\mathbf{\vec y}^{(t-1)}) 258 | $$ 259 | 260 | > 当我们不把过去的 $\mathbf{\vec y}$ 反馈给下一步时,有向图模型就不包含任何从过去的 $\mathbf{\vec y}^{(i)}$ 到当前的 $\mathbf{\vec y}^{(t)}$ 的边 261 | 262 | 3. 循环神经网络的有向图模型:不包含任何输入。 263 | 264 | - 当模型包含了来自于一个时间步到下一个时间步的连接时,有向图非常复杂。根据有向图直接参数化的做法非常低效 265 | 266 | ![rnn_dag](../imgs/10/rnn_dag.png) 267 | 268 | - 相反:`RNN `引入了状态变量。它有助于我们获取非常高效的参数化:序列中的每个时间步使用相同的结构,并且共享相同的参数 269 | - 引入状态变量 $\mathbf{\vec h}^{(t)}$ 节点,可以用作过去和未来之间的变量,从而解耦它们。遥远的过去的变量 $\mathbf{\vec y}^{(i)}$ 通过影响 $\mathbf{\vec h}$ 来影响变量 $\mathbf{\vec y}^{(t)}$ 270 | 271 | ​ ![rnn_dag2](../imgs/10/rnn_dag2.png) 272 | 273 | 4. 当模型包含单个向量 $\mathbf{\vec x}$ 作为输入时,有三种方式: 274 | 275 | - 在每个时刻作为一个额外的输入。如图注任务:单个图像作为模型输入,生成描述图像的单词序列 276 | 277 | 此时引入了新的权重矩阵 $\mathbf R$ 。 乘积 $\mathbf{\vec x}^{T}\mathbf R$ 在每个时间步作为隐单元的一个额外输入 278 | 279 | > 输出序列的每个元素 $y^{(t)}$ 同时用作输入(对于当前时间步),和训练期间的目标(对于前一个时间步)。因为它需要根据当前的序列和图像,预测下一个时刻的单词 280 | 281 | ![rnn_x](../imgs/10/rnn_x.png) 282 | 283 | - 作为初始状态 $\mathbf{\vec h}^{(0)}$ 284 | 285 | - 结合上述两种方式 286 | 287 | 5. `RNN`也可以接收向量序列 $\mathbf{\vec x^{(t)}}$ 作为输入。此时`RNN`对应条件分布为 $P( \mathbf{\vec y}^{(1)},\cdots,\mathbf{\vec y}^{(\tau)}\mid \mathbf{\vec x}^{(1)},\cdots,\mathbf{\vec x}^{(\tau)})$ 288 | 289 | - 第一类循环神经网络假设条件独立,此时: 290 | $$ 291 | P( \mathbf{\vec y}^{(1)},\cdots,\mathbf{\vec y}^{(\tau)}\mid \mathbf{\vec x}^{(1)},\cdots,\mathbf{\vec x}^{(\tau)})=\prod_tP( \mathbf{\vec y}^{(t)}\mid \mathbf{\vec x}^{(1)},\cdots,\mathbf{\vec x}^{(t)}) 292 | $$ 293 | 294 | - 为了去掉条件独立的假设,我们可以在时刻 $t$ 的输出到时刻 $t+1$ 的隐单元添加连接。此时该模型代表了关于 $\mathbf{\vec y}$ 序列的任意概率分布 295 | 296 | - 但是这样的序列有个限制:要求输入序列和输出序列的长度必须相同 297 | 298 | ![rnn_more](../imgs/10/rnn_more.png) 299 | 300 | 6. 循环网络中使用参数共享的前提是:相同参数可以用于不同的时间步。 301 | 302 | - 给定时刻 $t$ 的变量,时刻 $t+1 $ 变量的条件概率分布是平稳的。这意味着:前一个时间步和后一个时间步之间的关系并不依赖于 $t$ 303 | 304 | 7. 对于不包含输入,或者只有单个输入向量的`RNN`模型,必须有某种办法来确定输出序列的长度(不能无限长) 305 | 306 | > 如果不包含输入,则训练集中的样本只有输出数据。这种 `RNN` 可以用于自动生成文章、句子等 307 | 308 | - 方法一:当输出时单词时,我们可以添加一个特殊的停止符。当输出该停止符时,序列终止。 309 | - 在训练集中,需要对每个输出序列末尾添加这个停止符 310 | - 方法二:在模型中引入一个额外的伯努利输出单元,用于表示:每个时间步是继续生成输出序列,还是停止生成。 311 | - 这种办法更普遍,适用于任何`RNN` 312 | - 该伯努利输出单元通常使用`sigmoid`单元,被训练为最大化正确预测到序列结束的对数似然 313 | - 方法三:添加一个额外的输出单元,它预测输出序列的长度 $\tau$ 本身 314 | - 这种方法需要在每个时间步的循环更新中增加一个额外输入,通知循环:是否已经到达输出序列的末尾 315 | - 如果没有这个额外的输入,则`RNN`很可能在生成完整的句子之前突然结束序列 316 | - 其原理是基于 $P(\mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)},\cdots,\mathbf{\vec x}^{(\tau)})=P(\tau)P(\mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)},\cdots,\mathbf{\vec x}^{(\tau)}\mid\tau)$ 317 | 318 | ## 3. 双向 RNN 319 | 320 | 1. 目前介绍的循环神经网络有一个因果结构:时刻 $t$ 的状态只能从过去的序列 $\mathbf{\vec x}^{(t1)},\mathbf{\vec x}^{(t2)},\cdots,\mathbf{\vec x}^{(t-1)} $ ,以及当前的输入 $\mathbf{\vec x}^{(t)}$ 来获取 321 | 322 | - 实际应用中,输出 $\mathbf{\vec y}^{(t)}$ 可能依赖于整个输入序列。如:语音识别中,当前语音对应的单词不仅取决于前面的单词,也可能取决于后面的几个单词。因为词与词之间存在语义依赖 323 | 324 | 2. 双向`RNN`就是应对这种双向依赖问题而发明的。 325 | 326 | - 它在需要双向信息的应用中非常成功,如手写识别、语音识别等。 327 | 328 | - 下图是一个典型的双向 `RNN` 329 | 330 | - $\mathbf{\vec h}^{(t)}$ 代表通过时间向前移动的子 `RNN`的状态,向右传播信息 331 | 332 | - $\mathbf{\vec g}^{(t)}$ 代表通过时间向后移动的子 `RNN` 的状态,向左传播信息 333 | 334 | - 输出单元 $\mathbf{\vec o}^{(t)}$ 能够表示同时依赖于过去和未来、以及时刻 $t$ 的输入 $\mathbf{\vec x}^{(t)}$ 的概要 335 | 336 | > 如果使用前馈网络、卷积网络,则我们需要指定 $t$ 周围固定大小的窗口 337 | 338 | ![bi_RNN](../imgs/10/bi_RNN.png) 339 | 340 | 3. 如果输入是 2 维的,比如图像,则双向 `RNN` 可以扩展到4个方向:上、下、左、右 341 | 342 | - 每个子 `RNN` 负责一个时间移动方向 343 | - 输出单元 $\mathbf{\vec o}^{(t)}$ 能够表示同时依赖于四个方向、以及时刻 $t$ 的输入 $\mathbf{\vec x}^{(t)}$ 的概要 344 | - 此时`RNN` 可以捕捉到大多数局部信息,但是还可以捕捉到依赖于远处的信息 345 | - 相比较卷积网络,应用于图像的`RNN`计算成本通常更高 346 | 347 | ## 4. 基于编码-解码的序列到序列架构 348 | 349 | 1. 如前所述: 350 | 351 | - 我们可以通过`RNN`将输入序列映射成固定大小的向量 352 | 353 | ![rnn_type3](../imgs/10/RNN_type3.png) 354 | 355 | - 我们也可以通过`RNN`将固定大小的向量映射成一个序列 356 | 357 | ![rnn_x](../imgs/10/rnn_x.png) 358 | 359 | - 我们也可以通过`RNN`将一个输入序列映射到一个等长的输出序列 360 | 361 | ![rnn_type3](../imgs/10/RNN_type1.png) 362 | 363 | ![rnn_type3](../imgs/10/rnn_more.png) 364 | 365 | ​ 366 | 367 | 2. 在实际应用中,我们需要将输入序列映射到不一定等长的输出序列。如语音识别、机器翻译、问答等任务 368 | 369 | 3. 我们将`RNN`的输入称作上下文。令 $C$ 为该上下文的一个表达`representation` 370 | 371 | - $C$ 需要概括输入序列 $\mathbf X=(\mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)},\cdots,\mathbf{\vec x}^{(nx)})$ 372 | - $C$ 可能是一个向量,或者一个向量序列 373 | 374 | 4. 编码-解码架构: 375 | 376 | - 编码器(也叫作读取器,或者输入`RNN`)处理输入序列。编码器的最后一个状态 $\mathbf{\vec h}_{nx}$ 通常最为输入的表达 $C$,并且作为解码器的输入 377 | - 解码器(也叫作写入器,或者输出`RNN`)以固定长度的向量(就是 $C$ )为条件产生输出序列 $\mathbf Y=(\mathbf{\vec y}^{(1)},\mathbf{\vec y}^{(2)},\cdots,\mathbf{\vec y}^{(ny)})$ 。 378 | 379 | 5. 这种架构创新之处在于:输入序列长度 $nx$ 和输出序列长度 $ny$ 可以不同。而前面的架构要求 $nx=ny=\tau$ 。 380 | 381 | 6. 这两个`RNN`并不是单独训练,而是共同训练以最大化 $\log P(\mathbf{\vec y}^{(1)},\mathbf{\vec y}^{(2)},\cdots,\mathbf{\vec y}^{(ny)}\mid \mathbf{\vec x}^{(1)},\mathbf{\vec x}^{(2)},\cdots,\mathbf{\vec x}^{(nx)})$ 382 | 383 | 7. 如果上下文 $C$ 是一个向量,则解码器就是向量到序列`RNN`。向量到序列`RNN` 至少有两种接收输入的方法: 384 | 385 | - 输入作为`RNN`的初始状态 386 | - 输入连接到每个时间步的隐单元 387 | 388 | 这两种方式也可以结合 389 | 390 | 8. 这里对于编码器与解码器隐藏状态是否具有相同大小并没有限制。它们是相互独立设置的 391 | 392 | 9. 该架构的一个明显缺点:编码器`RNN`输出的上下文 $C$ 的维度太小,难以适当的概括一个长序列 393 | 394 | - 可以让 $C$ 也成为一个可变长度的序列 395 | - 引入将序列 $C$ 的元素和输出序列元素相关联的`attention`机制 396 | 397 | ## 5. 深度循环网络 398 | 399 | 1. 大多数`RNN`中的计算都可以分解为三块参数以及相关的变换 400 | 401 | - 从输入到隐藏状态的变换 402 | - 从前一个隐藏状态到下一个隐藏状态的变换 403 | - 从隐藏状态到输出的变换 404 | 405 | 这三块都对应一个浅层变换。所谓浅层变换:多层感知机内单个层来表示的变换称作浅层变换。通常浅层变换是由一个仿射变换加一个固定的非线性函数(激活函数)组成的变换。 406 | 407 | 2. 我们可以将`RNN`的状态分为多层。层次结构中较低层的作用是:将输入转化为对高层隐藏状态更合适的表达。下图中,将隐藏状态拆分成两层 408 | 409 | ![more_hiden](../imgs/10/more_hiden.png) 410 | 411 | 3. 也可以在这三块中各自使用一个独立的`MLP`(可能是深度的) 412 | 413 | ![deep_RNN](../imgs/10/deep_rnn.png) 414 | 415 | - 增加深度可能会因为优化困难而损坏学习效果 416 | 417 | - 额外深度将导致从时间步 $t$ 到时间步 $t+1$ 的最短路径变得更长。这时可以通过在隐藏状态到隐藏状态的路径中引入跳跃连接即可缓解该问题 418 | 419 | ![deep_RNN2](../imgs/10/deep_rnn2.png) 420 | 421 | ## 6. 递归神经网络 422 | 423 | 1. 递归神经网络时循环网络的另一个扩展:它被构造为深的树状而不是链状 424 | 425 | - 它是一种不同类型的计算图 426 | - 这类网络的潜在用途:学习推论 427 | - 递归神经网络目前成功用于输入是数据结构的神经网络,如:自然语言处理,计算机视觉 428 | 429 | ![tree_rnn](../imgs/10/tree_rnn.png) 430 | 431 | 2. 递归神经网络的显著优势:对于长度为 $\tau$ 的序列,深度可以急剧的从 $\tau$ 降低到 $O(\log\tau)$。 这有助于解决长期依赖 432 | 433 | 3. 一个悬而未决的难题是:如何以最佳的方式构造树 434 | 435 | - 一种选择是:不依赖于数据的树。如:平衡二叉树 436 | - 另一种选择是:可以借鉴某些外部方法。如处理自然语言时,用于递归网络的树可以固定为句子语法分析树的结构 437 | 438 | ## 7. 长期依赖 439 | 440 | 1. 长期依赖产生的根本问题是:经过许多阶段传播之后,梯度趋向于消失(大部分情况)或者爆炸(少数情况,但是一旦发生就对优化过程影响巨大) 441 | 442 | 2. 循环神经网络设计许多相同函数的多次组合,每个时间步一次。这些组合可以导致极端的非线性行为。 443 | 444 | 3. 给定一个非常简单的循环联系(没有非线性,没有偏置) 445 | $$ 446 | \mathbf{\vec h}^{(t)}=\mathbf W^{T}\mathbf{\vec h}^{(t-1)} 447 | $$ 448 | 则有: $\mathbf{\vec h}^{(t)}=(\mathbf W^{t})^{T}\mathbf{\vec h}^{(0)}$ 449 | 450 | 当 $\mathbf W$ 可以正交分解时: $\mathbf W=\mathbf Q\mathbf \Lambda \mathbf Q^{T}$ 。其中 $\mathbf Q$ 为正交矩阵,$\mathbf \Lambda$ 为特征值组成的三角阵。则: 451 | $$ 452 | \mathbf{\vec h}^{(t)}=\mathbf Q^{T}\mathbf\Lambda^{t}\mathbf Q\mathbf{\vec h}^{(0)} 453 | $$ 454 | 455 | - 对于特征值的幅度不到 1 的特征值对应的 $\mathbf{\vec h}^{(0)}$ 的部分将衰减到 0 456 | - 对于特征值的幅度大于 1 的特征值对应的 $\mathbf{\vec h}^{(1)}$ 的部分将衰减到 0 457 | 458 | 4. 对于非循环神经网络,情况稍微好一些。 459 | 460 | - 对于标量权重 $w$,假设每个时刻使用不同的权重 $w^{(t)}$ (初值为 1),而且 $w^{(t)}$ 是随机生成、各自独立、均值为 0、方差为 $v$ 。则 $\prod_t w^{(t)}$ 的方差为 $O(v^{n})$ 461 | - 非常深的前馈网络通过精心设计的比例可以避免梯度消失核爆炸问题 462 | 463 | 5. 学习长期依赖的问题是深度学习中的一个主要挑战 464 | 465 | ## 8. 回声状态网络 466 | 467 | 1. 从 $\mathbf{\vec h}^{(t-1)}$ 到 $\mathbf{\vec h}^{(t)}$ 的循环映射权重,以及从 $\mathbf{\vec x}^{(t)}$ 到 $\mathbf{\vec h}^{(t)}$ 的输入映射权重是循环网络中最难学习的参数 468 | 469 | 一种解决方案是:设定循环隐藏单元,它能够很好地捕捉过去输入历史,并且只学习输出权重。这就是回声状态网络 `echo state netword:ESN` 470 | 471 | > 流体状态机`liquid state machine`也分别独立地提出了这种想法 472 | 473 | 2. 回声状态网络和流体状态机都被称作储层计算`reservoir computing`。因为隐藏单元形成了可能捕获输入历史不同方面的临时特征池 474 | 475 | 3. 储层计算循环网络类似于支持向量机的核技巧: 476 | 477 | - 先将任意长度的序列(到时刻 $t$ 的输入历史) 映射为一个长度固定的向量 (循环状态 $\mathbf {\vec h}^{(t)}$) 478 | - 然后对 $\mathbf{\vec h}^{(t)}$ 施加一个线性预测算子(通常是一个线性回归) 以解决感兴趣的问题 479 | 480 | 4. 储层计算循环网络的目标函数很容易设计为输出权重的凸函数。因此很容易用简单的学习算法解决。 481 | 482 | - 如果隐单元到输出单元是线性回归,则损失函数就是均方误差 483 | 484 | 5. 储层计算循环网络的核心问题:如何将任意长度的序列(到时刻 $t$ 的输入历史) 映射为一个长度固定的向量 (循环状态 $\mathbf {\vec h}^{(t)}$) ? 485 | 486 | 答案是:将网络视作动态系统,并且让动态系统接近稳定边缘。 487 | 488 | 6. 考虑反向传播中,雅克比矩阵 $\mathbf J^{(t)}=\frac{\partial\mathbf{\vec s}^{(t)}}{\partial \mathbf{\vec s}^{(t-1)}}$。 定义其谱半径为特征值的最大绝对值。 489 | 490 | 7. 考虑反向传播中,雅克比矩阵 $\mathbf J^{(t)}=\frac{\partial\mathbf{\vec s}^{(t)}}{\partial \mathbf{\vec s}^{(t-1)}}$。 定义其谱半径为特征值的最大绝对值。 491 | 492 | - 假设网络是纯线性的,此时 $\mathbf J^{(t)}=\mathbf J$ 。假设 $\mathbf J$ 特征值 $\lambda $ 对应的单位特征向量为 $\mathbf{\vec v}$ 493 | - 设刚开始的梯度为 $\mathbf{\vec g}$,经过 $n$ 步反向传播之后,梯度为 $\mathbf J^{n}\mathbf{\vec g}$ 494 | - 假设开始的梯度有一个扰动,为 $\mathbf{\vec g}+\delta \mathbf{\vec v}$,经过 $n$ 步反向传播之后,梯度为 $\mathbf J^{n}\mathbf{\vec g}+\delta J^{n}\mathbf{\vec v}$ 。则这个扰动在 $n$ 步之后放大了 $\delta |\lambda|^{n}$ 倍。 495 | - 当 |$\lambda|>1$ 时,偏差 $\delta|\lambda|^{n}$ 就会指数增长 496 | - 当 |$\lambda|<1$ 时,偏差 $\delta|\lambda|^{n}$ 就会指数衰减 497 | 498 | 这个例子对应于没有非线性的循环网络。当非线性存在时:非线性的导数将在许多个时间步之后接近 0,这有助于防止因过大的谱半径而导致的偏差爆炸 499 | 500 | 8. 在正向传播的情况下, $\mathbf W$ 告诉我们信息如何前向传播;在反向传播的情况下, $\mathbf J$ 告诉我们梯度如何后向传播 501 | 502 | - 当循环神经网络时线性的情况时,二者相等 503 | - 当引入压缩非线性时(如 `sigmoid/tanh`),此时可以使得 $\mathbf h^{(t)}$ 有界(即前向传播有界),但是梯度仍然可能无界(即反向传播无界) 504 | - 在神经网络中,反向传播更重要。因为我们需要使用梯度下降法求解参数! 505 | 506 | 9. 回声状态网络的策略是:简单地固定权重,使得它具有一定的谱半径(比如 3) 507 | 508 | - 在信息前向传播过程中,由于饱和非线性单元的稳定作用, $\mathbf h^{(t)}$ 不会爆炸 509 | - 在信息反向传播过程中,非线性的导数将在许多个时间步之后接近 0,梯度也不会发生爆炸 510 | 511 | 512 | ## 9. 渗漏单元和其他多时间尺度的策略 513 | 514 | 1. 处理长期依赖的一个策略是: 515 | - 设计工作在多个时间尺度的模型 516 | - 在细粒度的时间尺度上处理近期信息;在粗粒度时间尺度上处理遥远过去的信息 517 | 518 | ### 9.1 跳跃连接 519 | 520 | 1. 增加从遥远过去的变量到当前变量的直接连接是得到粗时间尺度的一种方法 521 | - 普通的循环网络中,循环从时刻 $t$ 单元连接到了时刻 $t+1$ 单元 522 | - 跳跃连接会增加一条从时刻 $t$ 到时刻 $t+d$ 单元的连接 523 | 2. 引入了 $d$ 延时的循环连接可以减轻梯度消失的问题 524 | - 现在梯度指数降低的速度与 $\frac{\tau}{d}$ 相关,而不是与 $\tau$ 相关。这允许算法捕捉到更长的依赖性 525 | - 这种做法无法缓解梯度的指数爆炸的问题 526 | 527 | ### 9.3 渗漏单元 528 | 529 | 1. 缓解梯度爆炸和梯度消失的一个方案是:尽可能的使得梯度接近1.这是通过线性自连接单元来实现 530 | 531 | 2. 一个线性自连接的例子: 532 | $$ 533 | \mu^{(t)}=\alpha \mu^{(t-1)}+(1-\alpha)v^{(t)} 534 | $$ 535 | 当 $\alpha$ 接近1 时, $\mu^{(t)}$ 能记住过去很长一段时间的信息;当 $\alpha$ 接近 0 时,关于过去的信息被迅速丢弃 536 | 537 | 3. 线性自连接的隐单元可以模拟 $\mu^{(t)}$ 的行为。这种隐单元称作渗漏单元 538 | 539 | 4. 渗漏单元与跳跃连接的区别: 540 | 541 | - $d$ 时间步的跳跃连接可以确保单元总能够被先前的 $d$ 个时间步的值所影响 542 | - 渗漏单元可以通过调整 $\alpha$ 值更灵活的确保单元可以访问到过去的值 543 | 544 | 5. 渗漏单元和跳跃连接的 $\alpha,d$ 参数有两种设置方式: 545 | 546 | - 一种方式是手动设置为常数。如初始化时从某些分布采样它们的值 547 | - 另一种方式是让他们成为自由变量,从训练中学习出来 548 | 549 | ### 9.3 删除连接 550 | 551 | 1. 删除连接与跳跃连接不同:删除连接是主动删除长度为 1 的连接,并且用更长的连接替换它们 552 | - 删除连接会减少计算图中的连接,而不是增加连接 553 | - 删除连接强迫单元在长时间尺度上运作。而跳跃连接可以选择在长时间尺度上运作,也可以在短时间尺度上运作。 554 | 2. 强制一组循环单元在不同时间尺度上运作有不同的方式: 555 | - 一种选择是:让循环单元变成渗漏单元,但是不同的单元组有不同的、固定的 $\alpha$ 值 556 | - 另一种选择是:使得显式、离散的更新发生在不同的时间,且不同的单元组有不同的更新频率 557 | 558 | ## 10. LSTM 和其他门控RNN 559 | 560 | 1. 目前实际应用中最有效的序列模型称作门控RNN,包括基于 LSTM`long short-term memory` 和 基于门控循环单元`gated recurrent unit`网络 561 | 2. 门控RNN 的思路和渗漏单元一样:生成通过时间的路径,其中导数既不消失也不爆炸 562 | - 渗漏单元选择手动选择常量的连接权重(如跳跃连接)或参数化的连接权重(如渗漏单元)来达到这个目的 563 | - 门控 RNN 将其推广为在每个时间步都可能改变的连接权重 564 | 3. 渗漏单元允许网络在较长持续时间内积累信息 565 | - 这个方法有个缺点:有时候我们希望一旦这个信息被使用(即被消费掉了),那么这个信息就要被遗忘(丢掉它,使得它不再继续传递) 566 | - 门控RNN学会决定何时清除信息,而不需要手动决定 567 | 568 | ### 10.1 LSTM 569 | 570 | 1. LSTM引入自循环以产生梯度长时间持续流动的路径 571 | 572 | - 其中一个关键扩展是:自循环的权重视上下文而定,而不是固定的 573 | - 通过门控这个自循环的权重(由另一个隐单元控制),累计的时间尺度可以动态改变。即使是固定参数的 LSTM,累计的时间尺度也会因为输入序列而改变,因为时间常数时模型本身的输出 574 | - LSTM 在手写识别、语音识别、机器翻译、为图像生成标题等领域获得重大成功 575 | 576 | 2. LSTM循环网络除了外部的 RNN 循环之外,还有内部的 LSTM细胞循环(自环)。LSTM的细胞代替了普通 RNN 的隐单元 577 | 578 | - 细胞最重要的组成部分是细胞状态 $\mathbf{\vec s}^{(t)}$ ,它不是 $\mathbf{\vec h}^{(t)}$ 579 | 580 | - 与渗漏单元类似,LSTM 细胞也有线性自环。但是这里自环的权重不再是常数 $\alpha$ ,而是由遗忘门 $f_i^{(t)}$ 控制的 581 | $$ 582 | f_i^{(t)}=\sigma(b_i^{f}+\sum_jU_{i,j}^{f}x_j^{(t)}+\sum_jW_{i,j}^{f}h_j^{(t-1)}) 583 | $$ 584 | 写成向量形式为:($\sigma$ 为逐元素的函数) 585 | $$ 586 | \mathbf{\vec f}^{(t)}=\sigma(\mathbf{\vec b}^{f}+\mathbf U^{f}\mathbf{\vec x}^{(t)}+\mathbf W^{f}\mathbf{\vec h}^{(t-1)}) 587 | $$ 588 | 遗忘门通过 `sigmoid`单元将权重设置为 0,1 之间的值。它代替了手动设置渗漏单元的 $\alpha $。其中 $\mathbf{\vec b}^{f},\mathbf U^{f},\mathbf W^{f}$ 分别为遗忘门的偏置、遗忘门的输入权重、遗忘门的循环权重 589 | 590 | - 细胞状态更新为: 591 | $$ 592 | s_i^{(t)}=f_i^{(t)}s_i^{(t-1)}+g_i^{(t)}\sigma\left(b_i+\sum_jU_{i,j}x_j^{(t)}+\sum_jW_{i,j}h_j^{(t-1)}\right) 593 | $$ 594 | 写成向量的形式为: ($\sigma$ 为逐元素的函数, $\odot$ 为逐元素的向量乘积) 595 | $$ 596 | \mathbf{\vec s}^{(t)}=\mathbf{\vec f}^{(t)}\odot\mathbf{\vec s}^{(t-1)}+\mathbf{\vec g}^{(t)}\odot \sigma(\mathbf{\vec b}+\mathbf U\mathbf {\vec x}^{(t)}+\mathbf W\mathbf{\vec h}^{(t-1)}) 597 | $$ 598 | 其中 $\mathbf {\vec b},\mathbf U,\mathbf W$ 分别为细胞的偏置、细胞的输入权重、细胞的循环权重。 $\mathbf{\vec g}^{(t)}$ 类似于遗忘门,它称作:细胞的外部输入门单元 599 | 600 | - 细胞的外部输入门的更新方程: 601 | $$ 602 | g_i^{(t)}=\sigma(b_i^{g}+\sum_jU_{i,j}^{g}x_j^{(t)}+\sum_jW_{i,j}^{g}h_j^{(t-1)}) 603 | $$ 604 | 写成向量的形式为:($\sigma$ 为逐元素的函数) 605 | $$ 606 | \mathbf{\vec g}^{(t)}=\sigma(\mathbf{\vec b}^{g}+\mathbf U^{g}\mathbf{\vec x}^{(t)}+\mathbf W^{g}\mathbf{\vec h}^{(t-1)}) 607 | $$ 608 | 其中 $\mathbf{\vec b}^{g},\mathbf U^{g},\mathbf W^{g}$ 分别为输入门的偏置、输入门的输入权重、输入门的循环权重 609 | 610 | - 细胞的输出就是 $\mathbf{\vec h}^{(t)}$。它由细胞的输出门控制: 611 | $$ 612 | h_i^{(t)}=\tanh(s_i^{(t)})q_i^{(t)} 613 | $$ 614 | 615 | $$ 616 | q_i^{(t)}=\sigma(b_i^{o}+\sum_jU_{i,j}^{o}x_j^{(t)}+\sum_jW_{i,j}^{o}h_j^{(t-1)}) 617 | $$ 618 | 619 | 写成向量的形式: ($\sigma,\tanh$ 为逐元素的函数, $\odot$ 为逐元素的向量乘积) 620 | $$ 621 | \mathbf{\vec h}^{(t)}=\tanh(\mathbf{\vec s}^{(t)})\odot\mathbf{\vec q}^{(t)} 622 | $$ 623 | 624 | $$ 625 | \mathbf{\vec q}^{(t)}=\sigma(\mathbf{\vec b}^{o}+\mathbf U^{o}\mathbf{\vec x}^{(t)}+\mathbf W^{o}\mathbf{\vec h}^{(t-1)}) 626 | $$ 627 | 628 | 其中 $\mathbf{\vec b}^{o},\mathbf U^{o},\mathbf W^{o}$ 分别为输出门的偏置、输出门的输入权重、输出门的循环权重 629 | 630 | - 一旦得到了细胞的输出 $\mathbf{\vec h}^{(t)}$,则获取整个循环单元的输出 $\mathbf{\vec o}$ 就和普通的 RNN相同。另外下一步循环单元的连接也是通过 $\mathbf{\vec h}^{(t)}$ 来连接的,与普通 RNN相同 631 | 632 | 3. 你可以可以选择使用细胞状态 $\mathbf{\vec s}^{(t)}$ 作为门的额外输入,如下图所示 633 | 634 | - 此时 $\mathbf{\vec f}^{(t)},\mathbf{\vec g}^{(t)},\mathbf{\vec q}^{(t)}$ 就多了额外的权重参数(对应于 $\mathbf{\vec s}^{(t-1)}$ 的权重) 635 | 636 | ![LSTM](../imgs/10/LSTM.png) 637 | 638 | ​ 639 | 640 | ### 10.2 其他门控 RNN 641 | 642 | 1. 门控循环单元`GRU` 与`LSTM`的主要区别是:门控循环单元的单个门控单元同时控制遗忘因子、更新状态单元 643 | 644 | 2. `GRU`的细胞输出更新公式: 645 | $$ 646 | h_i^{(t)}=u_i^{(t-1)}h_i^{(t-1)}+(1-u_i^{(t-1)})\sigma\left(b_i+\sum_jU_{i,j}x_j^{(t)}+\sum_jW_{i,j}r_j^{(t-1)}h_j^{(t-1)}\right) 647 | $$ 648 | 写成向量的形式:其中 $\odot$ 为逐元素的向量乘积; $\sigma$ 为逐元素的函数 649 | $$ 650 | \mathbf{\vec h}^{(t)}=\mathbf{\vec u}^{(t-1)}\odot\mathbf{\vec h}^{(t-1)}+(1-\mathbf{\vec u}^{(t-1)})\odot\sigma(\mathbf{\vec b}+\mathbf U\mathbf{\vec x}^{(t)}+\mathbf W\mathbf{\vec r}^{(t-1)}\odot \mathbf{\vec h}^{(t-1)}) 651 | $$ 652 | 653 | - 其中 $u$ 为更新门,其公式为: 654 | $$ 655 | u_i^{(t)}=\sigma\left(b_i^{u}+\sum_jU^{u}_{i,j}x_j^{(t)}+\sum_jW_{i,j}^uh_j^{(t)}\right) 656 | $$ 657 | 写成向量的形式: $\sigma$ 为逐元素的函数 658 | $$ 659 | \mathbf{\vec u}^{(t)}=\sigma(\mathbf{\vec b}^{u}+\mathbf U^{u}\mathbf{\vec x}^{(t)}+\mathbf W^{u}\mathbf{\vec h}^{(t)}) 660 | $$ 661 | 662 | - 其中 $r$ 为复位门,其公式为: 663 | $$ 664 | r_i^{(t)}=\sigma\left(b_i^{r}+\sum_jU^{r}_{i,j}x_j^{(t)}+\sum_jW_{i,j}^rh_j^{(t)}\right) 665 | $$ 666 | 写成向量的形式: $\sigma$ 为逐元素的函数 667 | $$ 668 | \mathbf{\vec r}^{(t)}=\sigma(\mathbf{\vec b}^{r}+\mathbf U^{r}\mathbf{\vec x}^{(t)}+\mathbf W^{r}\mathbf{\vec h}^{(t)}) 669 | $$ 670 | 671 | 3. 复位门和更新门能够独立的“忽略”状态向量的一部分 672 | 673 | - 更新门可以选择是采用旧的 $\mathbf{\vec h}$ 值,还是完全用新的值 ($\sigma(.)$ 给出的) 来给出新的 $\mathbf{\vec h}$ ;或者是两者之间 674 | - 复位门控制了当前状态中哪些用于计算下一个状态 675 | 676 | 4. 围绕这一主题可以设计更多的变种。然而一些调查发现:这些 `LSTM`和`GRU`架构的变种,在广泛的任务中难以明显的同时击败这两个原始架构 677 | 678 | ## 11. 优化长期依赖 679 | 680 | ### 11.1 截断梯度 681 | 682 | 1. 强非线性函数往往倾向于非常大或者非常小幅度的梯度。因此深度神经网络的目标函数经常会存在一个悬崖的地形:宽而且平坦的区域会被目标函数变化快的小区域(悬崖)隔开 683 | 684 | - 这样的问题在于:当参数梯度非常大时,基于梯度下降的参数更新可以将参数投射很远,使得参数进入了一个目标函数较大的区域。这样之前的迭代结果就成了无用功(不管你之前获得了多么小的目标函数,现在统统都被投射到了目标函数较大的区域) 685 | - 解决的思路是:当梯度较大时,必须使用足够慢的学习率,从而使得更新足够的小 686 | - 解决方案:梯度截断 687 | 688 | 2. 梯度截断有两种方案: 689 | 690 | - 在更新参数之前,逐元素的截断参数梯度 691 | 692 | - 在更新参数之前,截断梯度的范数:(其中 $v$ 是梯度范数的上界) 693 | 694 | $$ 695 | \mathbf{\vec g}=\begin{cases} 696 | \mathbf{\vec g}&, if\; ||\mathbf{\vec g}||<=v\\ 697 | \frac{\mathbf{\vec g}v}{||\mathbf{\vec g}||}&,else 698 | \end{cases} 699 | $$ 700 | 701 | 第二种方案可以确保截断后的梯度仍然是在梯度方向上。但是实现表明:两种方式类似。 702 | 703 | 3. 当梯度大小超过了阈值时,即使采用简单的随机步骤,效果往往也非常好: 704 | 705 | - 即:随机采用大小为 $v$ 的向量来作为梯度。这样通常会离开数值不稳定的状态 706 | 707 | 4. 截断一个小批量梯度范数不会改变它的梯度方向。但是许多个小批量使用范数截断梯度之后,它们的平均值并不等同于截断真实梯度 708 | 709 | - 梯度截断使得:小批量梯度下降中,其中真实梯度的方向不再等于所有小批量梯度的平均 710 | - 这就是说:传统的随机梯度下降使用梯度的无偏估计。而使用范数截断的梯度下降,引入了经验上是有用的启发式偏置 711 | 712 | 5. 逐元素的梯度截断,梯度更新的方向不仅不再是真实梯度方向,甚至也不是小批量的梯度方向。但是它仍然是一个目标值下降的方向。 713 | 714 | ### 11.2 引导信息流的正则化 715 | 716 | 1. 梯度截断有助于处理爆炸的梯度,但是无助于解决梯度消失。为解决梯度消失,有两种思路: 717 | 718 | - 一种思路是:如 LSTM 及其他门控机制,让路径的梯度乘积接近1 719 | - 另一种思路是:正则化或者约束参数,从而引导信息流 720 | 721 | 2. 正则化引导信息流:目标是希望梯度向量 $\nabla _{\mathbf{\vec h}^{(t)}}L$ 在反向传播时能维持其幅度。即:希望 722 | $$ 723 | (\nabla _{\mathbf{\vec h}^{(t)}}L)\frac{\partial \mathbf{\vec h}^{(t)}}{\partial \mathbf{\vec h}^{(t-1)}} 724 | $$ 725 | 与 $\nabla _{\mathbf{\vec h}^{(t)}}L$ 一样大。`Pascanu et al.` 给出了以下正则项: 726 | $$ 727 | \Omega=\sum_t\left(\frac{||(\nabla _{\mathbf{\vec h}^{(t)}}L)\frac{\partial \mathbf{\vec h}^{(t)}}{\partial \mathbf{\vec h}^{(t-1)}}||}{||\nabla _{\mathbf{\vec h}^{(t)}}L||}-1\right)^{2} 728 | $$ 729 | - 计算这个正则项可能比较困难。 `Pascanu et al.`提出:可以将反向传播向量 $\nabla _{\mathbf{\vec h}^{(t)}}L$ 考虑作为恒值来近似 730 | - 实验表明,如果与梯度截断相结合,该正则项可以显著增加 RNN 可以学习的依赖跨度。如果没有梯度截断,则梯度爆炸会阻碍学习的成功 731 | 732 | 3. 这种方法的一个主要弱点是:在处理数据冗余的任务时,如语言模型,它并不像 LSTM 一样有效 733 | 734 | 735 | ## 12. 外显记忆 736 | 737 | 1. 神经网络擅长存储隐性知识,但是他们很难记住事实 738 | - 隐性知识:难以用语言表达的知识。如:狗和猫有什么不同 739 | - 事实:可以用知识明确表达的。如:猫是一种动物,十月一日是国庆节 740 | 741 | 2. 虽然随机梯度下降需要都次提供相同的输入,但是该输入也不会被特别精确的存储 742 | 743 | 3. 神经网络缺乏工作记忆系统,即类似人类为了实现一些目标而明确保存和操作相关信息片段的系统 744 | - 这种外显记忆组件不仅能让系统快速的存储和检索具体的事实,还能用它们进行循序推论 745 | 746 | 4. `Weston et al.`引入了记忆网络,其种包括一组可以通过寻址机制来访问的记忆单元 747 | 748 | ![memory_cell](../imgs/10/memory_cell.png) 749 | 750 | - 记忆网络原本需要监督信号来指示它们:如何使用记忆单元 751 | - `Graves et al.`引入的神经网络图灵机(`Neural Turing machine`:`NTM`)则不需要明确的监督指示采取哪些行动而能够学习从记忆单元读写任意内容,并通过使用基于内容的软注意机制来允许端到端的训练 752 | - 每个记忆单元都可以被认为是 LSTM 和 GRU 中记忆单元的扩展。不同的是:网络输出一个内部状态来选择从哪个单元读取或者输入 753 | - 由于产生整数地址的函数非常演绎优化,因此`NTM` 实际上同时从多个记忆单元写入或者读取 754 | - 在读取时,`NTM`采取多个单元的加权平均值 755 | - 在写入时,`NTM`同时修改多个单元的值 756 | 757 | 用于这些操作的系数被选择为集中于一个小数量的单元(通常采用`softmax`函数产生)。使用这些具有非零导数的权重允许函数控制访问存储器,从而能够使用梯度下降法优化 758 | 759 | - 这些记忆单元通常扩充为包含向量,而不是由 LSTM 或者 GRU 记忆单元所存储的单个标量。原因有两个: 760 | - 一是:降低读取单个记忆数值的成本。 761 | - 二是:允许基于内容的寻址 762 | 763 | 5. 如果一个存储单元的内容在大多数时间步上会被复制(不被忘记),那么它所包含的的信息可以在时间上前向传播,随时间反向传播的梯度也不会消失或者爆炸 764 | 765 | 6. 外显记忆似乎允许模型学习普通 RNN 或者 LSTM RNN 不能学习的任务 766 | 767 | - 这种优势的一个原因:可能是因为信息和梯度能够在非常长的持续时间内传播 768 | 769 | 7. 作为存储器单元的加权平均值反向传播的代替,我们可以将存储器寻址稀疏解释为概率,并随机从一个单元读取 770 | 771 | - 但是问题时:优化离散决策的模型需要专门的优化算法 772 | - 目前为止,训练这些做离散决策的随机架构,仍然要比训练进行软判决的确定性算法更难 773 | 774 | 775 | 776 | -------------------------------------------------------------------------------- /chapters/11_practical.md: -------------------------------------------------------------------------------- 1 | # 十一、实践方法论 2 | 3 | 1. 一个优秀的机器学习实践者需要知道: 4 | 5 | - 存在哪些算法以及这些算法为何有效的原理 6 | - 如何针对具体应用挑选一个合适的算法 7 | - 如何监控算法,并根据实验反馈改进机器学习系统 8 | 9 | 2. 实际开发过程中,实践者需要决定:是否收集更多的数据、是否需要增加/降低模型容量、是否需要添加/删除正则化项、是否需要改进模型的优化、是否需要改进模型的近似推断....这些都需要大量的时间 10 | 11 | 3. 在实际应用中,正确使用一个普通算法通常要比草率的使用一个不清楚的算法要效果更好 12 | 13 | 4. 正确应用一个算法需要掌握一些相当简单的方法论: 14 | 15 | - 确定目标:使用什么样的误差度量(是准确率还是召回率?),并为此误差度量确定目标(我们期望达到什么样的效果:召回率大于95%?) 16 | 17 | > 这些目标和误差度量取决于该应用为了解决什么问题 18 | 19 | - 尽快建立一个端到端的工作流程,包括估计合适的性能度量 20 | 21 | - 搭建系统,并确定性能瓶颈。 22 | 23 | - 检查哪个部分的性能差于预期 24 | - 检查差于预期的原因:是否过拟合、欠拟合、还是数据或者软件缺陷造成的 25 | 26 | - 根据具体观察反复进行增量式改动:如收集新数据、调整超参数、改进算法 27 | 28 | ## 1. 性能度量 29 | 30 | 1. 确定目标,即使用什么误差度量是第一步 31 | - 因为误差度量将指导接下来的所有工作 32 | - 同时我们也能够了解大概能得到什么级别的目标性能 33 | 2. 对大多数应用而言,不可能实现绝对零误差 34 | - 即使有无限的训练数据,并且恢复了真正的概率分布,但是由于输入特征可能无法包含输出变量的完整信息、或者系统本质上是个随机系统,则仍然产生了误差 35 | - 当然实际上我们也不可能有无限的训练数据 36 | 3. 通常我们需要收集更多的数据。但是我们需要在收集更多数据的成本,与进一步减少误差的价值之间权衡 37 | 4. 通常我们需要对错误率定一个标准从而判断预测得好坏 38 | - 对于学术界,我们可以将先前公布的基准结果作为标准 39 | - 在工业界,我们从安全的、能带来性价比、或者能吸引用户的角度来确定错误率的标准 40 | 5. 性能度量:表明从哪个角度来度量算法的性能 41 | - 常见的有:精度`precision`,召回率`recall`以及 `PR curve`,`ROC`曲线,`F-score`等 42 | - 还有一种:覆盖率。它是机器学习系统能够产生响应的样本占所有样本的比例 43 | - 一个系统可以拒绝处理任何样本,从而达到 100% 的精度。但是覆盖率为 0% 44 | - 也可以从专业角度考量:点击率、用户满意度调查等等 45 | - 最重要的是:确定使用哪个性能度量 46 | 47 | ## 2. 默认的基准模型 48 | 49 | 1. 根据问题的复杂性,项目开始时可能无需使用深度学习 50 | - 如果只需要正确选择几个线性权重就能解决问题,那么项目开始可以使用一个简单的统计模型,如逻辑回归 51 | 2. 如果问题属于 “AI-完全”类型的,如对象识别、语音识别等,那么项目开始于一个合适的深度学习模型,则效果会比较好 52 | 3. 根据数据结构选择一类合适的模型: 53 | - 如果是以固定大小的向量作为输入的有监督学习,那么可以使用全连接的前馈网络 54 | - 如果输入已知的拓扑结构(如图像),则可以使用卷积网络 55 | - 如果输入或者输出是一个序列,则使用门控循环网络(LSTM 或者 GRU) 56 | 4. 刚开始时可以使用某些分段线性单元:如 `ReLU`或者其扩展 57 | 5. 可以选择具有衰减学习率以及动量的`SGD`作为优化算法 58 | - 常见的衰减方法有: 59 | - 衰减到固定最低学习率的线性衰减 60 | - 指数衰减 61 | - 每次发生验证错误停滞时将学习率降低 2-10 倍的衰减策略 62 | - 另一种优化选择是 `Adam`算法 63 | 6. `batch normalization`对优化性能有着显著的影响,特别是对于卷积网络和具有`sigmoid`非线性函数的网络而言 64 | - 最初的基准中,可以忽略`batch normalization` 65 | - 当优化似乎出现问题时,应立即使用`batch normalization` 66 | 7. 除非训练集包含数千万或者更多的样本,否则项目一开始就应该包含一些温和的正则化 67 | - 建议采用早停策略 68 | - 建议采用`dropout`策略,它也兼容很多模型以及许多正则化项 69 | - `batch normalization` 有时可以降低泛化误差,此时可以省略`dropout`策略。因为用于 `normalize`的统计量估计本身就存在噪音 70 | 8. 如果我们的任务和另一个被广泛研究的任务相似,那么通过复制之前研究中已知的性能良好的模型和算法,可能会得到很好的效果 71 | - 你可以从该任务中复制一个训练好的模型。如从`ImageNet`上训练好的卷积网络的特征来解决其他计算机视觉任务 72 | 9. 对于是否使用无监督学习,和特定领域有关 73 | - 对于某些领域,如自然语言处理,能大大受益于无监督学习技术 74 | - 在其他领域,目前无监督学习并没有带来好处 75 | - 如果你所处理的应用,无监督学习是非常重要的,那么将其包含在第一个端到端的基准中;否则只有在解决无监督问题时,才第一次尝试使用无监督学习 76 | 77 | ## 3. 决定是否收集更多数据 78 | 79 | 1. 建立第一个端到端的系统后,就可以度量算法的性能并决定如何改进算法 80 | - 很多新手忍不住尝试很多不同的算法来改进 81 | - 实际上,收集更多的数据往往比改进学习算法要有用的多 82 | 2. 决定是否需要收集更多数据的标准: 83 | - 首先:确定训练集上的性能可否接受。如果模型在训练集上的性能就很差,那么没必要收集更多的数据。 84 | - 此时可以尝试增加更多的网络层 85 | - 或者每层增加更多的隐单元从而增加模型的规模 86 | - 也可以尝试调整学习率等超参数来改进算法 87 | - 如果这些都不行,则说明问题可能源自训练数据的质量:数据包含太多噪声,或者数据未能包含预测输出所需要的正确输入。此时我们需要重新开始收集干净的数据,或者收集特征更丰富的数据 88 | - 如果模型在训练集上的性能可以接受,那么我们开始度量测试集上的性能。 89 | - 如果测试集上的性能也可以接受,则任务完成 90 | - 如果测试集上的性能比训练集的要差得多,则收集更多的数据时最有效的解决方案之一 91 | - 此时主要考虑三个要素: 92 | - 收集更多数据的代价和可行性 93 | - 其他方法降低测试误差的代价和可行性 94 | - 增加数据数量能否显著提升测试集性能 95 | 3. 如果增加数据数量代价太大,那么一个替代的方案是降低模型规模,或者改进正则化(调整超参数、或者加入正则化策略) 96 | - 如果调整正则化参数之后,训练集性能和测试集性能之间的差距还是无法接受,则只能收集更多的数据 97 | 4. 当决定增加数据数量时,还需要确定收集多少数据。可以绘制曲线来显式训练集规模和泛化误差之间的关系 98 | - 根据曲线的延伸,可以预测还需要多少训练数据来到达一定的性能 99 | - 通常加入小比例的样本不会对泛化误差产生显著的影响。因此建议在对数尺度上考虑训练集的大小,以及增加的数据数量 100 | 5. 如果收集更多的数据是不可行的(成本太高无法实现,或者无法改进泛化误差),那么改进泛化误差的唯一方法是:改进学习算法本身 101 | - 这是属于研究领域,并不是对实践者的建议 102 | 103 | ## 4. 选择超参数 104 | 105 | 1. 大部分深度学习算法都有许多超参数来控制不同方面的算法表现 106 | - 有的超参数会影响算法运行的时间和存储成本 107 | - 有的超参数会影响学习到的模型质量,以及在新输入上推断正确结果的能力 108 | 2. 有两种选择超参数的方法: 109 | - 手动选择。手动选择超参数需要了解超参数做了些什么,以及机器学习模型如何才能取得良好的泛化 110 | - 自动选择。自动选择超参数算法不需要你了解超参数做了什么以及机器学习模型如何才能取得零号的泛化,但是它往往需要更高的计算成本 111 | 112 | ### 4.1 手动调整超参数 113 | 114 | 1. 手动设置超参数:我们必须了解超参数、训练误差、泛化误差、计算资源(内存和运行时间) 之间的关系。这要求我们切实了解一个学习算法有效容量的基本概念 115 | 116 | 2. 手动搜索超参数的任务是:在给定运行时间和内存预算范围的条件下,最小化泛化误差 117 | 118 | - 我们不讨论超参数对于运行时间和内存的影响,因为它们高度依赖于平台 119 | 120 | 3. 手动搜索超参数的主要目标是:调整模型的有效容量以匹配任务的复杂性 121 | 122 | - 模型的有效容量受限于三个因素: 123 | - 模型的表示容量。更多的网络层、每层更多的隐单元的模型具有更大的容量(能表达更复杂的函数) 124 | - 学习算法成功最小化训练模型代价函数的能力 125 | - 训练过程正则化模型的程度 126 | - 模型的表示容量并不是越高越好。如果无法找到合适的代价函数来最小化训练代价、或者正则化项排除了某些合适的函数,那么即使模型的表达能力再强,也无法学习出合适的函数。 127 | 128 | 4. 如果以超参数为自变量,泛化误差为因变量。那么会在的曲线通常会表现为 U 形 129 | 130 | - 在某个极端情况下,超参数对应着低容量(并不是超参数越小,模型容量越低;也可能是相反的情况)。此时泛化误差由于训练误差较大而很高。这就是欠拟合 131 | - 在另一个极端情况下,超参数对应着高容量,此时泛化误差也很大。这就是过拟合 132 | - 过拟合中,泛化误差较大的原因是:虽然此时训练误差较小,但是训练误差和测试误差之间的差距较大。 133 | - 最优的模型容量位于曲线中间的某个位置 134 | 135 | 5. 对于某些超参数,当超参数值太大时,会发生过拟合。如中间层隐单元的数量,数量越大,模型容量越高,也更容易发生过拟合。 136 | 137 | 对于某些超参数,当超参数值太小时,也会发生过拟合。如 $L2$ 正则化的权重系数,系数为0,表示没有正则化,此时很容易过拟合。 138 | 139 | 6. 并不是每个超参数都对应着完整的 U 形曲线 140 | 141 | - 很多超参数是离散的,如中间层隐单元的数量,或者 `maxout`单元中线性片段的数目 142 | - 有些超参数甚至是二值的。如是否决定对输入特征进行标准化这个布尔值的超参数 143 | - 有些超参数可能有最小值或者最大值 144 | 145 | 7. 学习率可能是最重要的超参数 146 | 147 | - 如果你只有时间来调整一个超参数,那么久调整学习率 148 | 149 | - 相比其他超参数,学习率以一种更复杂的方式控制模型的有效容量: 150 | 151 | - 当学习率适合优化问题时,模型的有效容量最高 152 | - 当学习率过大时,梯度下降可能会不经意地增加而非减少训练误差。在理想的二次情况下,如果学习率是最佳值的两倍时,会发生这种情况 153 | - 当学习率太小时,训练不仅会很慢,还有可能永久停留在一个很高的训练误差。对于这种情况我们知之甚少(但是我们可以知道这种情况不会发生在一个凸损失函数中) 154 | 155 | - 学习率关于训练误差具有 U 形曲线。泛化误差也是类似的 U 形曲线,但是正则化作用在学习率过大或者过小处比较复杂 156 | 157 | ![man_search](../imgs/11/man_search.png) 158 | 159 | 8. 调整学习率以外的其他参数时,需要同时监测训练误差和测试误差,从而判断模型是否过拟合或者欠拟合,然后适当调整其容量 160 | 161 | - 如果训练集错误率大于目标错误率(这个根据任务背景人工指定),那么只能增加模型容量以改进模型。但是这增加了模型的计算代价 162 | - 如果测试集错误率大于目标错误率,则有两个方法: 163 | - 如果训练误差较小(这说明模型容量较大),则表明测试误差取决于训练误差与测试误差之间的差距。要减少这个差距,我们可以改变正则化超参数,以减少有效的模型容量 164 | - 如果训练误差较大(者说明模型容量较小),那么也只能增加模型容量以改进模型 165 | 166 | 9. 通常最佳性能来自于正则化很好的大规模模型,如使用`Dropout`的神经网络 167 | 168 | 10. 大部分超参数可以推论出是否增加或者减少模型容量,部分示例如下: 169 | | 超参数 | 容量何时增加 | 原因 | 注意事项 | 170 | | :--------: | :----: | :-----------------------------------: | :--------------------------------------: | 171 | | 隐单元数量 | 增加 | 增加隐单元数量会增加模型的表示能力 | 几乎模型每个操作所需要的时间和内存代价都会随隐单元数量的增加而增加 | 172 | | 学习率学习率 | 调至最优 | 不正确的学习率,不管是太高还是太低都会由于优化失败而导致低的有效容量的模型 | | 173 | | 卷积核宽度 | 增加 | 增加卷积核宽度会增加模型的参数数量 | 较宽的卷积核导致较窄的输出尺寸,除非使用隐式零填充来减少此影响,否则会降低模型容量。较宽的卷积核需要更多的内存来存储参数,并增加运行时间 | 174 | | 隐式零填充 | 增加 | 在卷积之前隐式添加零能保持较大尺寸的表示 | | 175 | | 权重衰减系数 | 降低 | 降低权重衰减系数使得模型参数可以自由地变大 | | 176 | | dropout 比率 | 降低 | 较少地丢弃单元可能更多的让单元彼此“协力”来适应训练集 | | 177 | 178 | 11. 手动调整超参数时不要忘记最终目标:提升测试集性能 179 | 180 | - 加入正则化只是实现这个目标的一种方法 181 | - 如果训练误差很低,也可以通过收集更多的训练数据来减少泛化误差。如果训练误差太大,则收集更多的训练数据就没有意义。 182 | - 实践中的一种暴力方法是:不断提高模型容量和训练集的大小。这种方法增加了计算代价,只有在拥有充足的计算资源时才可行 183 | 184 | ### 4.2 自动超参数优化算法 185 | 186 | 1. 理想的学习算法应该是只需要输入一个数据集,然后就可以输出学习的函数而不需要人工干预调整超参数 187 | - 一些流行的算法如逻辑回归、支持向量机,其流行的部分原因是:这类算法只需要调整一到两个超参数,而且性能也不错 188 | - 某些情况下,神经网络只需要调整少量的超参数就能达到不错的性能;但是如果大多数情况下需要调整更多的超参数 189 | 2. 原则上可以开发出封装了学习算法的超参数优化算法,并自动选择其超参数 190 | - 超参数优化算法往往有自己的超参数(如学习算法的每个超参数的取值范围),这将问题变得更复杂 191 | - 我们可以人工选择参数优化算法这一级的超参数,因为这一级的超参数通常更容易选择 192 | 193 | ### 4.3 网格搜索 194 | 195 | 1. 当只有三个或者更少的超参数时,常见的超参数搜索方法是:网格搜索 196 | - 对于每个超参数,选择一个较小的有限值集合去搜索 197 | - 然后这些超参数笛卡尔乘积得到多组超参数 198 | - 网格搜索使用每一组超参数训练模型,挑选验证集误差最小的超参数作为最好的超参数 199 | 2. 如何确定搜索集合的范围? 200 | - 如果超参数是数值,则搜索集合的最小、最大元素可以基于先前相似实验的经验保守地挑选出来 201 | - 如果超参数是离散的,则直接使用离散值 202 | 3. 通常网格搜索会在对数尺度下挑选合适的值 203 | 4. 通常重复进行网格搜索时,效果会更好。假设在集合 `{-1,0,1}`上网格搜索超参数 $\alpha$ 204 | - 如果找到的最佳值是 1,那么说明我们低估了 $\alpha$ 的取值范围。此时重新在 `{1,2,3}` 上搜索 205 | - 如果找到的最佳值是 0,那么我们可以细化搜索范围以改进估计。此时重新在 `{-0.1,0,0.1}` 上搜索 206 | 5. 网格搜索的一个明显问题时:计算代价随着超参数数量呈指数级增长。 207 | - 如果有 $m$ 个超参数,每个最多取 $n$ 个值,那么所需的试验数将是 $O(n^m)$ 。虽然我们可以并行试验,但是指数级增长的计算代价仍然不可行 208 | 209 | ### 4.4 随机搜索 210 | 211 | 1. 随机搜索是一种可以替代网格搜索的方法,它编程简单、使用方便、能更快收敛到超参数的良好取值: 212 | - 首先为每个超参数定义一个边缘分布,如伯努利分布(对应着二元超参数)或者对数尺度上的均匀分布(对应着正实值超参数) 213 | - 然后假设超参数之间相互独立,从各分布中抽样出一组超参数。 214 | - 使用这组超参数训练模型 215 | - 经过多次抽样 -> 训练过程,挑选验证集误差最小的超参数作为最好的超参数 216 | 2. 随机搜索的优点: 217 | - 不需要离散化超参数的值,也不需要限定超参数的取值范围。这允许我们在一个更大的集合上进行搜索 218 | - 当某些超参数对于性能没有显著影响时,随机搜索相比于网格搜索指数级地高效,它能更快的减小验证集误差 219 | 3. 与网格搜索一样,我们通常会基于前一次运行结果来重复运行下一个版本的随机搜索 220 | 4. 随机搜索比网格搜索更快的找到良好超参数的原因是:没有浪费的实验 221 | - 在网格搜索中,两次实验之间只会改变一个超参数 (假设为 $\beta$ )的值,而其他超参数的值保持不变。如果这个超参数 $\beta$ 的值对于验证集误差没有明显区别,那么网格搜索相当于进行了两个重复的实验 222 | - 在随机搜索中,两次实验之间,所有的超参数值都不会相等(因为每个超参数的值都是从它们的分布函数中随机采样而来)。因此不大可能会出现两个重复的实验 223 | - 如果 $\beta$ 超参数与泛化误差无关,那么不同的 $\beta$ 值: 224 | - 在网格搜索中,不同 $\beta$ 值、相同的其他超参数值,会导致大量的重复实验 225 | - 在随机搜索中,其他超参数值每次也都不同,因此不大可能出现两个重复的实验(除非所有的超参数都与泛化误差无关) 226 | 227 | ### 4.5 基于模型的超参数优化 228 | 229 | 1. 超参数搜索问题可以转化为一个优化问题: 230 | - 决策变量是超参数 231 | - 优化的代价是超参数训练出来的模型在验证集上的误差 232 | - 在简化的设定下,可以计算验证集上可导的误差函数关于超参数的梯度,然后基于这个梯度进行更新 233 | 2. 实际上,大多数问题中,超参数的梯度是不可用的 234 | - 一方面可能是因为因为高额的计算代价和存储成本。因为你需要计算非常多的超参数才能获得一系列的超参数的导数(这就要求你运行非常轮次的算法) 235 | - 另一方面可能是因为验证集误差在超参数上本质不可导(如超参数时离散值的情况) 236 | 3. 为了弥补超参数梯度的缺失,我们可以使用贝叶斯回归模型来估计每个超参数的验证集误差的期望和该期望的不确定性(贝叶斯回归模型不需要使用梯度) 237 | - 目前无法明确的确定:贝叶斯超参数优化是否有效。实际上,它有时表现得像一个人类专家,但是有时候又发生灾难的失误。目前该方法还不够成熟或可靠 238 | 4. 大部分超参数优化算法比随机搜索更复杂,并且具有一个共同的缺点:在获取任何有效的超参数信息之前,你必须完整运行整个训练过程 239 | - 这种做法是相当低效的。实际上人类手动搜索之前,可以很早就判断某些超参数组合是否是完全病态的 240 | 241 | ## 5. 调试策略 242 | 243 | 1. 当一个机器学习系统效果不好时,很难判断效果不好的原因是算法本身,还是算法实现错误。由于各种原因,机器学习系统很难调试 244 | 245 | - 大多数情况下,我们不能提前知道算法的行为 246 | - 实际上,使用机器学习的出发点是:机器学习会发现一些我们无法发现的有用的行为 247 | - 如果我们在一个新的分类任务上训练一个神经网络,它达到了 5% 的测试误差。我们无法直接知道:这是期望的结果,还是次优的结果? 248 | - 大部分机器学习模型有多个自适应的部分 249 | - 如果某个部分失效了,那么其他部分仍然可以自适应,并获得大致可接受的性能 250 | - 比如在多层神经网络中,假设我们在梯度下降中对偏置更新时犯了一个错误 $b=b-\alpha$ (错误原因:没有使用梯度。其中 $\alpha$ 为学习率)。这个错误导致偏置在学习过程中不断减小。但是只是检查模型输出的话,这个错误并不是显而易见的。因为权重 $\mathbf W$ 可以自适应的补偿偏置 $b$ 的错误 251 | 252 | 2. 大部分神经网络的调试策略都是解决上述两个难点的一个或者两个 253 | 254 | - 我们可以设计一种足够简单的情况,能够提前得到正确结果,判断模型预测是否与之相符 255 | - 我们可以设计一个测试(类似于 `UnitTest`),独立检查神经网络实现的各个部分 256 | 257 | 3. 一些重要的调试方法如下: 258 | 259 | - 可视化计算中模型的行为:直接观察机器学习模型运行机器任务,有助于确定其达到的量化性能数据是否看上去合理 260 | 261 | - 仅仅评估模型性能可能是最具破坏性的错误之一,因为它会使你在系统出问题时误以为系统运行良好 262 | 263 | - 可视化最严重的错误:大多数模型能够输出运行任务时的某种置信度(如基于`softmax`函数输出层的分类器给每个类分配了一个概率)。如果某个样本被错误的分类,而且其分类置信度很低,那么可以检查这些样本的问题 264 | 265 | - 根据训练和测试误差检测软件:通常我们很难确定底层软件是否正确实现,而测试和训练误差提供了一些线索 266 | 267 | - 如果训练误差较低,而测试误差较高,那么很可能是由于算法过拟合。也有可能是软件错误,导致测试误差未能正确地度量 268 | - 如果训练误差和测试误差都很高,那么很难确定是由于软件错误,还是由于算法模型的欠拟合。此时需要进一步测试,如下所述 269 | 270 | - 拟合极小的数据集:当训练集上有很大的误差时,我们需要确定问题是欠拟合,还是软件错误 271 | 272 | - 通常即使是极小模型也能保证很好的拟合一个足够小的数据集。如只有一个样本的分类数据,它可以通过正确设置输出层的偏置来拟合 273 | - 如果分类器不能正确标准一个单样本组成的训练集、自编码器无法成功再现一个单独的样本、生成模型无法一致的生成一个单独的样本,那么很有可能是由于软件错误 274 | - 这种测试可以推广到少量样本的小数据集上,不一定是只有一个样本的数据集 275 | 276 | - 比较反向传播导数和数值导数:如果我们正在使用一个软件框架或者库,那么必须定义 `bprop`方法,常见的错误原因是未能正确的实现梯度表达。验证该错误的一个方法是:比较实现的自动求导和通过有限差分计算的导数 277 | $$ 278 | f^\prime\simeq \frac{f(x+\epsilon)-f(x)}{\epsilon} 279 | $$ 280 | 或者采用中心差分法: 281 | $$ 282 | f^\prime\simeq \frac{f(x+\frac 12\epsilon)-f(x-\frac 12\epsilon)}{\epsilon} 283 | $$ 284 | 其中 $\epsilon$ 必须足够大,从而确保不会由于有限精度问题产生舍入误差 285 | 286 | - 如果梯度是雅克比矩阵(输出为向量,输入也是向量),则我们可以多次使用有限差分法来评估所有的偏导数 287 | 288 | - 监控激活函数值和梯度的直方图:可视化激活函数值和梯度的统计量往往是有用的。 289 | 290 | - 隐单元的激活函数值告诉我们:该单元是否饱和,或者它们饱和的频率如何(如多久关闭一次,是否永远关闭,以及采用双曲正切单元时饱和的程度) 291 | - 梯度的统计量告诉我们:梯度是否快速的增长或者快速的消失 292 | - 参数的梯度的量级和参数的量级也有意义:我们希望参数在一个小批量更新中变化的幅度是参数量值的 1% 这样的级别(而不是 50% 或者 0.0001%,这两者要么导致参数移动太快,要么太慢) 293 | - 如果数据时稀疏的(如自然语言),则有些参数可能是很少更新的,检测时需要注意 294 | 295 | 4. 许多深度学习算法为每一步的结果产生了某种保证。其中包括: 296 | 297 | - 目标函数值确保在算法的迭代步中不会增加 298 | 299 | - 某些变量的导数在算法的每一步中都是 0 300 | 301 | - 所有变量的梯度在收敛时,会变为 0 302 | 303 | > 由于计算机存储浮点数的舍入误差,这些条件可能会有误差 304 | 305 | 如果违反了这些保证,那么一定是软件错误 306 | 307 | ## 6. 示例:数字识别系统 308 | 309 | 1. 项目开始于性能度量的选择以及这些度量的期望。 310 | - 总的原则是:度量的选择要符合项目的业务目标 311 | - 因为地图只有高准确率时才有价值,所以该系统要求达到 98% 的准确率(达到人类水平) 312 | - 为了达到这个级别的准确率,系统牺牲了覆盖率。因此在保持准确率 98% 的前提下,覆盖率成了项目的主要性能度量 313 | 2. 选择基准系统:对于视觉任务而言,基准系统是带有 `ReLU`单元的卷积网络 -------------------------------------------------------------------------------- /chapters/12_application.md: -------------------------------------------------------------------------------- 1 | # 十二、应用 2 | 3 | 1. 尽管深度学习的一个目标是:设计能够处理各种任务的算法。但是截至目前,深度学习的应用仍然需要一定程度的特化 4 | - 计算机视觉中的任务对每一个样本都需要处理大量的输入特征(像素) 5 | - 自然语言处理的每一个输入特征都需要对大量可能值(词汇表中的词)建模 6 | 7 | ## 1. 大规模深度学习 8 | 9 | 1. 深度学习的基本思想基于联结主义:尽管机器学习模型中,单个生物性的神经元不是智能的,但是大量的神经元作用在一起可以表现出智能 10 | 11 | - 必须重点强调神经元数量必须很大这个事实 12 | - 由于规模的大小对于神经网络来说至关重要,因此深度学习需要高性能的硬件和软件实现 13 | 14 | 2. 传统的神经网络时单台机器的 CPU 来训练。如今这种做法被认为是不可取的 15 | 16 | 3. 许多现代神经网络的实现基于 GPU 来训练 17 | 18 | - 由于实现高效 GPU 代码的困难性,人们通常会选择一个软件库而不是编写新的 GPU 代码来实现算法 19 | 20 | 4. 许多情况下,单台机器的计算资源是有限的,因此我们希望把训练或者推断的任务分摊到多个机器上进行 21 | 22 | - 数据并行:进行分布式的推断。因为每个输入的样本都可以在单独的机器上运行,所以数据并行很容易实现 23 | - 模型并行:多个机器共同运行一个数据点,每个机器负责模型的一部分。对于训练和推断,这也是可行的 24 | 25 | 5. 在训练过程中的数据并行有一定的困难 26 | 27 | - 我们可以增加单个 `SGD`步中的 `minibatch`的大小,但是我们获取的性能优化低于线性的 28 | 29 | - 我们也可以考虑并行的求解多个梯度,但是很不幸的是: 第 $t $ 步梯度依赖于 第 $t-1$ 步的迭代梯度,这是一个完全串行的过程 30 | 31 | - 这个问题可以使用异步随机梯度下降来解决。几个处理器的核公用存有参数的内存;每个核在无锁的情况下读取这些参数并计算对应的梯度,然后在无锁的状态下更新这些参数 32 | 33 | > 之所以用无锁,是因为加锁和等待锁的时间成本太高。这里虽然无锁会导致数据冲突,但是并不会影响算法的正确性(因为每个迭代步的结果都是沿着目标函数值下降的方向) 34 | 35 | - 由于一些核把其他的核所更新的参数覆盖了,因此这种方法减少了每一步梯度下降所获得的平均提升 36 | 37 | - 但是因为更新步数的速度(单位时间内,更新步的数量)增加,总体上还是加快了学习过程 38 | 39 | - 也可以将参数放到参数服务器上管理,而不是放到公用的内存中 40 | 41 | ### 1.1 模型压缩 42 | 43 | 1. 许多商业应用的机器学习模型中,一个时间和内存开销比较小的推断算法比一个时间和内存开销较小的训练算法更重要 44 | - 对于那些不需要特殊设计的应用来说,我们只需要一次性的训练模型,就可以被重复使用 45 | - 相比较开发过程,应用过程可能拥有的资源非常有限。比如可以在超大计算机集群上训练一个语音识别网络,然后将其部署在手机上 46 | 2. 降低推断开销的一个关键策略是:模型压缩 47 | - 基本思想是:用一个更小的模型来代替原始的、耗时的模型,从而使得用来存储于评估所需的内存和运行时间更少 48 | - 当原始模型的规模很大,且我们需要防止过拟合时,模型压缩就可以起到作用 49 | 3. 我们的大模型能够学习到某个函数 $f(x)$,但是由于训练样本数量有限,因此模型的参数数量往往会超过任务所需的参数数量(过拟合) 50 | - 我们将 $f$ 作用于无穷多的随机采样点 $x $,从而生成无穷多的训练样本组成训练集 51 | - 然后我们用这个新的训练集来训练一个更小的模型,使得它能够在这些点上拟合 $f(x)$ 52 | - 为了充分利用这个新的小模型的容量,最好从类似于真实测试数据的分布中采样 $x$ 。这个过程可以通过损坏训练样本,或者从原始训练数据的生成模型中采样完成 53 | 54 | ### 1.2 动态结构 55 | 56 | 1. 加速数据处理系统的一种策略是:构造一个动态结构的系统来处理输入 57 | - 动态系统:系统可以动态的决定使用哪一部分来处理输入(类似多路开关) 58 | - 对于神经网络,网络可以动态决定运行网络中的哪一部分 59 | - 单个神经元内部也可以存在动态结构:给定输入信息,隐单元决定哪些特征参与计算。只计算这些必要的特征会起到加速的目的 60 | 2. 在分类任务中,加速推断这一过程的一种策略是:使用级联分类器。当目标是检测某个对象是否存在时: 61 | - 我们训练一系列的分类器。第一个分类器被训练为具有很高的召回率,最后一个分类器被训练为具有很高的精度 62 | - 在推断时,我们按照顺序运行这些分类器。一旦级联中的任何一个发现不包含该对象,则抛弃 63 | - 由于前面的分类器通常都是低容量,因此如果一旦发现不包含该对象,则立即返回;没必要每次都运行最后一个高精度的分类器(容量较大,计算量也较大) 64 | 3. 级联分类器的另一个版本是:级联分类器前面的成员负责定位对象;后续成员在给定对象位置的情况下执行进一步处理 65 | 4. 决策树是动态结构的一个例子 66 | - 树中的每个中间节点决定:应该使用哪个子树来评估输入 67 | - 一个结合深度学习和动态结构的简单方法是:训练一个决策树,其中每个中间节点使用神经网络做出决策(这个策略不会加速推断计算) 68 | 5. 我们可以使用一种称作选通器 `gater`的神经网络来选择:在给定当前输入的情况下,将使用多个专家网络中的哪个来计算输出。这也是动态结构的一个例子 69 | - 第一个版本被称作专家混合体:其中选通器为每个专家输出一个概率或者权重。最终的输出由各个专家输出的加权组合获得。此时并不会降低计算成本 70 | - 如果每个样本的选通器选择的是单个专家,则我们获得一个特殊的硬专家混合体,这可以加速训练和推断 71 | 6. 另一个动态结构的例子是开关:其中隐单元可以根据具体情况从不同单元接受输入 72 | - 这种动态路由的方法可以理解为注意力机制 73 | - 目前为止,其使用在大规模应用中还没有被证明是有效的 74 | - 一个改进的做法是:采用对许多可能的输入使用加权平均,因此不能完全得到动态结构所带来的计算效益 75 | 7. 动态结构系统的主要缺陷是:由于系统针对不同输入的不同处理方式,导致并行度降低 76 | - 我们可以将样本分组,使得每一组的样本都采用相同的处理方式来缓解该问题。但是在实时系统中,这会导致负载均衡问题(因为不同组的样本数量千差万别) 77 | 78 | ## 2. 计算机视觉 79 | 80 | 1. 视觉对于人类以及许多动物毫不费力,但是对于计算机却充满挑战 81 | - 深度学习中许多流行的标准基准任务包括:对象识别,以及光学字符识别 82 | 83 | ### 2.1 预处理 84 | 85 | 1. 图像应该被标准化,从而使得它们的像素都在相同并且合理的范围内。如 [0,1] 或者 [-1,1] 或者 [0,255] 86 | 87 | - 不同范围的像素不能混合在一起 88 | 89 | - 将图像格式化为具有相同的比例是唯一一个必要的预处理。许多计算机视觉框架需要标准尺寸的图像,因此必须裁剪或者缩放图像以适应该尺寸 90 | 91 | > 实际上,缩放图像的操作并不总是必要的。有些卷积模型接受可变大小的输入并动态调整它们的池化区域大小从而保持输出大小恒定;有些卷积模型具有可变大小的输出,其尺寸随输入自动缩放 92 | 93 | 2. 数据集增强可以看做是一种只对训练集做预处理的方式 94 | 95 | - 在计算机视觉中,数据集增强是减少泛化误差的一种极好的方法 96 | - 在测试时,可以考虑将同一个输入的不同版本传给模型来预测(如稍微不同的位置处裁剪相同图像) 97 | 98 | 3. 其他一些预处理方式同时应用于训练集和测试集,如每个像素减去训练样本的平均值。这些目的是将每个样本置于更规范的形式 99 | 100 | #### 2.1.1 对比度归一化 101 | 102 | 1. 对比度:指的是图像中亮像素和暗像素之间差异的大小。度量图像对比度有多种方式 103 | 104 | - 深度学习中,对比度通常指的是图像整体或者图像区域中像素的标准差 105 | - 假设图像为 张量 $\mathbf X \in \mathbb R^{r\times c\times 3}$, 其中 $X_{i,j,1},X_{i,j,2},X_{i,j,3}$ 分别表示第 $i$ 行 第 $j$ 列红色、绿色、蓝色的强度。则整个图像的对比度为: 106 | 107 | $$ 108 | \sqrt{\frac {1}{3rc}\sum_{i=1}^r\sum_{j=1}^c\sum_{k=1}^3(X_{i,j,k}-\bar{\mathbf X})^2} 109 | $$ 110 | 111 | ​ 其中 $\bar{\mathbf X}$ 为整个图片的平均强度: 112 | $$ 113 | \bar{\mathbf X}=\frac {1}{3rc}\sum_{i=1}^r\sum_{j=1}^c\sum_{k=1}^3 X_{i,j,k} 114 | $$ 115 | 116 | 2. 全局对比度归一化`global contrast normalization:GCN`:每个图像中减去其平均值,然后重新缩放使其每个像素上的标准差等于某个常数 $s$ 防止图像具有变化的对比度 117 | 118 | - 没有缩放因子来改变 0 对比度的图像的对比度 119 | - 具有非常低但是非零对比度的图像通常几乎没有信息内容。此时如果执行全局对比度归一化,则仅能放大传感器噪声或者压缩一些虚假的图像 120 | 121 | 3. 带正则化的全局对比度归一化:引入小的正则化参数 $\lambda $ 来平衡估计的标准差。输出图像为: 122 | $$ 123 | X^\prime_{i,j,k}=s\frac{X_{i,j,k}-\bar{\mathbf X}}{\max \{\epsilon,\sqrt{\lambda+\frac {1}{3rc}\sum_{i=1}^r\sum_{j=1}^c\sum_{k=1}^3(X_{i,j,k}-\bar{\mathbf X})^2}\}} 124 | $$ 125 | ​ 126 | 127 | 其中 $\epsilon$ 用于约束分母,使其非零。 128 | 129 | - 从大图像中裁剪的、由所感兴趣对象组成的数据集不可能包含任何强度几乎恒定的图像。此时可以设置 $\lambda=0$ 。同时为了避免在非常罕见的情况下分母为 0,设置 $\epsilon$ 为一个非常小的数,如 $\epsilon=10^{-8}$ 130 | - 随机裁剪的小图像更可能具有几乎恒定的强度(标准差为 0),此时需要设置 $\lambda $ 为一个激进的值,如 $\lambda=10$ 131 | - $s$ 通常设置为1 132 | 133 | 4. 我们可以把全局对比度归一化理解为到球壳的一种映射 134 | 135 | - 因为神经网络往往更好的响应空间方向,而不是精确的位置 136 | 137 | ![GCN](../imgs/12/GCN.png) 138 | 139 | 5. 另一种 `sphering`的预处理操作:它并不会使得数据位于球壳上,而是将主成分重新压缩从而具有相等方差,使得 PCA 使用的多变量正态分布具有球形等高线 140 | 141 | - `sphering` 通常被称作白化 142 | 143 | 6. 全局对比度归一化通常并不能突出我们想要突出的图像特征,如边缘和角。这催生出了局部对比度归一化`local contrast normalization:LCN` 144 | 145 | - 局部对比度归一化确保对比度在每个小窗口上被归一化 146 | 147 | - 局部对比度归一化的各种定义都是可行的。 148 | 149 | - 我们可以减去临近像素的均值,并处以临近像素的标准出来修改每个像素 150 | - 也可以使用被处理像素为中心的矩形窗口中所有像素的均值和标准差 151 | - 也可以使用加权均值和加权标准差 152 | 153 | ![LCN](../imgs/12/LCN.png) 154 | 155 | 7. 全局对比度归一化使得所有图片的尺度都差不多,这减轻了学习算法处理多个尺度的负担。局部对比度归一化更多的改变了图像,丢弃了所有相同强度的区域,使得模型能够只关注于边缘 156 | 157 | 8. 我们通常需要正则化局部对比度归一化来避免出现处理 0 的情况 158 | 159 | - 因为局部对比度归一化通常作用于较小的窗口,所以正则化更加重要 160 | 161 | ### 2.2 数据集增强 162 | 163 | 1. 我们可以通过对原始图像进行一些变化、但是不改变其类别来增加训练集的额外样本 164 | - 对象识别任务特别适合这种形式的数据集增强。因为类别信息对于许多变换是不变的 165 | 166 | ## 3. 语音识别 167 | 168 | 1. 语音识别任务:将一段包含了自然语言发音的声学信号映射到词序列上。 令 $\mathbf {\vec X}=(x^{(1)},x^{(2)},\cdots,x^{(T)})$ 表示语音的输入向量 169 | - 传统的方法需要特殊的手工设计方法预处理输入信号,从中提取特征 170 | - 深度学习系统从原始输入中提取特征 171 | 2. 传统的语音识别系统是:隐马尔科夫模型与高斯混合模型的结合 172 | - 高斯混合模型对声学特征和音素之间的关系进行建模 173 | - 隐马尔科夫模型对音素序列建模 174 | - 建模过程如下: 175 | - 首先,一个 HMM 生成了一个音素的序列以及离散的子音素状态(如:每个音素的开始、中间、结尾) 176 | - 然后 GMM 把每一个离散的状态转化为一个简短的声音信号 177 | 178 | ## 4. 自然语言处理 179 | 180 | 1. 我们将自然语言视作一系列词,而不是单个字符或者字节序列 181 | 182 | 2. `n-gram`模型:包含 `n` 个标记的序列 183 | 184 | - 基于`n-gram`的模型:定义了一个条件概率:给定前 `n-1`个标记后的第 `n` 个标记的条件概率: 185 | $$ 186 | P(x_1,x_2,\cdots,x_\tau)=P(x_1,\cdots,x_{n-1})\prod_{t=n}^{\tau}P(x_t\mid x_{t-n+1},\cdots,x_{t-1}) 187 | $$ 188 | 189 | > 当 $n=2$ 时, $P(x_1,x_2,x_3)=P(x_1)P(x_2\mid x_1)P(x_3\mid x_2)$ ,即以 $n$ 个单词为一组,不同组之间的在概率图上不相连 190 | 191 | - 训练 `n-gram` 模型是简单的,简单统计每个可能的 `n-gram`即可 192 | 193 | - 几十年依赖,基于`n-gram`的模型都是统计语言的核心模块 194 | 195 | - 对于小的 `n` 值:`n=1`称作一元语言模型`unigram`;`n=2`时称作二元语言模型`bigram`;`n=3`时称作三元语言模型`trigram` 196 | 197 | - 大多数 `n-gram` 模型都采用了某种形式的平滑 198 | 199 | - 一种方法是:基于向所有可能的下一个符号值添加非零概率质量 200 | - 另一种方法是:包含了高阶和低阶的 `n-gram`模型的混合模型。其中高阶模型提供更大的容量,而低阶模型尽可能避免零计数 201 | 202 | 3. 经典的 `n-gram` 模型特别容易引起维数灾难 203 | 204 | - 因为字典大小 $|\mathbb V|$ 通常很大,导致 $|\mathbb V|^n$ 非常大 205 | - 即使有大量的训练数据和适当的 $n$ ,大多数 `n-gram` 也不会出现在训练集中 206 | - 任何不同的两个词在`one-hot`向量空间中的距离彼此相同,因此难以利用来自任意“邻居”的信息 207 | - 只有重复上下文的训练样本对于局部泛化才起作用 208 | 209 | ### 4.1 神经语言模型 210 | 211 | 1. 神经语言模型`Neural language Model:NLM` 使用词的分布式表达来对自然语言序列建模 212 | - 它克服了维数灾难 213 | - NLM 能够识别两个相似的词,并且将不同的词给予不同的编码 214 | 2. 词的分布式表达也称作词嵌入 `word embedding` 215 | - 原始空间中,每个词由一个 one-hot 向量表示,每对词之间的欧氏距离都是 $\sqrt 2$ 216 | - 在嵌入空间中,它的维数较低。经常出现类似上下文的词汇彼此接近,这通常导致相似含义的词变得临近 217 | 3. 使用分布式表达来改进自然语言处理模型的思想不必局限于神经网络。还可以应用于图模型,其中分布式表达是多个隐变量的形式。 218 | 219 | #### 4.1.1 高维输出 220 | 221 | 1. 通常我们希望模型产生词而不是字符作为基本的输出单位。对于大的词汇表,由于词汇量很大,则表示输出分布的计算成本可能非常高 222 | 223 | - 假设 $\mathbb V$ 包含数十万单词。假设隐层到输出空间为一个仿射变换加一个 `softmax` 函数。 224 | 225 | - 假设输出维数为 $|\mathbb V|$ ,则描述仿射变换的权重矩阵非常庞大,这造成了该矩阵的存储成本太高 226 | 227 | - 因为`softmax`需要在所有 $|\mathbb V|$ 输出之间归一化,导致在训练和推断时,计算成本太高 228 | 229 | - 如果使用输出层的交叉熵作为损失函数,则计算损失函数的梯度时,计算量也非常庞大 230 | 231 | - 令 $\mathbf{\vec h}$ 为输出的顶部隐层; $\mathbf W,\mathbf{\vec b}$ 为仿射变换的参数; $\hat{\mathbf{\vec y}}$ 为 `softmax` 的输出 232 | $$ 233 | a_i=b_i+\sum_j W_{ij}h_j \quad \forall i \in \{1,2,...,|\mathbb V|\} 234 | $$ 235 | 236 | $$ 237 | \hat y_i=\frac{e^{a_i}}{\sum_{k=1}^{|\mathbb V|}e^{a_k}} 238 | $$ 239 | 240 | > 假设 $\mathbf{\vec h}$ 包含 $n_h$ 个元素,则上述操作复杂度为 $O(|\mathbb V|n_h)$ 。当 $n_h$ 为数千, $|\mathbb V|$ 为数十万时,该操作在所有计算量中占主导 241 | 242 | 2. 可以将词汇表 $\mathbb V$ 划分为两个部分:最常见词汇的短列表 $\mathbb L$ (由神经网络处理),以及由稀有词汇的尾列表 $\mathbb T=\mathbb V-\mathbb L$ (由 `n-gram`模型处理) 243 | 244 | - 为了组合这两个预测,神经网络必须预测在上下文 $C$ 之后,出现的词位于尾列表的概率 245 | 246 | - 我们可以添加额外的 `sigmoid`输出单元来估计 $P(i\in \mathbb T\mid C)$ 来实现这个预测; 247 | $$ 248 | P(y=i\mid C)=1_{i \in \mathbb L}P(y=i\mid C,i\in \mathbb L)(1-P(i\in \mathbb T\mid C))\\ 249 | +1_{i\in \mathbb T} P(y=i\mid C,i\in \mathbb T)P(i\in \mathbb T\mid C) 250 | $$ 251 | 这里: 252 | 253 | - $1_{i\in \mathbf L}$ 表示 $i\in \mathbb L $ 时,取值为 1;否则取值为 0 254 | - $P(y=i\mid C,i\in \mathbb L)$ 由神经语言模型提供 255 | - $ P(y=i\mid C,i\in \mathbb T)$ 由 `n-gram` 模型提供 256 | 257 | - 短列表方法的一个明显缺点是:神经语言模型的潜在泛化优势仅限于最常用的词,但是这没有什么用处 258 | 259 | 3. 减少大词汇表 $\mathbb V$ 上高维输出层计算负担的经典方法是:分层分解概率,使得 $|\mathbb V|$ 可以降低到 $\log |\mathbb V|$ 260 | 261 | - 我们可以认为这种层次结构是:先建立词的类别,然后是词类别的类别,然后是词类别的类别的类别.... 262 | - 这些层次结构组成了一颗树,其叶子为词。选择一个词的概率是由路径上每个节点通向该词分支概率的乘积给出 263 | - 如果是平衡树,则树的深度为 $\log|\mathbb V|$ 264 | - 我们为这些模型提供与输入相同的上下文 $C$ ,我们需要给出树的每个节点的条件概率 265 | - 因为正确的输出编码在训练集中,我们可以使用监督学习训练 LR 模型 266 | - 我们通常使用交叉熵作为损失函数,这对应于最大化正确序列的对数似然 267 | - 优化树结构的最小期望是可能的,但是通常是不切实际的。给定词的相对频率,信息论工具可以指定如何选择最佳的二进制编码,因此我们可以这样构造树:使得词相关联的比特位的数量近似等于该词频率的对数。 268 | - 但是实践中,节省计算通常得不偿失,因为输出概率的计算仅仅是神经语言模型总计算的一部分 269 | - 假设有 $l$ 个全连接的宽度为 $n_h$ 的隐层。令 $n_b$ 为识别一个词所需比特位的加权平均值,其加权由这些词的频率给出 270 | - 此时,隐层激活所需的操作数为 $O(n_h^2l)$ ;输出所需的操作数为 $O(n_hn_b)$ 。事实上词汇表大小很少超过一百万,我们可以将 $n_b$ 设置为大约20;但是 $n_h$ 通常要大得多,约为 1000 或者更大 271 | - 如何定义词的层次结构是个未决的问题。一个方法是学习层次结构,但是由于它是离散的,不适用于梯度优化 272 | - 即使采用分层`softmax`,计算所有 $|\mathbb V|$ 个词的概率的计算成本仍然很高。另外分层`softmax`效果比基于采样的方法要差 273 | 274 | 4. 分层的示例如下: 275 | 276 | - 叶子节点表示实际上特定的词,内部节点表示词的组别 277 | 278 | - 任何节点都可以通过二值决策序列 (0=左,1=右) 来索引,从根到达节点 279 | 280 | - $w_4$ 的概率可以如下分解: 281 | $$ 282 | P(y=w_4)=P(b_0=1,b_1=0,b_2=0)\\ 283 | =P(b_0=1)P(b_1=0\mid b_0=1)P(b_2=0\mid b_0=1,b_1=0) 284 | $$ 285 | ​ 286 | 287 | ![nlp_tree](../imgs/12/nlp_tree.png) 288 | 289 | 5. 加速神经语言模型训练的一种方式是:避免计算所有未出现在下一个位置的词对于梯度的贡献 290 | 291 | - 每个不正确的词在此模型下具有较低的概率。枚举所有这些词的计算成本可能会非常高 292 | 293 | - 相反,我们可以仅采样词的子集 294 | 295 | - 根据: 296 | $$ 297 | a_i=b_i+\sum_j W_{ij}h_j \quad \forall i \in \{1,2,...,|\mathbb V|\} 298 | $$ 299 | 300 | $$ 301 | \hat y_i=\frac{e^{a_i}}{\sum_{k=1}^{|\mathbb V|}e^{a_k}} 302 | $$ 303 | 304 | 梯度写作: 305 | $$ 306 | \frac{\log P(y\mid C)}{\partial \theta}=\frac{\partial \log \text{softmax}_y(\mathbf{\vec a})}{\partial \theta}\\ 307 | =\frac{\partial}{\partial \theta}\log \frac{e^{a_y}}{\sum_i e^{a_i}}\\ 308 | =\frac {\partial}{\partial\theta}(a_y-\log\sum_i e^{a_i})\\ 309 | =\frac{\partial a_y}{\partial \theta}-\sum_i P(y=i\mid C)\frac{\partial a_i}{\partial \theta} 310 | $$ 311 | 312 | - 其中 $\mathbf{\vec a}$ 是激活向量(或者称作得分向量),每个词对应一个元素。 313 | - 梯度的第一项是正相`positive phase`项,推动 $a_y$ 向上;第二项是负相`negative phase`,对于所有$i$ 以权重 $P(i\mid C)$ 推动 $a_i$ 向下 314 | - 第二项是期望值,因此我们可以通过蒙特卡洛采样估计。但是它需要从模型本身采样:对词汇表中所有的 $i$ ,计算 $P(i\mid C)$ ,而这正是我们待求的。 315 | 316 | - 我们可以从另一个分布中采样,而不是从模型中采样,这称作建议分布`proposal distribution`(记做 $q$ ) ,然后通过适当的权重校正从错误分布采样引入的偏差。这种方式称作:重要采样`Importance Sampling` 317 | 318 | - 即使是精确重要采样也不一定有效,因为我们需要计算权重 $\frac {p_i}{q_i}$ ,其中的 $p_i=P(i\mid C)$ 只能在计算所有得分 $a_i $ 后才能计算 319 | 320 | ### 4.2 结合 n-gram 和神经语言模型 321 | 322 | 1. `n-gram ` 模型的主要优点是:具有更高的模型容量,并且处理样本只需要非常少的计算量。 323 | 2. 增加模型容量的一种简单方法是:通过集成方法,将两者结合起来 324 | 325 | ### 4.3 神经机器翻译 326 | 327 | 1. 一个简单的方式是:给定源语言中的短语 $s_1,s_2,\cdots,s_k$ ,使用 MLP 对目标语言的短语 $t_1,t_2,\cdots t_k$ 进行评分 328 | 329 | - MLP 估计 $P(t_1,t_2,\cdots,t_k\mid s_1,s_2,\cdots,s_k)$ 330 | - 这种方式的缺点是:需要将序列预处理为固定长度 331 | 332 | 2. 另一种方式是:采用 RNN 循环神经网络: 333 | 334 | - 一个模型(可以是 RNN 或者 CNN)首先读取输入序列,并产生概括了输入的数据结构(称作上下文 $C$ ) 335 | 336 | - 另一个模型(通常是 RNN)读取上下文 $C$ 并生成目标语言的句子 337 | 338 | ![translate](../imgs/12/translate.png) 339 | 340 | 3. 使用固定大小的表达来概括非常长的句子的所有语义细节是非常困难的,这需要足够大的 RNN,以及足够长的时间训练 341 | 342 | - 更高效的方式是:先读取整个句子或者段落(以获得正在表达的上下文和焦点),然后一次翻译一个词。每次聚焦于输入句子的不同部分来收集产生下一个输出词所需的语义细节。这称作注意力机制 343 | 344 | - 注意力机制的系统有三个组件: 345 | 346 | - 读取器读取原始数据(如源语句中的源词),并将其转换为分布式表达,其中一个特征向量与每个词的位置相关联 347 | - 存储器存储读取器输出的特征向量列表 348 | - 最后一个程序利用存储器的内容顺序执行任务(如生成翻译语句),每个时间步聚焦于某个存储器元素的内容(或者几个,具有不同权重) 349 | 350 | - 下图为示意图。注意力机制本质是加权平均。注意力机制对具有权重 $\alpha ^{(t)}$ 的特征向量 $\mathbf{\vec h}^{(t)}$ 进行加权平均形成上下文向量 $\mathbf{\vec c }$ 351 | 352 | - 权重 $\alpha ^{(t)}$ 是由模型本身产生的,它们通常是区间 [0,1] 之间的值 353 | 354 | ![attention](../imgs/12/attention.png) 355 | 356 | ##5. 其他应用 357 | 358 | ### 5.1 推荐系统 359 | 360 | 1. 早期的推荐系统依赖于最少数量的信息:用户 ID 和商品 ID,通常基于协同过滤算法。 361 | 362 | 2. 我们也可以基于参数方法:为每个用户和每个商品学习其嵌入表达(类似于 word2vec) 363 | 364 | - 令 $\hat {\mathbf R}$ 是包含我们预测的矩阵, $\mathbf A$ 矩阵行中是用户嵌入; $\mathbf B$ 矩阵列中是项目嵌入。令 $\mathbf {\vec b}$ 和 $\mathbf{\vec c}$ 分别包含针对每个用户(表示用户的喜好偏好)以及每个商品(表示商品的受欢迎程度)的偏置向量,则有: 365 | $$ 366 | \hat R_{u,i}=b_u+c_i+\sum_j A_{u,j}B_{j,i} 367 | $$ 368 | 369 | - 通常我们希望最小化预测评级 $\hat R_{u,i}$ 和实际评级 $R_{u,i}$ 之间的平方误差 370 | 371 | - 获得这些嵌入表达的一种方式是:对实际的评价矩阵 $\mathbf R$ 进行奇异值分解: $\mathbf R=\mathbf U\mathbf D\mathbf V$ 372 | 373 | - 其中 $\mathbf A=\mathbf U\mathbf D$,而 $\mathbf B=\mathbf V $ 374 | - 其问题是:对于缺失项,其输出为 0. 375 | 376 | - 我们也可以基于评级的平方误差总和的梯度来进行优化 377 | 378 | 3. 协同过滤的一个基本限制是:冷启动问题。当引入新项目或者新用户时,缺乏评级历史。 379 | 380 | - 解决的一般方式是:引入用户或者商品的额外信息。这称作基于内容的推荐系统 381 | - 这些额外的信息可以采用专用的深度学习架构来提取 382 | 383 | 4. 当向用户推荐时,会产生超出了普通监督学习范围的问题,并进入强化学习的领域 384 | 385 | - 推荐系统的一个问题时:当我们使用推荐系统,并且收集推荐结果数据时,得到的是一个有偏的、不完整的用户偏好 386 | - 我们只能看到用户对推荐给他们相互的反应 387 | - 我们无法获得那些未向用户推荐的商品的反应。我们不知道推荐这些商品会有什么结果 388 | - 这种情况类似于强化学习:仅仅观察到所选动作的奖励 389 | 390 | ### 5.2 知识表达、推理、问答 391 | 392 | 1. 词嵌入表达给出了关于单个词或者概念的语义知识。 393 | 394 | 2. 一个有趣的研究方向是:如何训练分布式表达才能捕获两个实体之间的关系 395 | 396 | - 数学上,二元关系是一组有序的二元对(如集合上定义的小于关系) 397 | - 在 AI 上,我们定义关系为:句法上简单、且高度结构化的语言。关系起到了动词的作用,关系的两个参数发挥着主体和客体的作用: `(subject,verb,object)` 398 | - 我们也可以定义属性,类似于关系的概念: $(\text{entity}_i,\text{attribute}_j)$ 399 | 400 | 3. 许多应用需要关系和推理,而神经网络可以通过训练数据来发掘关系和完成推理 401 | 402 | - 实体和关系的表示可以将知识库中的每个三元组作为训练样本来学习,并最大化捕获它们的联合分布作为训练目标 403 | - 除了训练数据,还需要定义训练模型的模型族: 404 | - 一种常见方法是:将神经语言模型扩展到模型实体和关系。神经语言模型学习提供每个词分布式表达的向量,还通过学习这些向量的函数来学习词之间的相互作用(如哪些词可能出现在另一些词的后面) 405 | 406 | 4. 这种模型的实际短期应用是链接预测:预测知识图谱中缺失的弧。这是基于已有的知识推广新知识的一种形式 407 | 408 | - 我们很难评估其性能,因为我们的数据集只有正样本(已知是真实的事实)。如果模型挖掘了不在数据集中的事实,我们不确定模型是犯了错误还是发现了一个新的、以前未知的事实 409 | 410 | 5. 知识库和分布式表达的另一个应用是:词义消歧 411 | 412 | 6. 知识关系结合一个推理过程以及对自然语言的理解可以建立一个一般的问答系统 413 | 414 | - 目前这是一个困难的领域,只能在受限的“玩具”环境下解决 415 | 416 | ​ -------------------------------------------------------------------------------- /chapters/1_introduction.md: -------------------------------------------------------------------------------- 1 | # 章 1 2 | 3 | 4 | ## 一、 介绍 5 | 6 | ### 1. representation 7 | 8 | 1. 深度学习:计算机从经验中学习,以层次化的概念(`concept`)理解世界。 9 | - 从经验中学习避免了人类操作者需要指定计算机学习所需的所有知识 10 | - 层次化的概念运行计算机通过从更简单的概念来构建学习更复杂的概念 11 | 12 | 如果我们绘制一张图来显示这些概念的关系,那么这张图是一个深度的层次结构。因此我们称这种方法为深度学习。 13 | 14 | 2. 一个人的日常生活需要大量的关于世界的知识,这些知识大部分是主观的和直观的,因此很难以正式的方式表达。计算机需要获取同样的知识才能以人工智能的方式行动。关键在于:如何将这些知识带给计算机。 15 | - 一种方式是知识库(`knowledge base`):通过形式化语言硬编码关于真实世界的知识。计算机使用逻辑推理规则地自动推理这些形式化语言中的语句。最出名的项目是`Cyc`,但是这些项目都没有取得重大成功。 16 | - 一种方式为机器学习:AI系统通过从原始数据中提取模式来获得自己的知识的能力。它让计算机解决涉及真实世界知识的问题,并作出看起来主观的决策。如通过朴素贝叶斯算法分离正常的电子邮件和垃圾邮件。 17 | 18 | 3. 传统的机器学习算法的性能严重依赖于数据的表述方式(`representation`)。如对病人的诊断中,`AI`系统并不是直接接触病人,而是由医生告诉`AI`系统关于病人的一些信息(如身高、体重等)。这些信息称作特征(`feature`)。 19 | - 传统的机器学习算法无法确定特征的种类和方式(如是直接给身高和体重,还是给出肥胖系数) 20 | - 某些信息,比如给出一份核磁共振的影像,传统的机器学习算法无法学习。核磁共振影像中,每一个像素点与诊断结果相关性非常微小。 21 | 22 | 这种对`representation`的依赖是计算机科学甚至生活中的一般现象。例如人们很容易对阿拉伯数字进行算术运算,但是对于罗马数字的算术运算更费时间。下图是给出了一个线性分类任务。图中:左图我们采用笛卡尔坐标系,右图我们采用极坐标系。可以看到数据的不同表示(坐标系的不同)导致左图无法线性分类,右图可以轻松线性分类(用一根竖线分类) 23 | ![representation](../imgs/1/representation.PNG) 24 | 25 | 4. 在传统的机器学习应用中,我们通常针对特定的任务来设计一套专用的、有效的特征集,然后我们采集这些特征描述下的数据。比如语音识别中, 一个有效的特征就是讲话者的声音的声道(`vocal tract`)。但是大多数任务中,我们很难给出有效的特征是哪些。比如从图片中检查汽车:我们可能想使用是否有轮子作为一个特征。但是很不幸:我们很难根据像素点来准确描述轮子。因此可能由于阴影、光照条件、观察角度等导致轮子的像素集合非常复杂。 26 | 27 | 该问题的一个解决方案是:通过机器学习来发现`representation`。即我们不仅学习`representation`到输出的映射(即模型),我们也学习`representation`本身。这称作表达学习(`reprensentation learning`) 28 | 29 | 使用`reprensentation learning`的优点: 30 | - 往往比人为设计的`reprensentation`的性能要好得多 31 | - 允许`AI`系统快速适应新任务,用最少的人工干预 32 | - 对于简单任务它可以在几分钟内学到一组好的特征;对于复杂任务可以在几小时到几个月的时间内学到一组好的特征。而对于复杂任务,人工设计`reprensentation`需要消耗大量的人力和时间。 33 | 34 | 5. `reprensentation learning`经典的案例就是`autoencoder`。`autoencoder`包含了编码器和解码器: 35 | - 编码器`encoder`:将输入数据转换成不同的`reprensentation` 36 | - 解码器`decoder`:将`reprensentation`转换成原始的格式 37 | 38 | `autoencoder`要求: 39 | - 输入数据在通过编码器解码器之后,尽量不丢失信息(保留尽可能多的信息) 40 | - `reprensentation`要具有各种不同的、良好的属性 41 | 42 | 6. 在设计特征或者特征学习时,我们的目标是:把解释观察数据的那些变化因子(`factors of variation`)分隔。通常这些因子`factor`不是直接观察到的量,而是影响那些能够直接观察到的量。如语音识别中,变化因子就是:讲话者的年龄、性别、口音、讲话的单词等。在汽车相关的图片识别中,变化因子就是:汽车的位置、汽车的颜色、观察角度等。 43 | 44 | - 但是有个问题是:大多数因子仅仅影响我们观察到的数据的某个部分。如观察角度不同,则汽车轮廓的形状也不同。大多数应用中,我们需要解耦这些变化因子,然后丢弃其中我们不关心的因子。 45 | - 另外,从原始数据中提取某些高级的、抽象的特征可能非常困难。如说话者的口音只能用接近人类的、抽象的概念来表达。这样使得提取这种特征几乎和解决原始问题一样难。 46 | 47 | 7. 深度学习在`reprensentation learning`中采用的解决方案是:`representaions`以更简单的`representations`来表示。因此深度学习通过组合简单的概念(`concept`)来构建复杂的概念。如下所示的图片识别任务中,如果直接学习从一组像素到物体的映射是困难的,深度学习通过将所需的复杂映射分解成一系列嵌套的简单映射来解决该问题。每个映射由模型的不同层来描述: 48 | - 可见层为输入,因为它包含了我们能够观察到的变量 49 | - 第一层隐层描述了边(`edge`)的概念:通过比较相邻像素的亮度,则容易地识别边缘 50 | - 第二层隐层描述了角(`corner`)和轮廓(`contour`)的概念:通过识别边的集合 51 | - 第三层隐层描述了特定物体整体(如:人物)的概念(物体由特定的角/等高线集合组成):通过识别轮廓和角的特点集合。 52 | > 隐层称为“隐”,因为它们的值不在数据中给出,而是由模型确定哪些概念`concept`可以用于解释观察数据中的关系 53 | 54 | ![concepts](../imgs/1/concepts.PNG) 55 | 56 | 8. 深度学习的一个经典案例是多层感知机(`multilayer perceptron:MLP`)。一个多层感知机就是一个函数:它将一组输入值映射到输出值。而这个函数由许多更简单的函数组成。我们认为:每个函数都给出了输入的一个新的`representation`。因此它给出了深度学习的一个视角:深度学习就是学习数据的正确`representaion`。 57 | 58 | 深度学习的另一个观点是:深度学习允许计算机学习多步计算程序: 59 | - 每一层的`representaion`被认为是在并行执行一组指令之后,计算机的存储器的状态 60 | - 更深层的网络可以按顺序地执行更多的指令 61 | - 顺序的指令功能强大,因为序列后面的指令可以参考序列前期指令的结果 62 | 63 | 根据这种观点,每一层中,并非所有的信息都对应了输入数据的变化因子的编码,`representaion`还存储了有助于程序执行的状态信息。这种状态信息类似于传统计算机程序中的计数器或者指针,它与输入的内容无关,但是有助于模型的组织处理过程。 64 | 65 | ### 2. 深度 66 | 1. 深度学习的“深度”有两种度量方式: 67 | - 第一种度量方式为:框架中必须执行的顺序指令的数量。我们可以视作为通过流程图的最长路径的长度,该流程图描述了如何根据输入来计算模型的输出。 68 | 69 | 提供不同的函数单元,同一个模型可能具有不同的深度。下图给出的是`logistic regression`模型的深度。其中输出 \\(\hat y=\sigma(\mathbf{\vec w}^{T}\mathbf{\vec x})\\), \\(\sigma=\frac{1}{1+\exp(-x)}\\) 为`sigmoid`函数。 70 | - 左图中:我们将加法、乘法、`sigmoid`函数作为基本运算单元,则模型深度为 3 71 | - 右图中:我们将`logistic regression`模型本身作为基本运算单元,则模型深度为 1 72 | ![depth](../imgs/1/depth.PNG) 73 | 74 | - 另一种度量方式为:概念`concept`图的深度。此时,计算概念图的流程图的深度可能远远大于概念图本身。因为如果给定了复杂概念,则简单的概念可以得到更好的理解。如:一个面部识别应用中,如果一只眼睛在阴影中,那么`AI`最初只能看到一只眼睛。在检测到面部的存在后,`AI`可以推断出第二只眼睛很可能存在。在这个例子中,概念图只有两层:眼睛为一层;面部为第二层。但是计算概念图的流程图可能为 `2n`层,其中`n`为我们对每个概念进行改进的次数。 75 | 76 | 对于模型的深度,并没有一个正确的值,也没有说哪种度量方式是合适的。究竟模型的深度值为多少才能称作“深”,也没有标准答案。通常深度学习被认为是涉及大量的概念`concept`的模型的学习。 77 | 78 | ### 3. 深度学习与 AI 79 | 1. `deep learning`是机器学习的一种。 80 | - 它是构建可以在复杂的、真实世界环境中操作的`AI`系统的唯一可行的方法。 81 | - 它是一种特定类型的机器学习,通过学习将世界表示为层次化嵌套的概念。每个概念都定义为更简单的概念,更抽象的`representation`由不那么抽象的`representation`来计算。 82 | 83 | 下图给出了深度学习的隶属关系:深度学习 < `representation learning` < 机器学习 < 人工智能`AI` 84 | ![venn_diagram](../imgs/1/venn_diagram.PNG) 85 | 86 | 下图给出了不同`AI`系统中,不同部分的关联。阴影方框表示从数据中学习获得的部分。 87 | ![AI_system](../imgs/1/AI_system.PNG) 88 | 89 | 90 | ## 二、历史 91 | 92 | ### 1. 历史简介 93 | 94 | 1. 深度学习的一些关键趋势: 95 | - 深度学习历史悠久,兴衰交替。深度学习在历史上有不同的名字,这些名字反映了不同的哲学观点。 96 | - 随着可用的训练数据量的增加,深度学习越来越有效 97 | - 深度学习模型随着计算基础设施(硬件和软件)的发展而不断改善 98 | - 深度学习以一个跨越式的精度解决了许多复杂的问题 99 | 100 | 2. 深度学习分为三个时期: 101 | - `1940s-1960s`:这时它被称作控制论`cybernetics` 102 | - `1980s-1990s`:这时它被称作连接机制`connectionism` 103 | - `2006--`:这时被称作`deep learning` 104 | 105 | 下图展示了神经网络研究的三个历史浪潮中的两个(因为第三波太近了)。第一波随着生物学习理论的发展和第一个模型的出现(如感知机神经元);第二波用反向传播训练一层或者两层隐层神经网络。 106 | ![history](../imgs/1/history.PNG) 107 | 108 | 3. 早期的人工智能算法的意图是模拟生物的学习过程:对大脑的学习过程建模。此时的深度学习被称作人工神经网络`artificial neural networks:ANNs`,深度学习模型被认为是受生物大脑启发的工程系统。 而现代的深度学习超越了神经科学的观点,它是一种多层次学习的、通用的机器学习框架啊,而不必是从神经科学中获取灵感。 109 | 110 | 4. 早期的深度学习研究的是线性模型:给定 \\(n\\) 个输入 \\(x_1,x_2,\cdots,x_n\\) 和对应的输出 \\(y\\) ,学习权重 \\(w_1,w_2,\cdots,w_n\\) ,来计算输出 \\(f(\mathbf {\vec x} ,\mathbf{\vec w})=x_1w_1+\cdots+x_nw_n\\) 111 | - 线性模型可以用于识别二类分类问题。根据 \\(f(\mathbf {\vec x} ,\mathbf{\vec w})\\) 是正数还是负数来判别。这就是感知机 `perceptron`出现的历史。 112 | - 线性模型有个著名的缺陷:它无法学习`XOR`函数。这导致了神经网络的第一次衰落。 `XOR`函数 \\(f\\) 要求: 113 | $$f([0,1],\mathbf{\vec w})=1\\\ 114 | f([1,0],\mathbf{\vec w})=1\\\ 115 | f([1,1],\mathbf{\vec w})=0\\\ 116 | f([0,0],\mathbf{\vec w})=0$$ 117 | 如果 \\(f\\) 为线性的,则 \\(\mathbf{\vec w}\\) 无解 118 | 119 | 5. 第二波浪潮:连接机制的中心思想是:大量简单的计算单元在连接时可以实现智能行为。这种观点适用于生物神经系统中的神经元,以及深度网络模型中的隐层神经元。 120 | 121 | 在连接机制期间,有一些核心思想仍然影响了后续的神经网络: 122 | - 分布式表达`distributed representation`:系统的每个输入应该由许多特征表示,每个特征描述了输入的一个部分。如一个视觉识别系统可以识别:汽车、卡车、鸟;这些对象可以为红色、蓝色、绿色。表达这些输入的一种方式为:9个神经元分别表示红色卡车、红色汽车、红色鸟、绿色汽车...等等。如果使用分布式表达,则使用6个神经元:3个神经元来表示卡车、汽车、鸟;3个神经元来表示红色、绿色、蓝色。 123 | - 逆向传播算法`back-propagation`。它是当前主要的训练深度模型的算法。 124 | - `long short-term memory:LSTM`网络:它是一种序列模型,解决了许多自然语言处理任务。 125 | 126 | 6. 第三波浪潮从2006年开始突破。`Geoffrey Hinton `给出了一种称作深度信念网络(`deep belief network`),该网络可以使用 `greedy layer-wise pre-training`策略来有效地训练。 127 | 128 | ### 2. 目前状况 129 | 1. 深度学习的成功的关键有两个: 130 | - 训练集大小的增长 131 | - 硬件和软件的发展。包括更快的 `CPU`、通用的`GUP`发展、更大内存、更快的网络连接、更好的软件基础 132 | 133 | 2. 训练集大小:早期的深度学习需要一些技能才能从算法中获得良好的性能。随着训练数据量的增加,所需的技能在降低。 134 | - 截止2016年,一个粗略的经验法则是:在深度学习的监督学习中,要想获取可接受的性能,那么每个分类集合需要大约5000个标记样本;要想匹配甚至超越人类的性能,则训练集至少包含 1000 万个标记样本。 135 | - 对于小于这个数量的数据集,如何获取良好的性能是个重要的研究领域。尤其关注如何使用未标记样本(通过无监督学习或者半监督学习)。 136 | 137 | 下图显示了`benchmark`数据集大小随时间的变化。这种变化趋势是由于整个社会的数字化的推动。 138 | - 20 世纪初,统计学家使用数百或者数千的手工编制的数据来研究 139 | - 20世纪50年代到80年代,从生物大脑获取灵感的机器学习先驱采用较小的、合成的数据集。如低分辨率的位图的字母。从而证明神经网络能够完成特定任务 140 | - 20世纪80年代到90年代,机器学习本质上更具有统计性。人们开始利用包含成千上万个例子的大数据集,如`MNIST`数据集 141 | - 21世纪前十年,继续产生了同样大小的更复杂的数据集,如`CIFAR-10`数据集 142 | - 2010年以来,更大的数据集包含了数十万到数千万的样本,深刻地改变了深度学习的可行性。 143 | ![dataset_size](../imgs/1/dataset_size.PNG) 144 | 145 | 3. 神经网络最近成功的另一个关键原因是:我们有充足的计算资源来运行更大的模型。连接主义的主要观点是:单个神经元或者少量的神经元集合没什么用处,只有许多神经元一起工作才产生智能。更大的模型有两层含义: 146 | - 单个神经元的连接数量更多 147 | - 模型的神经元的数量更大 148 | 149 | 4. 生物的神经元的连接并不是非常密集,下图给出了一些动物和人的大脑中,每个神经元的连接数量。早期人工神经网络神经元之间的连接数受到硬件能力的限制。今天神经元之间的连接数量多数出于设计考虑。目前一些人工神经网络的单个神经元的连接数量已经和猫相同。 150 | 151 | ![con_per_neurons](../imgs/1/con_per_neurons.PNG) 152 | 153 | 5. 在神经元总量上,早期的神经网络非常的小。直到最近才有较强的改观。自从引入了隐层以来,人工神经网络的大小大约每隔 2.4年翻一番。这种增长是由更大内存、更快的计算机(更快的`CPU`、通用`GPU`的出现、更快的网络连接、更好的软件基础)和更大的数据集来驱动的。更大的神经网络能够在更复杂的任务上实现更高的精度。按照目前的趋势,大约2050年,人工神经网络将具有与人类大脑相同数量的神经元。但是生物神经元可能拥有比人工神经元更复杂的功能。 154 | 155 | ![num_neurons](../imgs/1/num_neurons.PNG) 156 | 157 | ### 3. 取得成绩 158 | 1. 早期的深度模型用于识别紧凑裁剪的图像中的单个物体,且只能识别两种对象(或者说,某个对象存在与否)。现在的深度网络在每年举行的`ImageNet`大规模视觉识别挑战赛`ImageNet Large Scale Visual Recognition Challenge :ILSVRC`中异军突起。在2012年,卷积神经网络首次将`state-of-the art top-5 error`从 26.1% 下降到 15.3%。此后卷积神经网络不断进步,将该错误率下降到 3.6%。 159 | > `state-of-the art top-5 error`:为每个图像产生可能类别的排名列表,该错误率表征的是:正确的分类位于排名前5个类别之外 160 | 161 | ![error_rate](../imgs/1/error_rate.PNG) 162 | 163 | 2. 其他成就: 164 | - 20世纪90年代之后,语音识别的错误率一直在改进,直到2000年开始停滞。深度学习的引入使得语音识别的错误率突然下降。 165 | - 深度学习在行人检测、图像分割、交通标志分类方面取得了惊人的成功 166 | - `Goodfellow`等人表明神经网络能够从图像中学习并输出一个字符序列,而不仅仅是识别单个对象。循环神经网络`Recurrent neural network`,如`LSTM`序列模型可以用于对序列和序列之间的关系建模(而不仅仅是固定的输入)。这种序列到序列的学习将带来机器翻译领域的革命性变化。 167 | - 深度学习的另一个成就是它扩展到强化学习的领域。`DeepMind`公司表明,基于深度学习的强化学习系统能够学习`Atari`视频游戏,在许多任务上达到人类的表现。 -------------------------------------------------------------------------------- /chapters/2_linear_algebra.md: -------------------------------------------------------------------------------- 1 | # 章2 线性代数 2 | 3 | ## 一、基本知识 4 | 1. 本书中所有的向量都是列向量的形式: 5 | $$ 6 | \mathbf{\vec x}=\begin{bmatrix}x_1\\\x_2\\\ 7 | \vdots \\\x_n\end{bmatrix} 8 | $$ 9 | 10 | 2. 矩阵的`F`范数:设 \\(\mathbf A=(a\_{i,j})\_{m\times n}\\) 11 | $$||\mathbf A||_F=\sqrt{\sum\_{i,j}a\_{i,j}^{2}} $$ 12 | 它是向量的 \\(L_2\\) 范数的推广。 13 | 14 | 3. 矩阵的迹 \\(tr(\mathbf A)=\sum\_{i}a\_{i,i}\\)。其性质有: 15 | - \\(||\mathbf A||_F=\sqrt{tr(\mathbf A \mathbf A^{T})}\\) 16 | - \\(tr(\mathbf A)=tr(\mathbf A^{T})\\) 17 | - 假设 \\(\mathbf A\in \mathbb R^{m\times n},\mathbf B\in \mathbb R^{n\times m}\\),则有: 18 | $$tr(\mathbf A\mathbf B)=tr(\mathbf B\mathbf A) $$ 19 | - \\(tr(\mathbf A\mathbf B\mathbf C)=tr(\mathbf C\mathbf A\mathbf B)=tr(\mathbf B\mathbf C\mathbf A)\\) 20 | 21 | ## 二、向量操作 22 | 23 | 1. 一组向量 \\(\mathbf{\vec v}\_1,\mathbf{\vec v}\_2,\cdots,\mathbf{\vec v}\_n\\) 是线性相关的:指存在一组不全为零的实数 \\(a_1,a_2,\cdots,a_n\\),使得: 24 | $$\sum\_{i=1}^{n}a_i\mathbf{\vec v}\_i=\mathbf{\vec 0} $$ 25 | 26 | 一组向量 \\(\mathbf{\vec v}\_1,\mathbf{\vec v}\_2,\cdots,\mathbf{\vec v}\_n\\) 是线性无关的,当且仅当 \\(a_i=0,i=1,2,\cdots,n\\) 时,才有 27 | $$\sum\_{i=1}^{n}a_i\mathbf{\vec v}\_i=\mathbf{\vec 0} $$ 28 | 29 | 2. 一个向量空间所包含的最大线性无关向量的数目,称作该向量空间的维数。 30 | 3. 三维向量的点积: 31 | $$\mathbf{\vec u}\cdot\mathbf{\vec v} =u \_xv\_x+u\_yv\_y+u\_zv\_z = |\mathbf{\vec u}| | \mathbf{\vec v}| \cos(\mathbf{\vec u},\mathbf{\vec v})$$ 32 | ![dot](../imgs/2/dot.PNG) 33 | 34 | 4. 三维向量的叉积: 35 | $$ \mathbf{\vec w}=\mathbf{\vec u}\times \mathbf{\vec v}=\begin{bmatrix}\mathbf{\vec i}& \mathbf{\vec j}&\mathbf{\vec k}\\\ 36 | u_x&u_y&u_z\\\ 37 | v_x&v_y&v_z\\\ 38 | \end{bmatrix}$$ 39 | 其中 \\(\mathbf{\vec i}, \mathbf{\vec j},\mathbf{\vec k}\\) 分别为 \\(x,y,z\\) 轴的单位向量。 40 | \\(\mathbf{\vec u}=u_x\mathbf{\vec i}+u_y\mathbf{\vec j}+u_z\mathbf{\vec k},\quad \mathbf{\vec v}=v_x\mathbf{\vec i}+v_y\mathbf{\vec j}+v_z\mathbf{\vec k}\\) 41 | - \\(\mathbf{\vec u} \\) 和 \\(\mathbf{\vec v}\\) 的叉积垂直于 \\(\mathbf{\vec u},\mathbf{\vec v}\\) 构成的平面,其方向符合右手规则。 42 | - 叉积的模等于 \\(\mathbf{\vec u},\mathbf{\vec v}\\) 构成的平行四边形的面积 43 | - \\(\mathbf{\vec u}\times \mathbf{\vec v}=-\mathbf{\vec v}\times \mathbf{\vec u}\\) 44 | - \\(\mathbf{\vec u}\times( \mathbf{\vec v} \times \mathbf{\vec w})=(\mathbf{\vec u}\cdot \mathbf{\vec w})\mathbf{\vec v}-(\mathbf{\vec u}\cdot \mathbf{\vec v})\mathbf{\vec w} \\) 45 | 46 | ![cross](../imgs/2/cross.PNG) 47 | 48 | 5. 三维向量的混合积: 49 | $$[\mathbf{\vec u} \;\mathbf{\vec v} \;\mathbf{\vec w}]=(\mathbf{\vec u}\times \mathbf{\vec v})\cdot \mathbf{\vec w}= \mathbf{\vec u}\cdot (\mathbf{\vec v} \times \mathbf{\vec w})\\\ 50 | =\begin{vmatrix} 51 | u_x&u_y&u_z\\\ 52 | v_x&v_y&v_z\\\ 53 | w_x&w_y&w_z 54 | \end{vmatrix} 55 | =\begin{vmatrix} 56 | u_x&v_x&w_x\\\ 57 | u_y&v_y&w_y\\\ 58 | u_z&v_z&w_z 59 | \end{vmatrix} $$ 60 | - 其物理意义为:以 \\(\mathbf{\vec u} ,\mathbf{\vec v} ,\mathbf{\vec w}\\) 为三个棱边所围成的平行六面体的体积。 当 \\(\mathbf{\vec u} ,\mathbf{\vec v} ,\mathbf{\vec w}\\) 构成右手系时,该平行六面体的体积为正号。 61 | 62 | 6. 两个向量的并矢:给定两个向量 \\(\mathbf {\vec x}=(x_1,x_2,\cdots,x_n)^{T}, \mathbf {\vec y}= (y_1,y_2,\cdots,y_m)^{T}\\) ,则向量的并矢记作: 63 | $$\mathbf {\vec x}\mathbf {\vec y} =\begin{bmatrix} 64 | x\_1y\_1&x\_1y\_2&\cdots&x\_1y\_m\\\ 65 | x\_2y\_1&x\_2y\_2&\cdots&x\_2y\_m\\\ 66 | \vdots&\vdots&\ddots&\vdots\\\ 67 | x\_ny\_1&x\_ny\_2&\cdots&x\_ny\_m\\\ 68 | \end{bmatrix}$$ 69 | 也记作 \\(\mathbf {\vec x}\otimes\mathbf {\vec y}\\) 或者 \\(\mathbf {\vec x} \mathbf {\vec y}^{T}\\) 70 | 71 | ## 三、矩阵运算 72 | 1. 给定两个矩阵 \\(\mathbf A=(a\_{i,j}) \in \mathbb R^{m\times n},\mathbf B=(b\_{i,j}) \in \mathbb R^{m\times n}\\) ,定义: 73 | - 阿达马积`Hadamard product`(又称作逐元素积): 74 | $$\mathbf A \circ \mathbf B =\begin{bmatrix} 75 | a\_{1,1}b\_{1,1}&a\_{1,2}b\_{1,2}&\cdots&a\_{1,n}b\_{1,n}\\\ 76 | a\_{2,1}b\_{2,1}&a\_{2,2}b\_{2,2}&\cdots&a\_{2,n}b\_{2,n}\\\ 77 | \vdots&\vdots&\ddots&\vdots\\\ 78 | a\_{m,1}b\_{m,1}&a\_{m,2}b\_{m,2}&\cdots&a\_{m,n}b\_{m,n} 79 | \end{bmatrix}$$ 80 | - 克罗内积`Kronnecker product`: 81 | $$\mathbf A \otimes \mathbf B =\begin{bmatrix} 82 | a\_{1,1}\mathbf B&a\_{1,2}\mathbf B&\cdots&a\_{1,n}\mathbf B\\\ 83 | a\_{2,1}\mathbf B&a\_{2,2}\mathbf B&\cdots&a\_{2,n}\mathbf B\\\ 84 | \vdots&\vdots&\ddots&\vdots\\\ 85 | a\_{m,1}\mathbf B&a\_{m,2}\mathbf B&\cdots&a\_{m,n}\mathbf B 86 | \end{bmatrix}$$ 87 | 88 | 2. 设 \\(\mathbf {\vec x},\mathbf {\vec a},\mathbf {\vec b},\mathbf {\vec c}\\) 为 \\(n\\) 阶向量, \\(\mathbf A,\mathbf B,\mathbf C,\mathbf X\\) 为 \\(n\\) 阶方阵,则: 89 | $$ 90 | \frac{\partial(\mathbf {\vec a}^{T}\mathbf {\vec x}) }{\partial \mathbf {\vec x} }=\frac{\partial(\mathbf {\vec x}^{T}\mathbf {\vec a}) }{\partial \mathbf {\vec x} } =\mathbf {\vec a}$$ 91 | $$\frac{\partial(\mathbf {\vec a}^{T}\mathbf X\mathbf {\vec b}) }{\partial \mathbf X }=\mathbf {\vec a}\mathbf {\vec b}^{T}=\mathbf {\vec a}\otimes\mathbf {\vec b}\in \mathbb R^{n\times n}$$ 92 | $$\frac{\partial(\mathbf {\vec a}^{T}\mathbf X^{T}\mathbf {\vec b}) }{\partial \mathbf X }=\mathbf {\vec b}\mathbf {\vec a}^{T}=\mathbf {\vec b}\otimes\mathbf {\vec a}\in \mathbb R^{n\times n}$$ 93 | $$\frac{\partial(\mathbf {\vec a}^{T}\mathbf X\mathbf {\vec a}) }{\partial \mathbf X }=\frac{\partial(\mathbf {\vec a}^{T}\mathbf X^{T}\mathbf {\vec a}) }{\partial \mathbf X }=\mathbf {\vec a}\otimes\mathbf {\vec a}$$ 94 | $$\frac{\partial(\mathbf {\vec a}^{T}\mathbf X^{T}\mathbf X\mathbf {\vec b}) }{\partial \mathbf X }=\mathbf X(\mathbf {\vec a}\otimes\mathbf {\vec b}+\mathbf {\vec b}\otimes\mathbf {\vec a})$$ 95 | $$ 96 | \frac{\partial[(\mathbf A\mathbf {\vec x}+\mathbf {\vec a})^{T}\mathbf C(\mathbf B\mathbf {\vec x}+\mathbf {\vec b})]}{\partial \mathbf {\vec x}}=\mathbf A^{T}\mathbf C(\mathbf B\mathbf {\vec x}+\mathbf {\vec b})+\mathbf B^{T}\mathbf C(\mathbf A\mathbf {\vec x}+\mathbf {\vec a}) 97 | $$ 98 | $$ 99 | \frac{\partial (\mathbf {\vec x}^{T}\mathbf A \mathbf {\vec x})}{\partial \mathbf {\vec x}}=(\mathbf A+\mathbf A^{T})\mathbf {\vec x} 100 | $$ 101 | $$ 102 | \frac{\partial[(\mathbf X\mathbf {\vec b}+\mathbf {\vec c})^{T}\mathbf A(\mathbf X\mathbf {\vec b}+\mathbf {\vec c})]}{\partial \mathbf X}=(\mathbf A+\mathbf A^{T})(\mathbf X\mathbf {\vec b}+\mathbf {\vec c})\mathbf {\vec b}^{T} 103 | $$ 104 | $$ 105 | \frac{\partial (\mathbf {\vec b}^{T}\mathbf X^{T}\mathbf A \mathbf X\mathbf {\vec c})}{\partial \mathbf X}=\mathbf A^{T}\mathbf X\mathbf {\vec b}\mathbf {\vec c}^{T}+\mathbf A\mathbf X\mathbf {\vec c}\mathbf {\vec b}^{T} 106 | $$ 107 | 3. 如果 \\(f\\) 是一元函数,则: 108 | - 其逐元向量函数为: 109 | $$f(\mathbf{\vec x}) =(f(x_1),f(x_2),\cdots,f(x_n))^{T}$$ 110 | - 其逐矩阵函数为: 111 | $$f(\mathbf X)=f(x\_{i,j}) $$ 112 | 113 | 其逐元导数分别为: 114 | $$f^{\prime}(\mathbf{\vec x}) =(f^{\prime}(x_1),f^{\prime}(x_2),\cdots,f^{\prime}(x_n))^{T}\\\ 115 | f^{\prime}(\mathbf X)=f^{\prime}(x\_{i,j})$$ 116 | 117 | 4. 各种类型的偏导数: 118 | - 标量对标量的偏导数 $$\frac{\partial u}{\partial v}$$ 119 | - 标量对向量(\\(n\\) 维向量)的偏导数 $$\frac{\partial u}{\partial \mathbf {\vec v}}=(\frac{\partial u}{\partial v\_1},\frac{\partial u}{\partial v\_2},\cdots,\frac{\partial u}{\partial v\_n})^{T}$$ 120 | - 标量对矩阵(\\(m\times n\\) 阶矩阵)的偏导数 121 | $$ 122 | \frac{\partial u}{\partial \mathbf V}=\begin{bmatrix} 123 | \frac{\partial u}{\partial V\_{1,1}}&\frac{\partial u}{\partial V\_{1,2}}&\cdots&\frac{\partial u}{\partial V\_{1,n}}\\\ 124 | \frac{\partial u}{\partial V\_{2,1}}&\frac{\partial u}{\partial V\_{2,2}}&\cdots&\frac{\partial u}{\partial V\_{2,n}}\\\ 125 | \vdots&\vdots&\ddots&\vdots\\\ 126 | \frac{\partial u}{\partial V\_{m,1}}&\frac{\partial u}{\partial V\_{m,2}}&\cdots&\frac{\partial u}{\partial V\_{m,n}} 127 | \end{bmatrix} 128 | $$ 129 | - 向量(\\(m\\) 维向量)对标量的偏导数 $$\frac{\partial \mathbf {\vec u}}{\partial v}=(\frac{\partial u\_1}{\partial v},\frac{\partial u\_2}{\partial v},\cdots,\frac{\partial u\_m}{\partial v})^{T}$$ 130 | - 向量(\\(m\\) 维向量)对向量 (\\(n\\) 维向量) 的偏导数(雅可比矩阵,行优先) 131 | $$ 132 | \frac{\partial \mathbf {\vec u}}{\partial \mathbf {\vec v}}=\begin{bmatrix} 133 | \frac{\partial u\_1}{\partial v\_1}&\frac{\partial u\_1}{\partial v\_2}&\cdots&\frac{\partial u\_1}{\partial v\_n}\\\ 134 | \frac{\partial u\_2}{\partial v\_1}&\frac{\partial u\_2}{\partial v\_2}&\cdots&\frac{\partial u\_2}{\partial v\_n}\\\ 135 | \vdots&\vdots&\ddots&\vdots\\\ 136 | \frac{\partial u\_m}{\partial v\_1}&\frac{\partial u\_m}{\partial v\_2}&\cdots&\frac{\partial u\_m}{\partial v\_n} 137 | \end{bmatrix} 138 | $$ 139 | > 如果为列优先,则为上面矩阵的转置 140 | - 矩阵(\\(m\times n\\) 阶矩阵)对标量的偏导数 141 | $$ 142 | \frac{\partial \mathbf U}{\partial v}=\begin{bmatrix} 143 | \frac{\partial U\_{1,1}}{\partial v}&\frac{\partial U\_{1,2}}{\partial v}&\cdots&\frac{\partial U\_{1,n}}{\partial v}\\\ 144 | \frac{\partial U\_{2,1}}{\partial v}&\frac{\partial U\_{2,2}}{\partial v}&\cdots&\frac{\partial U\_{2,n}}{\partial v}\\\ 145 | \vdots&\vdots&\ddots&\vdots\\\ 146 | \frac{\partial U\_{m,1}}{\partial v}&\frac{\partial U\_{m,2}}{\partial v}&\cdots&\frac{\partial U\_{m,n}}{\partial v} 147 | \end{bmatrix} 148 | $$ 149 | - 更复杂的情况依次类推。对于 \\(\frac{\partial \mathbf u}{\partial \mathbf v}\\)。根据`numpy`的术语: 150 | - 假设 \\(\mathbf u\\) 的 `ndim`(维度)为 \\(d_u\\) 151 | > 对于标量, `ndim`为 0;对于向量, `ndim`为1;对于矩阵,`ndim`为 2 152 | - 假设 \\(\mathbf v\\) 的 `ndim`为 \\(d_v\\) 153 | - 则 \\(\frac{\partial \mathbf u}{\partial \mathbf v}\\) 的 `ndim`为 \\(d_u+d_v\\) 154 | 155 | 5. 对于矩阵的迹,有下列偏导数成立: 156 | $$\frac{\partial [tr(f(\mathbf X))]}{\partial \mathbf X }=(f^{\prime}(\mathbf X))^{T}$$ 157 | $$\frac{\partial [tr(\mathbf A\mathbf X\mathbf B)]}{\partial \mathbf X }=\mathbf A^{T}\mathbf B^{T} $$ 158 | $$\frac{\partial [tr(\mathbf A\mathbf X^{T}\mathbf B)]}{\partial \mathbf X }=\mathbf B\mathbf A $$ 159 | $$\frac{\partial [tr(\mathbf A\otimes\mathbf X )]}{\partial \mathbf X }=tr(\mathbf A)\mathbf I$$ 160 | $$ \frac{\partial [tr(\mathbf A\mathbf X \mathbf B\mathbf X)]}{\partial \mathbf X }=\mathbf A^{T}\mathbf X^{T}\mathbf B^{T}+\mathbf B^{T}\mathbf X \mathbf A^{T} $$ 161 | $$ \frac{\partial [tr(\mathbf X^{T} \mathbf B\mathbf X \mathbf C)]}{\partial \mathbf X }=(\mathbf B^{T}+\mathbf B)\mathbf X \mathbf C \mathbf C^{T} $$ 162 | $$ \frac{\partial [tr(\mathbf C^{T}\mathbf X^{T} \mathbf B\mathbf X \mathbf C)]}{\partial \mathbf X }=\mathbf B\mathbf X \mathbf C +\mathbf B^{T}\mathbf X \mathbf C^{T} $$ 163 | $$ \frac{\partial [tr(\mathbf A\mathbf X \mathbf B\mathbf X^{T} \mathbf C)]}{\partial \mathbf X }= \mathbf A^{T}\mathbf C^{T}\mathbf X\mathbf B^{T}+\mathbf C \mathbf A \mathbf X \mathbf B$$ 164 | $$ \frac{\partial [tr((\mathbf A\mathbf X\mathbf B+\mathbf C)(\mathbf A\mathbf X\mathbf B+\mathbf C))]}{\partial \mathbf X }= 2\mathbf A ^{T}(\mathbf A\mathbf X\mathbf B+\mathbf C)\mathbf B^{T}$$ 165 | 166 | 6. 假设 \\(\mathbf U=\mathbf f(\mathbf X)\\) 是关于 \\(\mathbf X\\) 的矩阵值函数(\\(f:\mathbb R^{m\times n}\rightarrow \mathbb R^{m\times n}\\)),且 \\(g(\mathbf U)\\) 是关于 \\(\mathbf U\\) 的实值函数(\\(g:\mathbb R^{m\times n}\rightarrow \mathbb R \\)),则下面链式法则成立: 167 | $$\frac{\partial g(\mathbf U)}{\partial \mathbf X}=\left(\frac{\partial g(\mathbf U)}{\partial x\_{i,j}}\right)=\begin{bmatrix} 168 | \frac{\partial g(\mathbf U)}{\partial x\_{1,1}}&\frac{\partial g(\mathbf U)}{\partial x\_{1,2}}\cdots&\frac{\partial g(\mathbf U)}{\partial x\_{1,n}}\\\ 169 | \frac{\partial g(\mathbf U)}{\partial x\_{2,1}}&\frac{\partial g(\mathbf U)}{\partial x\_{2,2}}\cdots&\frac{\partial g(\mathbf U)}{\partial x\_{2,n}}\\\ 170 | \vdots&\vdots&\ddots&\vdots\\\ 171 | \frac{\partial g(\mathbf U)}{\partial x\_{m,1}}&\frac{\partial g(\mathbf U)}{\partial x\_{m,2}}\cdots&\frac{\partial g(\mathbf U)}{\partial x\_{m,n}}\\\ 172 | \end{bmatrix}\\\ 173 | =\left(\sum\_{k}\sum\_{l}\frac{\partial g(\mathbf U)}{\partial u\_{k,l}}\frac{\partial u\_{k,l}}{\partial x\_{i,j}}\right)\\\ 174 | =tr\left[\left(\frac{\partial g(\mathbf U)}{\partial \mathbf U}\right)^{T}\frac{\partial \mathbf U}{\partial x\_{i,j}}\right] 175 | $$ -------------------------------------------------------------------------------- /chapters/3_probability.md: -------------------------------------------------------------------------------- 1 | # 章3 概率论和信息论 2 | 3 | ## 一、基本概念 4 | 1. 机器学习中,不确定性有三个来源: 5 | - 模型本身固有的随机性。如量子力学中的粒子动力学方程。 6 | - 不完全的观测。即使是确定性系统,当我们无法观测所有驱动变量时,结果也是随机的。 7 | - 不完全建模。有时我们必须放弃一些观测信息。如机器人建模中,我们可以精确观察机器人周围每个对象的位置。但在预测这些对象将来的位置时,对空间进行了离散化,那么位置预测将带有不确定性。 8 | 9 | 2. 离散随机变量的均匀分布:假设 \\(\mathbf x\\) 有 \\(k\\) 个取值: \\(x_1,x_2,\cdots,x_k\\),则均匀分布的概率密度函数(`probability mass function:PMF`)为: 10 | $$P(\mathbf x=x_i) =\frac 1k,\quad i=1,2,\cdots,k$$ 11 | 3. 连续随机变量的均匀分布: 假设 \\(\mathbf x\\) 在 `[a,b]`上均匀分布,则其概率密度函数(`probability density function:PDF`)为: 12 | $$p(\mathbf x=x)=\begin{cases} 13 | 0,&x\notin [a,b]\\\ 14 | \frac{1}{b-a},&x \in [a,b] 15 | \end{cases} $$ 16 | 17 | 4. 条件概率分布的链式法则:对于 \\(n\\) 个随机变量 \\(\mathbf x\_1,\mathbf x\_2,\cdots,\mathbf x\_n\\),有: 18 | $$ P(\mathbf x\_1,\mathbf x\_2,\cdots,\mathbf x\_n)=P(\mathbf x\_1)\prod\_{i=2}^{n}P(\mathbf x\_i \mid \mathbf x\_1,\cdots,\mathbf x\_{i-1})$$ 19 | 20 | 5. 两个随机变量 \\(\mathbf x,\mathbf y\\) 相互独立的数学描述: 21 | $$ \forall x\in \mathbf x,\forall y\in \mathbf y, p(\mathbf x=x,\mathbf y=y)=p(\mathbf x=x)p(\mathbf y=y)$$ 22 | 记作: \\(\mathbf x \bot \mathbf y\\) 23 | 24 | 6. 两个随机变量 \\(\mathbf x,\mathbf y\\) 关于随机变量 \\(\mathbf z\\) 条件独立的数学描述: 25 | $$ \forall x\in \mathbf x,\forall y\in \mathbf y,\forall z \in\mathbf z,\\\ 26 | p(\mathbf x=x,\mathbf y=y\mid \mathbf z=z)=p(\mathbf x=x\mid \mathbf z=z)p(\mathbf y=y\mid \mathbf z=z)$$ 27 | 记作: \\(\mathbf x \bot \mathbf y \mid \mathbf z\\) 28 | 29 | 7. 期望: 30 | - 离散型随机变量: \\(\mathbb E\_{\mathbf x\sim P}[f(x)]=\sum\_{x}P(x)f(x)\\) 31 | - 连续型随机变量: \\(\mathbb E\_{\mathbf x\sim p}[f(x)]=\\int p(x)f(x)dx\\) 32 | 33 | 方差: \\(Var(f(x))=\mathbb E[(f(x)-\mathbb E[f(x)])^{2}]\\) 34 | 35 | 8. 两个随机变量之间的协方差,它刻画了两个随机变量的线性相关的程度: 36 | $$Cov(f(x),g(y))=\mathbb E[(f(x)-\mathbb E[f(x)])(g(y)-\mathbb E[g(y)])] $$ 37 | - 协方差的绝对值越大,说明两个随机变量都远离它们的均值。 38 | - 协方差如果为正,则说明两个随机变量同时趋向于取较大的值;如果为负,则说明一个随变量趋向于取较大的值,另一个随机变量趋向于取较小的值 39 | 40 | 两个随机变量的相关系数是归一化的协方差,它仅保留了线性相关的程度。 41 | 42 | 两个随机变量的独立性可以导出协方差为零。但是两个随机变量的协方差为零无法导出独立性,因为独立性也包括:没有非线性关系。有可能两个随机变量是非独立的,但是协方差为零:假设随机变量 \\(\mathbf x\sim U[-1,1]\\) 。定义随机变量 \\(\mathbf s\\) 的概率分布函数为: 43 | $$P(\mathbf s=1)= \frac 12\\\P(\mathbf s=-1)= \frac 12 44 | $$ 45 | 定义随机变量 \\(\mathbf y=\mathbf {sx}\\),则随机变量 \\(\mathbf x,\mathbf y\\) 是非独立的,但是有: \\(Cov(\mathbf x,\mathbf y)=0\\) 46 | 47 | 9. 给定随机向量 \\(\mathbf{\vec x}\in \mathbb R^{n}\\),则协方差矩阵为一个 \\(n\times n\\) 大小的矩阵,每个元素为: 48 | $$Cov(\mathbf{\vec x})\_{i,j}=Cov(\mathbf x_i,\mathbf x_j) $$ 49 | 对角线元素为方差: \\(Cov(\mathbf{\vec x})\_{i,i}=Var(\mathbf x_i)\\) 50 | 51 | ## 二、常见概率分布 52 | 1. 伯努利分布(二项分布):参数为 \\(\phi\in [0,1]\\)。随机变量 \\(\mathbf x \in \\{0,1\\}\\) 53 | - 概率分布函数为: 54 | $$ P(\mathbf x=x)=\phi^{x}(1-\phi)^{1-x}\;,x \in \\{0,1\\}$$ 55 | - 期望: \\(\mathbb E\_{\mathbf x}[x]=\phi\\) 56 | - 方差: \\(Var\_{\mathbf x}[x]=\phi(1-\phi)\\) 57 | 58 | 2. `categorical` 分布:它是二项分布的推广,也称作`multinoulli`分布。假设随机变量 \\(\mathbf x \in \\{1,2,\cdots,K\\}\\),其概率分布函数为: 59 | $$ 60 | P(\mathbf x=1)=\theta_1\\\ 61 | P(\mathbf x=2)=\theta_2\\\ 62 | \vdots\\\ 63 | P(\mathbf x=K-1)=\theta\_{K-1}\\\ 64 | P(\mathbf x=K)=1-\sum\_{i=1}^{K-1}\theta\_i\\\ 65 | $$ 66 | 其中\\(\theta_i\\) 为参数,它满足 \\(\theta_i \in [0,1]\\),且 \\(\sum\_{i=1}^{K-1}\theta\_i \in [0,1]\\) 。 67 | 68 | 3. 高斯分布(正态分布): 69 | - 概率密度函数: 70 | $$\mathcal N(x;\mu,\sigma^{2}) =\sqrt{\frac{1}{2\pi\sigma^{2}}}\exp\left(-\frac{1}{2\sigma^{2}}(x-\mu)^{2}\right)$$ 71 | - 期望: \\(\mathbb E\_{\mathbf x}[x]=\mu\\) 72 | - 方差: \\(Var\_{\mathbf x}[x]=\sigma^{2}\\) 73 | 74 | 为了计算方便,有时也记作: 75 | $$\mathcal N(x;\mu,\beta^{-1}) =\sqrt{\frac{\beta}{2\pi}}\exp\left(-\frac{1}{2}\beta(x-\mu)^{2}\right) $$ 76 | 其中 \\(\beta \in (0,\infty)\\) 77 | 78 | 正态分布是很多应用中的合理选择。如果某个随机变量取值范围是实数,且我们对它的概率分布一无所知,通常我们会假设它服从正态分布。有两个原因支持这一选择: 79 | - 我们建模的任务的真实分布通常都确实接近正态分布。中心极限定理表明,多个独立随机变量的和近似正态分布。 80 | - 在具有相同方差的所有可能的概率分布中,正态分布的熵最大(即不确定性最大)。 81 | 82 | ![gaussian](../imgs/3/gaussian.png) 83 | 84 | 4. 多元正态分布: 85 | - 概率密度函数(假设 \\(\mathbf{\vec x}\in \mathbb R^{n}\\) ): 86 | $$\mathcal N(\mathbf{\vec x};\mathbf{\vec \mu},\mathbf\Sigma) =\sqrt{\frac{1}{(2\pi)^{n}det(\mathbf\Sigma)}}\exp\left(-\frac 12(\mathbf{\vec x-\vec \mu})^{T}\mathbf\Sigma^{-1}(\mathbf{\vec x-\vec \mu})\right) $$ 87 | - 期望: \\(\mathbb E\_{\mathbf{\vec x}}[\mathbf{\vec x}]=\mathbf{\vec \mu}\\) 88 | - \\(\mathbf\Sigma\\) 给出了协方差矩阵 89 | 90 | 5. 指数分布: 91 | - 概率密度函数: 92 | $$p(x;\lambda)=\begin{cases} 93 | 0,& x\lt0\\\ 94 | \frac{\lambda}{\exp(\lambda x)},& x\ge0 95 | \end{cases} $$ 96 | - 期望: \\(\mathbb E\_{\mathbf x}[x]=\frac{1}{\lambda}\\) 97 | - 方差: \\(Var\_{\mathbf x}[x]=\frac{1}{\lambda^{2}}\\) 98 | 99 | ![expon](../imgs/3/expon.png) 100 | 101 | 6. 拉普拉斯分布: 102 | - 概率密度函数: 103 | $$p(x;\mu,\gamma)=\frac{1}{2\gamma}\exp\left(-\frac{|x-\mu|}{\gamma}\right) $$ 104 | - 期望: \\(\mathbb E\_{\mathbf x}[x]=\mu\\) 105 | - 方差: \\(Var\_{\mathbf x}[x]=2\gamma^{2}\\) 106 | ![laplace](../imgs/3/laplace.png) 107 | 108 | 7. 狄拉克分布:假设所有的概率都集中在一点 \\(\mu\\) 上,则对应的概率密度函数为: 109 | $$p(x)=\delta(x-\mu) $$ 110 | 其中 \\(\delta(\cdot)\\) 为狄拉克函数,其性质为: 111 | $$ 112 | \delta(x)=0,\forall x\neq 0\\\ 113 | \int\_{-\infty}^{\infty}\delta(x)dx=1 114 | $$ 115 | 116 | 狄拉克分布的一个典型用途就是定义连续型随机变量的经验分布函数。假设数据集中有样本 \\(\mathbf{\vec x}\_1,\mathbf{\vec x}\_2,\cdots,\mathbf{\vec x}\_N\\),则定义经验分布函数: 117 | $$ \hat p(\mathbf{\vec x})=\frac 1N\sum\_{i=1}^{N}\delta(\mathbf{\vec x}-\mathbf{\vec x}\_i)$$ 118 | 它就是对每个样本赋予了一个概率质量 \\(\frac 1N\\)。 119 | > 对于离散型随机变量的经验分布,则经验分布函数就是`multinoulli`分布,它简单地等于训练集中的经验频率。 120 | 121 | 经验分布的两个作用: 122 | - 我们可以查看训练集样本的经验分布,从而指定该训练集的样本采样的分布 123 | - 经验分布就是使得训练数据的可能性最大化的概率密度函数 124 | 125 | 8. 混合概率分布:它组合了其他几个分量的分布来组成。在每次生成样本中,首先通过`multinoulli`分布来决定选用哪个分量,然后由该分量的分布函数来生成样本。 126 | 127 | 其概率分布函数为: 128 | $$ P(\mathbf x)=\sum\_{i}P(c=i)P(\mathbf x\mid c=i)$$ 129 | 其中 \\(P(c=i)\\) 为一个`multinoulli`分布,\\(c\\) 的取值范围就是各分量的编号。 130 | 131 | - 前面介绍的连续型随机变量的经验分布函数就是一个混合概率分布的例子,此时 \\(P(c=i)=\frac 1N\\) 132 | - 混合概率分布可以通过简单的概率分布创建更复杂的概率分布 133 | - 一个常见的例子是混合高斯模型,其中 \\(P(\mathbf x\mid c=i)\\) 为高斯模型。每个分量都有对应的参数 \\((\mathbf{\vec \mu}\_i,\mathbf \Sigma\_i)\\) 134 | - 有些混合高斯模型有更强的约束,如 \\(\forall i,\mathbf \Sigma\_i=\mathbf\Sigma\\),更进一步还可以要求 \\(\mathbf\Sigma\\) 为一个对角矩阵。 135 | - 混合高斯模型是一个通用的概率密度函数逼近工具。任何平滑的概率密度函数都可以通过足够多分量的混合高斯模型来逼近。 136 | 137 | ## 三、常用函数 138 | 1. `sigmoid`函数: 139 | $$\sigma(x)=\frac{1}{1+\exp(-x)} $$ 140 | - 该函数可以用于生成二项分布的 \\(\phi\\) 参数 141 | - 当 \\(x\\) 很大或者很小时,该函数处于饱和状态。此时函数的曲线非常平坦,并且自变量的一个较大的变化只能带来函数值的一个微小的变化(即对自变量不敏感)。 142 | ![sigmoid](../imgs/3/sigmoid.png) 143 | 144 | 2. `softplus`函数: 145 | $$ \zeta(x)=\log(1+\exp(x))$$ 146 | - 该函数可以生成正态分布的 \\(\sigma^{2}\\) 参数 147 | - 它之所以称作`softplus`,因为它是下面函数的一个光滑逼近: 148 | $$x^{+}=\max(0,x) $$ 149 | ![softplus](../imgs/3/softplus.png) 150 | 151 | 3. `sigmoid`和`softplus`函数的性质: 152 | $$ 153 | \sigma(x)=\frac{\exp(x)}{\exp(x)+\exp(0)}\\\ 154 | \frac {d}{dx}\sigma(x)=\sigma(x)(1-\sigma(x))\\\ 155 | 1-\sigma(x)=\sigma(-x)\\\ 156 | \log\sigma(x)=-\zeta(-x)\\\ 157 | \frac{d}{dx}\zeta(x)=\sigma(x)\\\ 158 | \forall x\in(0,1),\sigma^{-1}(x)=\log(\frac{x}{1-x})\\\ 159 | \forall x \gt 0,\zeta^{-1}(x)=\log(\exp(x)-1)\\\ 160 | \zeta(x)=\int\_{-\infty}^{x}\sigma(y)dy\\\ 161 | \zeta(x)-\zeta(-x)=x 162 | $$ 163 | 164 | 其中 \\(f^{-1}(\cdot)\\) 为反函数。 165 | - \\(\sigma^{-1}(x)\\) 也称作`logit`函数 166 | - 如果定义两个函数 167 | $$x^{+}=\max(0,x),x^{-}=\max(0,-x) $$ 168 | 则它们分布获取了 \\(y=x\\) 的正部分和负部分。根据定义有: 169 | $$x=x^{+}-x^{-} $$ 170 | 而我们的 \\(\zeta(x)\\) 逼近的是 \\(x^{+}\\), \\(\zeta(-x)\\) 逼近的是 \\(x^{-}\\),于是有: 171 | $$\zeta(x)-\zeta(-x)=x $$ 172 | 173 | ![sigmoid_softplus](../imgs/3/sigmoid_softplus.png) 174 | 175 | ## 四、连续随机变量 176 | 1. 测度为零:非正式化的提法是,如果集合中的点的数量可以忽略不计,则该集合的测度为零。如:二维空间中的直线的测度为零,而正方形的测度非零。 177 | 178 | 2. 几乎处处相等:不满足条件的那些点组成的集合的测度为零。 179 | 180 | 3. 假设随机变量 \\(\mathbf x,\mathbf y\\) 满足 \\(\mathbf y=g(\mathbf x)\\),且函数 \\(g(\cdot)\\) 满足:处处连续、可导、且存在反函数。 181 | 182 | 则有: 183 | $$p\_{\mathbf x}(x)=p\_{\mathbf y}(g(x)) \left|\frac{\partial g(x)}{\partial x}\right|$$ 184 | 或者等价地: 185 | $$p\_{\mathbf y}(y)=p\_{\mathbf x}(g^{-1}(y)) \left|\frac{\partial x}{\partial y}\right| $$ 186 | 187 | 如果扩展到高维空间,则有: 188 | $$p\_{\mathbf x}(\mathbf{\vec x})=p\_{\mathbf y}(g(\mathbf{\vec x})) \left|\det\left(\frac{\partial g(\mathbf{\vec x})}{\partial \mathbf{\vec x}}\right)\right| $$ 189 | > 并不是 \\(p\_{\mathbf y}(y)=p\_{\mathbf x}(g^{-1}(y))\\),这是因为 \\(g(\cdot)\\) 引起了空间扭曲,从而导致 \\(\int p\_{\mathbf y}(y)dy \neq 1\\) 。其实我们有: 190 | $$|p\_{\mathbf y}(g(x))dy|=|p\_{\mathbf x}(x)dx| $$ 191 | 求解该方程,即得到上述解。 192 | 193 | ## 五、信息论 194 | 1. 信息论背后的原理是:从不太可能发生的事件中能学到更多的有用信息。 195 | - 发生可能性较大的事件包含较少的信息 196 | - 发生可能性较小的事件包含较多的信息 197 | - 独立事件包含额外的信息 198 | 199 | 对于事件 \\(\mathbf x=x\\),定义自信息`self-information`为: 200 | $$I(x)=-\log P(x) $$ 201 | 202 | 2. 自信息仅仅处理单个输出。如果计算自信息的期望,它就是熵: 203 | $$ H(\mathbf x)=\mathbb E\_{\mathbf x\sim P}[I(x)]=-\mathbb E\_{\mathbf x\sim P}[\log P(x)]$$ 204 | 记作 \\(H(P)\\) 205 | 206 | 3. `KL`散度:对于给定的随机变量 \\(\mathbf x\\),它的两个概率分布函数 \\(P(x)\\) 和 \\(Q(x)\\) 的区别可以用 `KL`散度来度量: 207 | $$D\_{KL}(P||Q)=\mathbb E\_{\mathbf x\sim P}\left[\log \frac{P(x)}{Q(x)}\right]\\\ 208 | =\mathbb E\_{\mathbf x\sim P}\left[\log P(x) -\log Q(x) \right] $$ 209 | - `KL`散度非负。当它为0时,当且仅当 `P`和`Q`是同一个分布(对于离散型随机变量),或者两个分布几乎处处相等(对于连续型随机变量) 210 | - \\(D\_{KL}(P||Q) \neq D\_{KL}(Q||P)\\) 211 | 212 | 4. 交叉熵`cross-entropy`:\\(H(P,Q)=H(P)+D\_{KL}(P||Q)=-\mathbb E\_{\mathbf x\sim P}\log Q(x)\\) 213 | 214 | ## 六、概率图 215 | 1. 机器学习算法通常涉及非常大量的随机变量的联合概率分布。通常这些随机变量之间很多都是条件无关的,如果使用单个函数来描述联合概率分布是非常低效的。 216 | 217 | 我们的做法是:将联合概率分布函数分解成很多因子的乘积,每个因子只涉及少量的随机变量。这种因式分解可以大大减少描述分布函数所需的参数数量。 218 | 219 | 2. 有两种概率图模型: 220 | - 有向图:对每个随机变量 \\(\mathbf x_i\\),设它的父结点集合代表的结点集合为 \\(Pa\_{\mathcal G}(\mathbf x_i)\\),则联合概率分布函数分解为: 221 | $$p(\mathbf{\vec x}) =\prod\_{i}p(\mathbf x_i\mid Pa\_{\mathcal G}(\mathbf x_i))$$ 222 | - 无向图:无向图中,任何两个结点均有边连接的结点子集称为团`clique`。若 \\(\mathcal C\\) 是无向图的一个团,并且不能再加进任何一个结点使其成为一个更大的团,则称此\\(\mathcal C\\) 为最大团。对于每个最大团 \\(\mathcal C \_i\\),对应一个因子 \\(\phi\_i(\mathcal C \_i)\\)。则联合概率分布函数分解为: 223 | $$p(\mathbf{\vec x}) =\frac 1Z \prod\_{i}\phi\_i(\mathcal C \_i)$$ 224 | 其中 \\(Z\\) 为归一化因子,确保 \\(\int p(\mathbf{\vec x}) d \mathbf{\vec x}=1\\) -------------------------------------------------------------------------------- /chapters/4_mumerical_computation.md: -------------------------------------------------------------------------------- 1 | # 章4 数值计算 2 | 3 | ## 一、数值稳定性 4 | 1. 在计算机中执行数学运算的一个核心困难是:我们需要使用有限的比特位来表达无穷多的实数。这意味着我们在计算机中表示实数时,会引入近似误差。近似误差可以在多步数值运算中传递、积累从而导致理论上成功的算法会失败。因此数值算法设计时要考虑将累计误差最小化。 5 | 6 | 2. 上溢出`overflow`和下溢出`underflow`: 7 | - 一种严重的误差是下溢出:当接近零的数字四舍五入为零时,发生下溢出。许多函数在参数为零和参数为一个非常小的正数时,行为是不同的。如对数函数要求自变量大于零;除法中要求除数非零。 8 | - 另一种严重的误差是上溢出:当数值非常大,超过了计算机的表示范围时,发生上溢出。 9 | 10 | 3. 一个数值稳定性的例子是`softmax`函数。`softmax`函数经常用于 `multinoulli`分布。设 \\(\mathbf{\vec x}=(x_1,x_2,\cdots,x_n)^{T}\\),则`softmax`函数定义为: 11 | $$\text{softmax}(\mathbf{\vec x})=\left(\frac{\exp(x_1)}{\sum\_{j=1}^{n}\exp(x_j)},\frac{\exp(x_2)}{\sum\_{j=1}^{n}\exp(x_j)},\cdots,\frac{\exp(x_n)}{\sum\_{j=1}^{n}\exp(x_j)}\right)^{T} $$ 12 | 当所有的 \\(x_i\\) 都等于常数 \\(c\\) 时,`softmax`函数的每个分量的理论值都为 \\(\frac 1n\\) 13 | - 考虑 \\(c\\) 是一个非常大的负数(比如趋近负无穷),此时 \\(\exp( c)\\) 下溢出。此时 \\( \frac{\exp(c )}{\sum\_{j=1}^{n}\exp(c )}\\) 分母为零,结果未定义。 14 | - 考虑 \\(c\\) 是一个非常大的正数(比如趋近正无穷),此时 \\(\exp( c)\\) 上溢出。 \\( \frac{\exp(c )}{\sum\_{j=1}^{n}\exp(c )}\\) 的结果未定义。 15 | 16 | 解决的办法是:令 \\(\mathbf{\vec z}=\mathbf{\vec x}-\max\_i x_i\\),则有 \\(\text{softmax}(\mathbf{\vec z}) \\) 的第 \\(i\\) 个分量为: 17 | $$ 18 | \text{softmax}(\mathbf{\vec z})\_i=\frac{\exp(z_i)}{\sum\_{j=1}^{n}\exp(z_j)}=\frac{\exp(\max\_k x_k)\exp(z_i)}{\exp(\max\_k x_k)\sum\_{j=1}^{n}\exp(z_j)}\\\ 19 | =\frac{\exp(z_i+\max\_k x_k)}{\sum\_{j=1}^{n}\exp(z_j+\max\_k x_k)}\\\ 20 | =\frac{\exp(x_i)}{\sum\_{j=1}^{n}\exp(x_j)}\\\ 21 | =\text{softmax}(\mathbf{\vec x})\_i 22 | $$ 23 | - 当 \\(\mathbf{\vec x} \\) 的分量较小时, \\(\mathbf{\vec z} \\) 的分量至少有一个为零,从而导致 \\(\text{softmax}(\mathbf{\vec z})\_i\\) 的分母至少有一项为 1,从而解决了下溢出的问题。 24 | - 当 \\(\mathbf{\vec x} \\) 的分量较大时,\\(\text{softmax}(\mathbf{\vec z})\_i\\) 相当于分子分母同时除以一个非常大的数 \\(\exp(\max\_i x_i)\\) ,从而解决了上溢出。 25 | 26 | 但是还有个问题:当 \\(\mathbf{\vec x} \\) 的分量较小时, \\(\text{softmax}(\mathbf{\vec x})\_i\\) 的计算结果可能为 0 (此时不再是未定义的。因此分母非零,分子趋近于零)。此时: \\(\log \text{softmax}(\mathbf{\vec x})\\) 趋向于负无穷,非数值稳定的。因此我们需要设计专门的函数来计算 \\(\log\text{softmax}\\) ,而不是将 \\(\text{softmax}\\) 的结果传递给 \\(\log\\) 函数。 27 | 28 | 4. 当我们需要从头开始实现一个数值算法时,我们需要考虑数值稳定性。当我们使用现有的数值计算库时,不需要考虑数值稳定性。 29 | 30 | ## 二、 Conditioning 31 | 1. `Conditioning`刻画了一个函数的如下特性:当函数的输入发生了微小的变化时,函数的输出的变化有多大。 32 | - 对于`Conditioning`较大的函数,在数值计算中可能有问题。因为函数输入的舍入误差可能导致函数输出的较大变化。 33 | 34 | 2. 对于方阵 \\(\mathbf A\in \mathbb R^{n\times n}\\) ,其条件数`condition number`为: 35 | $$\text{condition number}=\max\_{1\le i,j\le n,i\ne j}\left|\frac{\lambda\_i}{\lambda\_j} \right|$$ 36 | 其中 \\(\lambda_i,i=1,2,\cdots,n\\) 为 \\(\mathbf A\\) 的特征值。方阵的条件数就是最大的特征值除以最小的特征值。当方阵的条件数很大时,矩阵的求逆将对误差特别敏感(即: \\(\mathbf A\\) 的一个很小的扰动,将导致其逆矩阵一个非常明显的变化)。 37 | - 条件数是矩阵本身的特性,它会放大那些包含矩阵求逆运算过程中的误差。 38 | 39 | ## 三、基于梯度的优化算法 40 | 41 | ### 1. 一维函数 42 | 43 | 1. 满足导数为零的点(即 \\(f^{\prime}(x)=0\\) )称作驻点。驻点可能为下面三种类型之一: 44 | - 局部极小点:在 \\(x\\) 的一个邻域内,该点的值最小 45 | - 局部极大点:在 \\(x\\) 的一个邻域内,该点的值最大 46 | - 鞍点:既不是局部极小,也不是局部极大 47 | 48 | ![critical_point.PNG](../imgs/4/critical_point.PNG) 49 | 50 | 2. 全局极小点:\\(x^{\*}=\arg\min\_x f(x)\\)。 51 | - 全局极小点可能有一个或者多个 52 | - 在深度学习中,我们的目标函数很可能具有非常多的局部极小点,以及许多位于平坦区域的鞍点。这使得优化非常不利。因此我们通常选取一个非常低的目标函数值,而不一定要是全局最小值。 53 | ![deeplearning_optimization.PNG](../imgs/4/deeplearning_optimization.PNG) 54 | 55 | ### 2. 多维函数 56 | 57 | 1. 对于函数: \\(f:\mathbb R^{n} \rightarrow \mathbb R\\),输入为多维的。假设输入 \\(\mathbf{\vec x}=(x_1,x_2,\cdots,x_n)^{T}\\),则定义梯度: 58 | $$\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})=\left(\frac{\partial}{\partial x_1}f(\mathbf{\vec x}),\frac{\partial}{\partial x_2}f(\mathbf{\vec x}),\cdots,\frac{\partial}{\partial x_n}f(\mathbf{\vec x})\right)^{T}$$ 59 | - 驻点满足: \\(\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})=\mathbf{\vec 0}\\) 60 | 61 | 2. 沿着方向 \\(\mathbf{\vec u}\\) 的方向导数`directional derivative`定义为: 62 | $$\lim\_{\alpha\rightarrow 0}\frac{f(\mathbf{\vec x}+\alpha\mathbf{\vec u})-f(\mathbf{\vec x})}{\alpha} $$ 63 | 其中 \\(\mathbf{\vec u}\\) 为单位向量。 64 | 65 | 方向导数就是 \\(\frac{\partial}{\partial \alpha}f(\mathbf{\vec x}+\alpha\mathbf{\vec u})\\)。根据链式法则,它也等于 \\(\mathbf{\vec u}^{T}\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})\\) 66 | 67 | 3. 为了最小化 \\(f\\),我们寻找一个方向:沿着该方向,函数值减少的速度最快(换句话说,就是增加最慢)。即: 68 | $$ 69 | \min\_{\mathbf{\vec u}} \mathbf{\vec u}^{T}\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})\\\ 70 | s.t.\quad ||\mathbf{\vec u}||_2=1 71 | $$ 72 | 求解这个最优化问题很简单。假设 \\(\mathbf{\vec u}\\) 与梯度的夹角为 \\(\theta\\),则目标函数等于: 73 | $$||\mathbf{\vec u}||\_2||\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})||\_2 \cos\theta$$ 74 | 考虑到 \\(||\mathbf{\vec u}||\_2=1\\),以及梯度的大小与 \\(\theta\\) 无关,于是上述问题转化为: 75 | $$ \min\_\theta \cos\theta$$ 76 | 于是: \\(\theta^{\*}=\pi\\),即 \\(\mathbf{\vec u}\\) 沿着梯度的相反的方向。即:梯度的方向是函数值增加最快的方向,梯度的相反方向是函数值减小的最快的方向。我们可以沿着负梯度的方向来降低 \\(f\\) 的值,这就是梯度下降法。 77 | 78 | 4. 根据梯度下降法,我们为了寻找 \\(f\\) 的最小点,我们的迭代过程为: 79 | $$\mathbf{\vec x}^{\prime}= \mathbf{\vec x}-\epsilon\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})$$ 80 | 迭代结束条件为:梯度向量 \\(\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})\\) 的每个成分为零或者非常接近零。 81 | 82 | 其中 \\(\epsilon\\) 为学习率,它是一个正数,决定了迭代的步长。选择学习率有多种方法: 83 | - 一种方法是:选择 \\(\epsilon\\) 为一个小的、正的常数 84 | - 另一种方法是:给定多个 \\(\epsilon\\),然后选择使得 \\(f(\mathbf{\vec x}-\epsilon\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x}))\\) 最小的那个值作为本次迭代的学习率。这种办法叫做线性搜索`line search` 85 | - 第三种方法是:求得使 \\(f(\mathbf{\vec x}-\epsilon\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x}))\\) 取极小值的 \\(\epsilon\\),即求解最优化问题: 86 | $$ \epsilon^{\*}=\arg\min\_{\epsilon,\epsilon \gt 0 }f(\mathbf{\vec x}-\epsilon\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x}))$$ 87 | 这种方法也称作最速下降法。 88 | - 在最速下降法中,假设相邻的三个迭代点分别为: \\(\mathbf{\vec x}^{},\mathbf{\vec x}^{},\mathbf{\vec x}^{}\\),可以证明: \\((\mathbf{\vec x}^{}-\mathbf{\vec x}^{})\cdot (\mathbf{\vec x}^{}-\mathbf{\vec x}^{})=0\\)。即相邻的两次搜索的方向是正交的! 89 | 90 | 5. 有些情况下,如果梯度向量 \\(\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})\\) 的形式比较简单,我们可以直接求解方程: 91 | $$\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})=\mathbf{\vec 0} $$ 92 | 这时不用任何迭代,直接获得解析解。 93 | 94 | ### 3. 二阶导数 95 | 1. 二阶导数 \\(f^{\prime\prime}(x)\\) 刻画了曲率。假设我们有一个二次函数(实际任务中,很多函数不是二次的,但是在局部我们可以近似为二次函数): 96 | - 如果函数的二阶导数为零,则它是一条直线。如果梯度为1,则当我们沿着负梯度的步长为 \\(\epsilon\\) 时,函数值减少 \\(\epsilon\\) 97 | - 如果函数的二阶导数为负,则函数向下弯曲。如果梯度为1,则当我们沿着负梯度的步长为 \\(\epsilon\\) 时,函数值减少大于 \\(\epsilon\\) 98 | - 如果函数的二阶导数为正,则函数向上弯曲。如果梯度为1,则当我们沿着负梯度的步长为 \\(\epsilon\\) 时,函数值减少少于 \\(\epsilon\\) 99 | ![curvature.PNG](../imgs/4/curvature.PNG) 100 | 101 | 2. 当函数输入为多维时,我们定义海森矩阵: 102 | $$\mathbf H(f)(\mathbf{\vec x}) =\begin{bmatrix} 103 | \frac{\partial^{2}}{\partial x\_1\partial x\_1}f&\frac{\partial^{2}}{\partial x\_1\partial x\_2}f&\cdots&\frac{\partial^{2}}{\partial x\_1\partial x\_n}f\\\ 104 | \frac{\partial^{2}}{\partial x\_2\partial x\_1}f&\frac{\partial^{2}}{\partial x\_2\partial x\_2}f&\cdots&\frac{\partial^{2}}{\partial x\_2\partial x\_n}f\\\ 105 | \vdots&\vdots&\ddots&\vdots\\\ 106 | \frac{\partial^{2}}{\partial x\_n\partial x\_1}f&\frac{\partial^{2}}{\partial x\_n\partial x\_2}f&\cdots&\frac{\partial^{2}}{\partial x\_n\partial x\_n}f 107 | \end{bmatrix}$$ 108 | 即海森矩阵的第 \\(i\\) 行 \\(j\\) 列元素为: 109 | $$\mathbf H\_{i,j}=\frac{\partial^{2}}{\partial x\_i\partial x\_j}f(\mathbf{\vec x}) $$ 110 | - 当二阶偏导是连续时,海森矩阵是对称阵,即有: \\(\mathbf H=\mathbf H^{T}\\) 。在深度学习中,我们遇到的大多数海森矩阵都是对称阵。 111 | - 对于特定方向 \\(\mathbf{\vec d}\\) 上的二阶导数: 112 | - 如果 \\(\mathbf{\vec d}\\) 是海森矩阵的特征值,则该方向的二阶导数就是对应的特征值 113 | - 如果 \\(\mathbf{\vec d}\\) 不是海森矩阵的特征值,则该方向的二阶导数就是所有特征值的加权平均,权重在 `(0,1)`之间。且与 \\(\mathbf{\vec d}\\) 夹角越小的特征向量对应的特征值具有更大的权重。 114 | - 最大特征值确定了最大二阶导数,最小特征值确定最小二阶导数。 115 | 116 | 3. 我们将 \\(f(\mathbf{\vec x})\\) 在 \\(\mathbf{\vec x}\_0\\) 处泰勒展开: 117 | $$f(\mathbf{\vec x}) \approx f(\mathbf{\vec x}\_0)+(\mathbf{\vec x}-\mathbf{\vec x}\_0 )^{T}\mathbf{\vec g}+\frac 12(\mathbf{\vec x}-\mathbf{\vec x}\_0)^{T}\mathbf H (\mathbf{\vec x}-\mathbf{\vec x}\_0)$$ 118 | 其中 \\(\mathbf{\vec g}\\) 为 \\(\mathbf{\vec x}\_0\\) 处的梯度; \\(\mathbf H\\) 为 \\(\mathbf{\vec x}\_0\\) 处的海森矩阵。 119 | 120 | 根据梯度下降法: 121 | $$\mathbf{\vec x}^{\prime}= \mathbf{\vec x}-\epsilon\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})$$ 122 | 应用在点 \\(\mathbf{\vec x}\_0\\),我们有: 123 | $$ f(\mathbf{\vec x}\_0-\epsilon\mathbf{\vec g})\approx f(\mathbf{\vec x}\_0)-\epsilon\mathbf{\vec g}^{T}\mathbf{\vec g}+\frac 12\epsilon^{2}\mathbf{\vec g}^{T}\mathbf H \mathbf{\vec g}$$ 124 | - 第一项代表函数在点 \\(\mathbf{\vec x}\_0\\) 处的值 125 | - 第二项代表由于斜率的存在,导致函数值的变化 126 | - 第三项代表由于曲率的存在,对于函数值变化的矫正 127 | 128 | 如果第三项较大,则很有可能导致:沿着负梯度的方向,函数值反而增加! 129 | - 如果 \\(\mathbf{\vec g}^{T}\mathbf H \mathbf{\vec g} \le 0\\) ,则无论 \\(\epsilon\\) 取多大的值, 可以保证函数值是减小的 130 | - 如果 \\(\mathbf{\vec g}^{T}\mathbf H \mathbf{\vec g} \gt 0\\), 则学习率 \\(\epsilon\\) 不能太大。此时根据最速下降法,求解最优化问题: 131 | $$\epsilon^{\*}=\arg\min\_{\epsilon,\epsilon \gt 0 }f(\mathbf{\vec x}\_0-\epsilon\mathbf{\vec g}) $$ 132 | 根据 \\(\frac{\partial }{\partial \epsilon} f(\mathbf{\vec x}\_0-\epsilon\mathbf{\vec g})=0\\) 有: 133 | $$ \epsilon^{\*}=\frac{\mathbf{\vec g}^{T}\mathbf{\vec g}}{\mathbf{\vec g}^{T}\mathbf H\mathbf{\vec g}}$$ 134 | 135 | 136 | 4. 由于海森矩阵为实对称阵,因此它可以进行特征值分解。假设其特征值从大到小排列为: 137 | $$ \lambda_1,\lambda_2,\cdots,\lambda_n$$ 138 | 其瑞利商为 \\(R(\mathbf{\vec x})=\frac{\mathbf{\vec x}^{T}\mathbf H\mathbf{\vec x}}{\mathbf{\vec x}^{T}\mathbf{\vec x}},\mathbf{\vec x} \ne \mathbf{\vec 0}\\),可以证明: 139 | $$\lambda\_n \le R(\mathbf{\vec x}) \le \lambda_1\\\ 140 | \lambda_1=\max\_{\mathbf{\vec x}\ne \mathbf{\vec 0}} R(\mathbf{\vec x})\\\ 141 | \lambda_n=\min\_{\mathbf{\vec x}\ne \mathbf{\vec 0}} R(\mathbf{\vec x}) $$ 142 | 根据: 143 | $$ \epsilon^{\*}=\frac{\mathbf{\vec g}^{T}\mathbf{\vec g}}{\mathbf{\vec g}^{T}\mathbf H\mathbf{\vec g}}$$ 144 | 可知海森矩阵决定了学习率的取值范围。最坏的情况下,梯度 \\(\mathbf{\vec g}\\) 与海森矩阵最大特征值 \\(\lambda_1\\) 对应的特征向量对齐,则此时最优学习率为 \\(\frac {1}{\lambda_1}\\) 145 | 146 | 5. 二阶导数可以配合一阶导数来决定驻点的类型: 147 | - 局部极小点:\\(f^{\prime}(x)=0,f^{\prime\prime}(x)\gt 0\\) 148 | - 局部极大点:\\(f^{\prime}(x)=0,f^{\prime\prime}(x)\lt 0\\) 149 | - \\(f^{\prime}(x)=0,f^{\prime\prime}(x)= 0\\) :驻点的类型可能为任意三者之一。 150 | 151 | 对于多维的情况类似: 152 | - 局部极小点:\\(\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})=0 \\),且海森矩阵为正定的(即所有的特征值都是正的)。当海森矩阵为正定时,任意方向的二阶偏导数都是正的。 153 | - 局部极大点:\\(\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})=0 \\),且海森矩阵为负定的(即所有的特征值都是负的)。当海森矩阵为负定时,任意方向的二阶偏导数都是负的。 154 | - \\(\nabla \_{\mathbf{\vec x}} f(\mathbf{\vec x})=0 \\),且海森矩阵的特征值中至少一个正值、至少一个负值时,为鞍点。 155 | - 当海森矩阵非上述情况时,驻点类型无法判断。 156 | 157 | 下图为 \\(f(\mathbf{\vec x})=x_1^{2}-x_2^{2}\\) 在原点附近的等值线。其海森矩阵为一正一负。沿着 \\(x_1\\) 方向,曲线向上;沿着 \\(x_2\\) 方向,曲线向下。鞍点就是在一个横截面内的局部极小值,另一个横截面内的局部极大值。 158 | ![saddle.PNG](../imgs/4/saddle.PNG) 159 | 160 | ### 4. 牛顿法 161 | 1. 梯度下降法有个缺陷:它没有利用海森矩阵的信息。海森矩阵确定了不同方向的二阶导数。 162 | - 当海森矩阵的条件数较大时,不同方向的梯度的变化差异很大。在某些方向上,梯度变化很快;在有些方向上,梯度变化很慢。梯度下降法没有海森矩阵的参与,也就不知道应该优先搜索导数长期为负的方向。 163 | - 当海森矩阵的条件数较大时,也难以选择合适的步长。步长必须足够小,从而能够适应较强曲率的地方(对应着较大的二阶导数)。但是如果步长太小,对于曲率较小(对应着较小的二阶导数)的方向则推进太慢。 164 | > 曲率越大,则曲率半径越小 165 | 166 | 下图是利用梯度下降法寻找函数最小值的路径。该函数是二次函数,海森矩阵条件数为 5,表明最大曲率是最小曲率的5倍。红线为梯度下降的搜索路径。 167 | 168 | ![g_descent.PNG](../imgs/4/g_descent.PNG) 169 | 170 | 2. 牛顿法利用了海森矩阵的信息。 171 | 172 | 考虑泰勒展开式: 173 | $$f(\mathbf{\vec x}) \approx f(\mathbf{\vec x}\_0)+(\mathbf{\vec x}-\mathbf{\vec x}\_0 )^{T}\mathbf{\vec g}+\frac 12(\mathbf{\vec x}-\mathbf{\vec x}\_0)^{T}\mathbf H (\mathbf{\vec x}-\mathbf{\vec x}\_0)$$ 174 | 其中 \\(\mathbf{\vec g}\\) 为 \\(\mathbf{\vec x}\_0\\) 处的梯度; \\(\mathbf H\\) 为 \\(\mathbf{\vec x}\_0\\) 处的海森矩阵。 175 | 176 | 如果 \\(\mathbf{\vec x}\\) 为极值点,则有: \\(\frac{\partial}{\partial \mathbf{\vec x}}f(\mathbf{\vec x})=\mathbf{\vec 0}\\),于是有: 177 | $$\mathbf{\vec x}^{\*}=\mathbf{\vec x}\_0 -\mathbf H^{-1}\mathbf{\vec g}$$ 178 | 179 | - 当 \\(f\\) 是个正定的二次型,则牛顿法直接一次就能到达最小值点 180 | - 当 \\(f\\) 不是正定的二次型,则可以在局部近似为正定的二次型,那么采用多次牛顿法即可到达最小值点。 181 | 182 | 当位于一个极小值点附近时,牛顿法比梯度下降法能更快地到达极小值点。但是如果是在一个鞍点附近,牛顿法效果很差;而梯度下降法此时效果较好(除非梯度的方向指向了鞍点)。 183 | 184 | 3. 仅仅利用了梯度的优化算法(如梯度下降法)称作一阶优化算法;同时利用了海森矩阵的优化算法(如牛顿法)称作二阶优化算法 185 | 186 | 4. 深度学习中,目标函数非常复杂,无法保证可以通过上述优化算法进行优化。因此我们有时会限定目标函数具有`Lipschitz`连续,或者其导数`Lipschitz`连续。 187 | 188 | `Lipschitz`连续的定义:对于函数 \\(f\\),存在一个`Lipschitz`常数 \\(\mathcal L\\),使得 189 | $$\forall \mathbf{\vec x},\forall \mathbf{\vec y}, |f(\mathbf{\vec x})-f(\mathbf{\vec y})| \le \mathcal |\mathbf{\vec x}-\mathbf{\vec y}||_2 $$ 190 | 191 | `Lipschitz`连续的意义是:输入的一个很小的变化,会引起输出的一个很小的变化。 192 | 193 | 5. 凸优化在某些特殊的领域取得了巨大的成功。但是在深度学习中,大多数优化问题都难以用凸优化来描述。凸优化的重要性在深度学习中大大降低。凸优化仅仅作为一些深度学习算法的子程序。 194 | 195 | ## 四、 约束优化 196 | 1. 在有的最优化问题中,我们希望输入 \\(x\\) 位于特定的集合 \\(\mathbb S\\) 中,这称作约束优化问题。集合 \\(\mathbb S\\) 内的点 \\(x\\) 称作可行解。集合 \\(\mathbb S\\) 也称作可行域。 197 | 198 | 2. 约束优化的一个简单方法是:对梯度下降法进行修改。 199 | - 如果我们采用一个小的常数 \\(\epsilon\\),则每次迭代后,将得到的新的 \\(x\\) 映射到集合 \\(\mathbb S\\) 中 200 | - 如果我们使用线性搜索: 201 | - 我们可以我们每次只搜索那些使得新的 \\(x\\) 位于集合 \\(\mathbb S\\) 中的那些 \\(\epsilon\\) 202 | - 另一个做法:将线性搜索得到的新的 \\(x\\) 映射到集合 \\(\mathbb S\\) 中 203 | - 或者:在线性搜索之前,将梯度投影到可行域的切空间内 204 | 205 | 3. `Karush–Kuhn–Tucker:KKT`方法提供了一个通用的解决框架。假设求解 \\(f(x)\\) 的约束最小化问题。 206 | 207 | 首先我们通过等式和不等式来描述可行域 \\(\mathbb S\\) 。假设通过 \\(m\\) 个函数 \\(g_i\\) 和 \\(n\\) 个函数 \\(h_j\\) 来描述可行域: 208 | $$ \mathbb S=\\{x \mid g_i(x)=0,h_j(x) \le 0;\quad i=1,2,\cdots,m;j=1,2,\cdots,n\\}$$ 209 | 210 | 引入`KKT`乘子: \\(\lambda_1,\cdots,\lambda_m,\alpha_1,\cdots,\alpha_n\\),定义广义拉格朗日函数: 211 | $$L(x,\mathbf{\vec \lambda},\mathbf{\vec \alpha})=f(x)+\sum\_{i=1}^{m}\lambda\_ig\_i(x)+\sum\_{j=1}^{n}\alpha\_jh\_j(x) $$ 212 | 则原始的最优化问题: 213 | $$\min\_{x\in \mathbb S}f(x)$$ 214 | 等价于 215 | $$\min\_x\max\_{\mathbf{\vec\lambda}}\max\_{\mathbf{\vec \alpha},\alpha_j \ge 0}L(x,\mathbf{\vec \lambda},\mathbf{\vec \alpha}) $$ 216 | > 因为当满足约束时 \\(\max\_{\mathbf{\vec\lambda}}\max\_{\mathbf{\vec \alpha},\alpha_j \ge 0}L(x,\mathbf{\vec \lambda},\mathbf{\vec \alpha})=f(x)\\) 217 | > 218 | > 而违反任意约束时 \\(\max\_{\mathbf{\vec\lambda}}\max\_{\mathbf{\vec \alpha},\alpha_j \ge 0}L(x,\mathbf{\vec \lambda},\mathbf{\vec \alpha})=\infty\\) 219 | 220 | - 等式约束对应的符号并不重要,因为可以自由选择每个 \\(\lambda_i\\) 的符号,因此我们随机将其定义为加法或者减法。 221 | - 不等式约束中,如果对于最终解 \\(x^{\*}\\) 有 \\(h_i(x^{\*})=0\\),则我们称这个约束 \\(h_i(x)\\) 是活跃的。 -------------------------------------------------------------------------------- /chapters/5_basic_ml.md: -------------------------------------------------------------------------------- 1 | # 章5. 机器学习基础 2 | 3 | ## 一、基本概念 4 | 5 | 1. 为了评估机器学习算法的能力,我们必须设计其性能的衡量指标。但是有些情况下,很难决定应该衡量什么。 6 | - 在执行翻译任务时,我们是应该衡量整个翻译结果的准确率,还是衡量每个单词翻译的准确率? 7 | - 在密度估计任务中,很多模型都是隐式地表示概率分布。此时计算样本空间某个点的真实概率是不可行的,因此也就无法判断该点的概率估计的准确率。 8 | 9 | 2. 无监督学习和监督学习之间的界线通常是模糊的。对于求解监督学习问题 \\(p(y\mid \mathbf{\vec x})\\),我们可以先求解无监督学习问题来学习联合概率分布 \\(p(\mathbf{\vec x},y)\\),然后计算: 10 | $$p(y\mid \mathbf{\vec x})=\frac{p(\mathbf{\vec x},y)}{\sum\_{y^{\prime}}p(\mathbf{\vec x},y^{\prime})} $$ 11 | 12 | 3. 通常我们利用最小化训练误差来训练模型,但是我们真正关心的是测试误差。因为我们通过测试误差来评估模型的泛化能力。 13 | - 统计理论表明:如果训练集和测试集中的样本都是独立同分布产生的,则有:模型的训练误差的期望等于模型的测试误差的期望 14 | - 我们将训练集和测试集共同的、潜在的样本分布称作:数据生成分布,记作 \\(p\_{data}\\) 15 | 16 | 4. 当我们使用机器学习算法时,决定机器学习算法效果的两个因素: 17 | - 降低训练误差 18 | - 缩小训练误差和测试误差的差距 19 | 20 | 这两个因素对应着机器学习中的两个主要挑战:欠拟合和过拟合。 21 | - 欠拟合是由于模型不能在训练集上获取足够小的训练误差 22 | - 过拟合是由于模型的训练误差和测试误差之间的差距太大 23 | 24 | 通过调整模型的容量`capacity`可以缓解该问题。模型的容量是指其拟合各种函数的能力。 25 | - 容量低的模型容易发生欠拟合 26 | - 容量高的模型容易发生过拟合 27 | 28 | 5. 有多种方法来改变模型的容量,如选择模型的假设空间:即代表模型的函数集合(这也称作模型的表示容量`representational capacity`)。通常在这些函数中挑选出最佳的函数是非常困难的优化问题,实际应用中只是挑选一个使得训练误差足够低的函数即可。这些额外的限制因素(比如优化算法的不完善)意味着学习算法的有效容量`effective capacity`可能小于模型的表示容量。 29 | 30 | 6. 统计学习理论提供了量化模型容量的方法。其中最出名的是`VC`维理论。统计学习理论中最重要的结论表明:训练误差与泛化误差之间差异的上界随着模型容量增长而增长,随着训练样本增多而下降。 31 | 32 | 虽然上述结论对于机器学习算法有很好的指导作用,但是深度学习很难应用。原因有二: 33 | - 边界太宽泛 34 | - 难以确定深度学习的容量。由于深度学习模型的有效容量受限于优化算法,因此确定深度学习模型的容量特别困难。 35 | 36 | 7. 通常泛化误差是关于模型容量的 `U`形函数。随着模型容量增大,训练误差会下降直到逼近其最小值;泛化误差先减小后增大;泛化误差与训练误差的差值会增大。 37 | ![capacity](../imgs/5/capacity.PNG) 38 | 39 | 8. 机器学习的“没有免费的午餐定理”表明:在所有可能的数据生成分布上,没有一个机器学习算法总是比其他的要好。 40 | 41 | 该结论仅在考虑所有可能的数据分布时才成立。事实上现实任务中,特定任务的数据分布往往满足某类假设,从而我们可以设计在这类分布上效果更好的学习算法。 42 | 43 | 这意味着机器学习并不需要寻找一个通用的学习算法,而是寻找一个在我们关心的数据分布上效果最好的算法。 44 | 45 | 9. 正则化是我们对学习算法做的一个修改,这种修改趋向于降低泛化误差(而不是降低训练误差)。正则化是机器学习领域的中心问题之一 46 | - 没有免费的午餐定理说明了没有最优的学习算法,因此也没有最优的正则化形式。我们必须挑选一个适合我们任务的正则化形式。 47 | 48 | 10. 大多数机器学习算法具有超参数。超参数的值无法通过学习算法拟合出来(比如正则化项的系数、控制模型容量的参数 ),为了解决这个问题我们引入验证集。 49 | - 我们将训练数据分成两个不相交的子集:训练集用于学习模型,验证集用于更新超参数。 50 | - 验证集通常会低估泛化误差。因此当超参数优化完成后,需要通过测试集来估计泛化误差。 51 | 52 | ## 二、估计、偏差、方差 53 | 1. 点估计:对参数 \\(\theta\\) 的一个预测,记作 \\(\hat\theta\\)。 54 | 55 | 假设 \\(\\{x_1,x_2,\cdots,x_m\\}\\) 为独立同分布的数据点,该分布由参数 \\(\theta\\) 决定。则参数 \\(\theta\\) 的点估计为某个函数: 56 | $$\hat\theta\_m =g(x_1,x_2,\cdots,x_m) $$ 57 | 注意:点估计的定义并不要求 \\(g\\) 返回一个接近真实值 \\(\theta\\) 。 58 | 59 | 根据频率学派的观点,真实参值 \\(\theta\\) 是固定的,但是未知的。 \\(\hat\theta\_m\\) 是数据点的函数。由于数据是随机采样的,因此 \\(\hat\theta\_m\\) 是个随机变量。 60 | 61 | 2. 偏差定义为: \\(bias(\hat\theta\_m)=\mathbb E(\hat\theta\_m)-\theta\\),期望作用在所有数据上。 62 | - 如果 \\(bias(\hat\theta\_m)=0\\) ,则称估计量 \\(\hat\theta\_m\\) 是无偏的。 63 | - 如果 \\(\lim\_{m\rightarrow \infty}bias(\hat\theta\_m)=0\\),则称估计量 \\(\hat\theta\_m\\) 是渐近无偏的。 64 | 65 | 无偏估计并不一定是最好的估计。 66 | 67 | 3. 点估计的例子例: 68 | - 一组服从均值为 \\(\theta\\) 的伯努利分布的独立同分布样本 \\(\\{x_1,x_2,\cdots,x_m\\}\\) , \\(\hat\theta\_m=\frac 1m\sum\_{i=1}^{m}x_i\\) 为 \\(\theta\\) 的无偏估计。 69 | - 一组服从均值为 \\(\mu\\),方差为 \\(\sigma^{2}\\) 的高斯分布的独立同分布样本 \\(\\{x_1,x_2,\cdots,x_m\\}\\): 70 | - \\(\hat\mu\_m=\frac 1m\sum\_{i=1}^{m}x_i\\) 为 \\(\mu\\) 的无偏估计。 71 | - \\(\hat\sigma^{2}\_m=\frac 1m\sum\_{i=1}^{m}(x_i-\hat\mu_m)^{2}\\) 为 \\(\sigma^{2}\\) 的有偏估计。因为 \\(\mathbb E[\hat\sigma^{2}\_m]=\frac{m-1}{m}\sigma^{2}\\) 72 | - \\(\tilde\sigma^{2}\_m=\frac {1}{m-1}\sum\_{i=1}^{m}(x_i-\hat\mu_m)^{2}\\) 为 \\(\sigma^{2}\\) 的无偏估计。 73 | 74 | 4. 估计量的方差记作 \\(Var(\hat \theta)\\),标准差记作 \\(SE(\hat\theta)\\) 。它们刻画的是:当从潜在的数据分布中独立的获取数据集时,估计量的变化程度。 75 | 76 | 例:一组服从均值为 \\(\theta\\) 的伯努利分布的独立同分布样本 \\(\\{x_1,x_2,\cdots,x_m\\}\\) , \\(\hat\theta\_m=\frac 1m\sum\_{i=1}^{m}x_i\\) 为 \\(\theta\\) 的无偏估计, \\(Var(\hat\theta_m)=\frac 1m \theta(1-\theta)\\) 。表明估计量的方差随 \\(m\\) 增加而下降。这是估计量的共性。 77 | 78 | 5. 通常我们希望的是: 79 | - 估计量的偏差比较小,即估计量的期望值接近真实值 80 | - 估计量的方差比较小,即估计量的波动比较小 81 | 82 | 6. 均值估计:\\(\hat\mu_m=\frac 1m\sum\_{i=1}^{m}x_i\\) 83 | 84 | 其标准差为: 85 | $$SE(\hat\mu_m)=\sqrt{ Var\left[\frac 1m\sum\_{i=1}^{m}x_i\right]}=\frac{\sigma}{\sqrt{m}} $$ 86 | 其中 \\(\sigma^{2}\\) 是样本 \\(x_i\\) 的真实方差,但是这个量难以估计。 87 | 88 | \\(\sqrt{\frac 1m\sum\_{i=1}^{m}(x_i-\hat\mu_m)^{2}}\\) 和 \\(\sqrt{\frac {1}{m-1}\sum\_{i=1}^{m}(x_i-\hat\mu_m)^{2}}\\) 都不是真实标准差 \\(\sigma\\) 的无偏估计。这两种方法都倾向于低估真实的标准差。但是实际应用中,\\(\sqrt{\frac {1}{m-1}\sum\_{i=1}^{m}(x_i-\hat\mu_m)^{2}}\\) 是一种比较合理的近似估计,尤其是当 \\(m\\) 较大的时候。 89 | 90 | 7. 偏差和方差衡量的是估计量的两个不同误差来源: 91 | - 偏差衡量的是偏离真实值的误差的期望 92 | - 方差衡量的是由于任意的数据采样可能导致的估计值的波动 93 | 94 | 考虑均方误差 95 | $$MSE=\mathbb E[(\hat \theta_m-\theta)^{2}] $$ 96 | 97 | 根据: 98 | $$bias(\hat\theta\_m)^{2}+Var(\hat\theta_m)=[\mathbb E(\hat\theta\_m)-\theta]^{2}+\mathbb E[(\hat\theta\_m-\mathbb E(\hat\theta\_m))^{2}] \\\ 99 | = \mathbb E(\hat\theta\_m)^{2}+\theta^{2}-2\theta\mathbb E(\hat\theta\_m)+\mathbb E[\hat\theta\_m^{2}]-\mathbb E(\hat\theta\_m)^{2}\\\ 100 | =\mathbb E[\hat\theta\_m^{2}]-2\theta\mathbb E(\hat\theta\_m)+\theta^{2}\\\ 101 | =\mathbb E[(\hat \theta_m-\theta)^{2}]=MSE $$ 102 | 即:`MSE`包含了偏差和方差。 103 | 104 | 8. 偏差、方差与模型容量有关。用`MSE`衡量的泛化误差时,增加容量会增加方差、降低偏差,而`MSE`为`U`形曲线。 105 | 106 | ![bias_var](../imgs/5/bias_var.PNG) 107 | 108 | 9. 我们通常希望当数据集中的点 \\(m\\) 增加时,点估计会收敛到对应参数的真实值。即: 109 | $$\text{plim}\_{m\rightarrow \infty}\hat\theta_m=\theta $$ 110 | \\(\text{plim}\\) 表示依概率收敛。即对于任意的 \\(\epsilon \gt 0\\),当 \\(m\rightarrow \infty\\) 时,有: \\(P(|\hat\theta_m -\theta|)\gt \epsilon \rightarrow 0\\) 111 | 112 | 上述条件也称做一致性。它保证了估计偏差会随着样本数量的增加而减少。 113 | > 渐近无偏不一定意味着一致性。如在正态分布产生的数据集中,我们可以用 \\(\hat\mu_m=x_1\\) 作为 \\(\mu\\) 的一个估计。它是无偏的,因为 \\(\mathbb E[x_1]=\mu\\),所以不论观测到多少个数据点,该估计都是无偏的。但是他不是一致的,因为他不满足 \\(\text{plim}\_{m\rightarrow \infty}\hat\mu_m=\mu\\) 114 | 115 | ## 三、最大似然估计 116 | 117 | 1. 假设数据集 \\(\mathbf X=\\{\mathbf{\vec x}\_1,\mathbf{\vec x}\_2,\cdots,\mathbf{\vec x}\_m\\}\\) 中的样本独立同分布地由 \\(p\_{data}(\mathbf{\vec x})\\) 产生,但是该分布是未知的。 118 | 119 | \\(p\_{model}(\mathbf{\vec x};\theta)\\) 是一族由 \\(\theta\\) 参数控制的概率分布函数族。我们希望通过它来估计真实的概率分布函数 \\(p\_{data}(\mathbf{\vec x})\\) ,也就是要估计 \\(\theta\\) 参数。 120 | 121 | 最常用的估计准确是:最大似然估计。即: 122 | $$ \theta\_{ML}=\arg\max\_{\theta}p\_{model}(\mathbf X;\theta)\\\ 123 | =\arg\max\_\theta\prod\_{i=1}^{m}p\_{model}(\mathbf{\vec x}\_i;\theta)$$ 124 | 由于概率的乘积会因为很多原因不便使用(如容易出现数值下溢出),因此转换为对数的形式: 125 | $$\theta\_{ML}=\arg\max\_\theta\sum\_{i=1}^{m}\log p\_{model}(\mathbf{\vec x}\_i;\theta) $$ 126 | 因为 \\(m\\) 与 \\(\theta\\) 无关,因此它也等价于: 127 | $$\theta\_{ML}=\arg\max\_\theta\sum\_{i=1}^{m}\frac 1m \log p\_{model}(\mathbf{\vec x}\_i;\theta) $$ 128 | 由于数据集的经验分布为: 129 | $$ 130 | \hat p\_{data}(\mathbf{\vec x})=\frac 1m\sum\_{i=1}^{m}\delta(\mathbf{\vec x}-\mathbf{\vec x}\_i) 131 | $$ 132 | 其中 \\(\delta(\cdot)\\) 为狄拉克函数。因此: 133 | $$\theta\_{ML}=\arg\max\_\theta\mathbb E\_{\mathbf{\vec x}\sim \hat p\_{data}} \log p\_{model}(\mathbf{\vec x};\theta) $$ 134 | 135 | 2. 考虑数据集的经验分布 \\(\hat p\_{data}\\) 和真实分布函数的估计量 \\(p\_{model}\\) 之间的差异,`KL`散度为: 136 | $$D|\_{KL}(\hat p\_{data} || p\_{model};\theta) =\mathbb E\_{\mathbf{\vec x}\sim \hat p\_{data}}[\log \hat p\_{data}(\mathbf{\vec x})-\log p\_{model}(\mathbf{\vec x;\theta})]$$ 137 | 由于 \\(\log \hat p\_{data}(\mathbf{\vec x})\\) 与 \\(\theta\\) 无关,因此要使得 \\(D|\_{KL}(\hat p\_{data} || p\_{model};\theta)\\) 最小,则只需要最小化 138 | $$\mathbb E\_{\mathbf{\vec x}\sim \hat p\_{data}}[-\log p\_{model}(\mathbf{\vec x};\theta)]$$ 139 | 也就是最大化 140 | $$\mathbb E\_{\mathbf{\vec x}\sim \hat p\_{data}} \log p\_{model}(\mathbf{\vec x};\theta) $$ 141 | 因此:最大似然估计就是最小化数据集的经验分布 \\(\hat p\_{data}\\) 和真实分布函数的估计量 \\(p\_{model}\\) 之间的差异 142 | 143 | 3. 最大似然估计可以扩展到估计条件概率。假设数据集 \\(\mathbf X=\\{\mathbf{\vec x}\_1,\mathbf{\vec x}\_2,\cdots,\mathbf{\vec x}\_m\\}\\),对应的观测值为 \\(\mathbf Y=\\{y_1,y_2,\cdots,y_m\\}\\)。 144 | 145 | 则条件概率的最大似然估计为: 146 | $$ \theta\_{ML}=\arg\max\_\theta P(\mathbf Y\mid \mathbf X;\theta)$$ 147 | 148 | 如果样本是独立同分布的,则可以分解成: 149 | $$\theta\_{ML}=\arg\max\_\theta\sum\_{i=1}^{m}\log P(y_i\mid \mathbf{\vec x}\_i;\theta) $$ 150 | 151 | 4. 最大似然估计有两个很好的性质: 152 | - 在某些条件下,最大似然估计具有一致性。这意味着当训练样本数量趋向于无穷时,参数的最大似然估计依概率收敛到参数的真实值。这些条件为: 153 | - 真实分布 \\(p\_{data}\\) 必须位于分布函数族 \\(p\_{model}(\cdot;\theta)\\) 中。否则没有估计量可以表示 \\(p\_{data}\\) 154 | - 真实分布 \\(p\_{data}\\) 必须对应一个 \\(\theta\\) 值。否则从最大似然估计恢复出真实分布 \\(p\_{data}\\) 之后,也不能解出参数 \\(\theta\\) 155 | - 最大似然估计具有很好的统计效率`statistic efficiency`。即只需要较少的样本就能达到一个良好的泛化误差。 156 | 157 | 因此最大似然估计通常是机器学习中的首选估计准则。当样本数量太少导致过拟合时,正则化技巧是最大似然的有偏估计版本。 158 | 159 | ## 四、贝叶斯估计 160 | 161 | 1. 在最大似然估计中,频率学派的观点是:真实参数 \\(\theta\\) 是未知的固定的值,而点估计 \\(\hat\theta\\) 是随机变量(因为数据是随机生成的,所以数据集是随机的)。 162 | 163 | 贝叶斯学派认为:数据集时能够直接观测到的,因此不是随机的。而真实参数 \\(\theta\\) 是未知的、不确定的,因此 \\(\theta\\) 是随机变量。 164 | - 我们将对于 \\(\theta\\) 的已知的知识表示成先验概率分布 \\(p(\theta)\\),表示我们在观测到任何数据之前,对于参数 \\(\theta\\) 的可能取值的一个分布。 165 | > 在机器学习中,我们一般会选取一个相当宽泛的(熵比较高)的先验分布,如均匀分布。 166 | 167 | - 假设观测到一组数据 \\(\mathbf X=\\{\mathbf{\vec x}\_1,\mathbf{\vec x}\_2,\cdots,\mathbf{\vec x}\_m\\}\\) ,根据贝叶斯法则,我们有: 168 | $$p(\theta\mid\mathbf X ) =\frac{p(\mathbf X\mid \theta)p(\theta)}{p(\mathbf X)}$$ 169 | 170 | 2. 贝叶斯估计与最大似然估计有两个重要区别: 171 | - 贝叶斯估计预测下一个样本的分布为: 172 | $$p(\mathbf{\vec x}\_{m+1}\mid \mathbf{\vec x}\_1,\mathbf{\vec x}\_2,\cdots,\mathbf{\vec x}\_m) =\int p(\mathbf{\vec x}\_{m+1}\mid\theta)p(\theta\mid \mathbf{\vec x}\_1,\mathbf{\vec x}\_2,\cdots,\mathbf{\vec x}\_m)d\theta$$ 173 | 174 | 而最大似然估计预测下一个样本的分布为: \\(p\_{model} (\mathbf{\vec x} ;\theta) \\) 175 | 176 | - 贝叶斯估计会使得概率密度函数向着先验概率分布的区域偏移。 177 | 178 | 3. 当训练数据有限时,贝叶斯估计通常泛化性能更好。当训练样本数量很大时,往往计算代价较高。 179 | 180 | 4. 最大后验估计`MAP`:有时候我们希望获取参数 \\(\theta\\) 的一个可能的值,而不仅仅是它的一个分布。此时可以通过最大后验估计选择后验概率最大的点: 181 | $$ \theta\_{MAP}=\arg\max\_{\theta} p(\theta \mid \mathbf X)\\\ 182 | =\arg\max\_{\theta} \left[ \log p(\mathbf X\mid \theta) +\log p(\theta)\right]$$ 183 | 184 | 最大后验估计具有最大似然估计没有的优势:拥有先验知识带来的信息。该信息有助于减少估计量的方差,但是增加了偏差。 185 | 186 | 5. 有一些正则化方法可以被解释为最大后验估计,正则化项就是对应于 \\(\log p(\theta)\\) 。 187 | - 并非所有的正则化方法都对应为某个最大后验估计。如有些正则化项依赖于数据,显然不是一个先验概率分布 188 | 189 | 6. `MAP`贝叶斯估计提供了一个直观的方法去设计复杂的、可解释的正则化项。 190 | - 更复杂的正则化项可以通过先验分布为混合高斯分布得到(而不仅仅是一个单独的高斯分布) 191 | 192 | ## 五、基本机器学习 193 | 1. 支持向量机中最常用的核函数是高斯核 \\(k(\mathbf{\vec u},\mathbf{\vec v})=\mathcal N(\mathbf{\vec u}-\mathbf{\vec v};\mathbf{\vec 0};\sigma^{2}\mathbf I)\\) 194 | 195 | - 这个核也称作径向基函数`radial basis function:RBF`。因为其值从 \\(\mathbf{\vec u}\\) 沿着 \\(\mathbf{\vec v}\\) 向外辐射的方向减小。 196 | - 高斯核对应于无穷维空间中的点积 197 | 198 | 2. \\(k\\) 近邻法是个非参数学习算法,它没有任何参数。事实上它没有一个真正的训练阶段或者学习过程。 199 | - \\(k\\) 近邻法具有非常高的容量。这使得它在训练样本数量较大时能获得较高的精度。 200 | - 它的缺点有: 201 | - 计算成本很高。因为我们需要构建一个 \\(m\times m\\) 的核矩阵,其计算量为 \\(O(m^{2})\\),当数据集时几十亿个样本时,计算量是不可接受的。 202 | - 在训练集较小时,返回能力很差 203 | - 它无法判断特征的重要性。假设有 1000 个特征,且输出就等于第一个特征,\\(k\\) 近邻法无法检测到这种最简单的模式。 204 | 205 | 3. 如果我们运行学习任意大小的决策树,那么可以将决策树算法视作非参数算法。但是实践中经常有大小限制,从而使得决策树成为有参数模型。 206 | 207 | 决策树的问题在于:由于决策树使用平行于坐标轴的拆分,使得一些对于逻辑回归很简单的问题很费力。比如:当 \\(x^{(2)}\gt x^{(1)}\\) 时为正类;否则为反类。这种拆分边界并不平行于坐标轴,使得决策树会用许多层的拆分来逼近这个边界。 208 | 209 | 4. 一个经典的无监督学习任务是寻找数据的最佳表示。常见的有: 210 | - 低维表示:视图将 \\(\mathbf{\vec x}\\) 中的信息尽可能压缩在一个较低维空间中 211 | - 系数表示:将数据嵌入到大多数项为零的一个表示中。系数表示通常需要增加维度 212 | - 独立表示:使数据的各个特征相互独立 213 | 214 | 5. `PCA`不仅将数据压缩到低维,它也使得降维之后的数据各特征相互独立。 215 | >注意:`PCA`推导过程中,并没有要求数据中心化;但是在推导协方差矩阵时,要求数据中心化。此时: 216 | $$ Var[\mathbf{\vec z}]=\frac{1}{m-1}\mathbf Z^{T}\mathbf Z=\frac{1}{m-1}\Sigma^{2}$$ 217 | 218 | 6. 聚类问题本身是病态的。即:没有某个标准来衡量聚类的效果。 219 | - 我们可以简单的度量聚类的性质,如每个聚类的元素到该类中心点的平均距离。但是我们不知道这个平均距离对应于真实世界的物理意义。 220 | - 另外,可能很多不同的聚类都很好地对应了现实世界的某些属性,它们都是合理的。比如:在图片识别中包含的图片有:红色卡车、红色汽车、灰色卡车、灰色汽车。我们聚类成:红色一类、灰色一类;也可以聚类成:卡车一类、汽车一类。 221 | > 这个问题说明我们分布式表示的优点:我们可以对每个车辆赋予两个属性:一个表示颜色、一个表示型号。 222 | 223 | ## 六、随机梯度下降 224 | 1. 随机梯度下降时梯度下降的一个扩展,几乎所有的深度学习算法都用到了该算法。 225 | 226 | 2. 机器学习算法中,损失函数通常可以分解成每个样本的损失函数之和。如: 227 | $$J(\theta)=\mathbb E\_{\mathbf{\vec x },y\sim \hat p\_{data}}L(\mathbf{\vec x},y;\theta)=\frac 1m\sum\_{i=1}^{m}L(\mathbf{\vec x}\_i,y\_i;\theta) $$ 228 | 其中 \\(L\\) 是每个样本的损失函数 \\(L(\mathbf{\vec x},y;\theta)=-\log p(y\mid \mathbf{\vec x};\theta)\\)。 229 | 230 | 总损失函数的梯度为: 231 | $$\nabla\_\theta J(\theta)=\frac 1m \sum\_{i=1}^{m}\nabla\_\theta L(\mathbf{\vec x}\_i,y\_i;\theta)$$ 232 | 其时间复杂度为 \\(O(m)\\)。当训练集规模为数十亿时,计算一步梯度将消耗非常长的时间。 233 | 234 | 随机梯度下降法的核心是:梯度就是期望,而期望可以用小规模的样本来近似估计。具体来说:在算法的每一步我们从训练集中抽取小批量样本 \\(\mathbb B=\\{\mathbf{\vec x}\_1,\cdots,\mathbf{\vec x}\_{m^{\prime}}\\}\\),其中 \\(m^{\prime}\\) 通常是一个相对较小的数(通常从 1到几百)。更重要的是:随着 \\(m\\) 的增长, \\(m^{\prime}\\) 通常是固定的(比如在拟合几十亿的样本时,每次更新计算只适用几百个样本)。 235 | 236 | 梯度的估计可以表示成: 237 | $$ g=\frac{1}{m^{\prime}}\nabla\_\theta \sum\_{i=1}^{m^{\prime}} L(\mathbf{\vec x}\_i,y\_i;\theta)$$ 238 | 239 | 然后随机梯度下降法的迭代为(\\(\epsilon\\) 为学习率): 240 | $$\theta\leftarrow \theta-\epsilon g $$ 241 | 242 | 3. 随机梯度下降法是大规模数据上训练大型线性模型的主要方法。 243 | > 非线性模型的主要方法是:结合核技巧的线性模型,以及深度学习模型。 244 | 245 | ## 七、传统机器学习的挑战 246 | 1. 传统机器学习算法的两个困难: 247 | - 维数灾难:当数据的维数很高时,很多机器学习问题变得相当困难。因为许多传统机器学习算法简单地假设:一个新样本的输出应该大致与最接近的训练样本的输出相同。 248 | - 某些算法偏好于选择某类函数。最广泛的隐式偏好是:我们要学习的函数是平滑先验或者局部不变性先验(即先验知识表明:我们要学习的函数是平滑的、或者局部不变的)。 249 | - 这个先验知识表明:我们要学习的函数不会在一个小区域内发生较大的变化。 250 | - 很多简单算法完全依赖此先验知识来达到良好的泛化。 251 | 252 | 2. 流形:指的是连接在一起的区域。如位于三维空间中的一个曲面就是一个流形。 253 | - 在机器学习中,我们运行流形的维数发生变化,这通常发生在流行与自身相交的情况。下图中为二维中嵌入的一维流形。在交叉的地方,流形的维数发生变化。 254 | 255 | ![manifold](../imgs/5/manifold.PNG) 256 | 257 | 3. 如果我们期望机器学习算法处理 \\(\mathbb R^{n}\\) 上的所有输入时,很多机器学习问题看起来都是无解的。流形学习算法假设:\\(\mathbb R^{n}\\) 上的大部分区域都是无效的输入,我们感兴趣的输入只分布在 \\(\mathbb R^{n}\\) 中的某一组流行中。 258 | 259 | 数据位于低维流形中的假设不一定总是正确的。但是在人工智能某些场景中,如涉及到图像、声音、文本时,流形假设是对的。因为: 260 | - 我们观察到:现实生活中有意义的图片、文本、声音的概率分布都是高度集中的。 261 | - 每个样本都被其他高度相似的样本包围,可以通过应用变换来遍历该流形。如一张人脸的图片,我们逐渐移动或者旋转图中的像素变成另一张人脸图片。 262 | 263 | 4. 当数据位于低维流形中时,我们使用流形坐标,而不是 \\(\mathbb R^{n}\\) 中的坐标。 264 | - 日常生活中,道路就是一维流形。我们使用道路编号,而不是三维空间的坐标去定位。 265 | - 提取低维流形中的坐标是非常具有挑战性的 -------------------------------------------------------------------------------- /chapters/9_CNN.md: -------------------------------------------------------------------------------- 1 | # 卷积神经网络 2 | 3 | 1. 卷积神经网络`convolutional neural network:CNN`:专门处理具有类似网络结构的数据的神经网络 4 | 5 | - 如:时间序列是一维网格;图像数据是二维网格 6 | 7 | - 卷积网络是指那些至少在网络的某一层中使用了卷积运算来代替一般的矩阵乘法运算的神经网络 8 | 9 | ## 1. 卷积运算 10 | 11 | 1. 卷积示例:一个激光传感器给出输出 $x(t)$ 表示宇宙飞船在时刻 $t$ 的位置 12 | 13 | - 假设传感器包含噪声,那么我们希望利用测量结果的均值来估计飞船的位置 14 | 15 | - 我们认为:越近的测量结果越相关,于是对最近的测量结果赋予更高的权重 16 | 17 | - 令 $w(a)$ 为权重函数,其中 $a$ 表示测量结果距离当前时刻的间隔,则得到飞船位置的估计: 18 | 19 | $$ 20 | s(t)=\int x(a)w(t-a)da 21 | $$ 22 | 23 | - 这种运算就称作卷积`convolution`,用符号星号 $s(t)=(x*w)(t)$ 表示 24 | 25 | > 理论上 $w(\cdot)$ 可以为任意的实值函数。但是这里我们要求: 26 | > 27 | > - $w(\cdot)$ 是个有效的概率密度函数。否则输出就不是一个加权平均 28 | > - $w(\cdot)$ 在自变量为负数时,取值为零。否则涉及到未来函数(实际上我们只能观测到过去的结果) 29 | 30 | 2. 在卷积神经网络中,函数 $x(\cdot)$ 称作输入;函数 $w(\cdot)$ 称作核函数。而输出有时被称作特征映射 `feature map` 31 | 32 | 3. 通常当计算机处理数据时,连续的数据会被离散化。因此时间 $t$ 只能取离散值。 33 | 34 | 假设 $x(\cdot),w(\cdot)$ 都是定义在整数时刻 $t$ 上,那么得到了离散形式的卷积: 35 | 36 | $$ 37 | s(t)=(x*w)(t)=\sum_{a=-\infty}^{a=\infty}x(a)w(t-a) 38 | $$ 39 | 40 | - 实际操作中,我们只能存储有限的数据,因此这些函数的值在有限的点之外均为零。因此无限求和最终是有限的求和 41 | 42 | 4. 我们可以对多个维度进行卷积运算。如果二维图像 $\mathbf I$ 作为输入,那么我们需要使用二维的核函数 $\mathbf K$,则输出为: 43 | 44 | $$ 45 | \mathbf S(i,j)=(\mathbf I*\mathbf K)(i,j)=\sum_m\sum_n\mathbf I(m,n)\mathbf K(i-m,j-n) 46 | $$ 47 | 48 | 由于卷积是可交换的,因此等价写作: 49 | 50 | $$ 51 | \mathbf S(i,j)=(\mathbf I*\mathbf K)(i,j)=\sum_m\sum_n\mathbf I(i-m,j-n)\mathbf K(m,n) 52 | $$ 53 | 54 | 这称作我们相对输入翻转`flip`了核。 55 | 56 | > 卷积的可交换性在数学证明中有用,但是在神经网络应用中不是一个重要的性质 57 | 58 | 5. 许多神经网络库会实现一个相关的函数,称作互相关函数`cross-correlation`。它类似于卷积: 59 | 60 | $$ 61 | \mathbf S(i,j)=(\mathbf I*\mathbf K)(i,j)=\sum_m\sum_n\mathbf I(i+m,j+n)\mathbf K(m,n) 62 | $$ 63 | 64 | - 有些机器学习的库将它称作卷积。这里我们遵循传统,也将它称作卷积。只有在明确核的翻转这个上下文时,才特别指明区分 65 | 66 | 6. 在机器学习中,学习算法会为核函数在合适的位置学得恰当的值 67 | 68 | - 一个基于核翻转的卷积运算的学习算法学得的核,是采用未翻转的算法学得的核的翻转 69 | 70 | 7. 单独使用卷积运算在机器学习中很少见,卷积通常和其他函数一起使用 71 | 72 | - 无论卷积运算是否翻转了核,这些函数的组合通常不可交换 73 | 74 | 8. 一个2维卷积的例子(核未翻转): 75 | 76 | ![2d_con](../imgs/9/2d_con.png) 77 | 78 | 理论上核需要翻转(卷积的定义)。但是这里未翻转核,因此采用的是 79 | 80 | $$ 81 | \mathbf S(i,j)=(\mathbf I*\mathbf K)(i,j)=\sum_{m=0}^{1}\sum_{n=0}^{1}\mathbf I(i+m,j+n)\mathbf K(m,n) 82 | $$ 83 | 84 | - $m$ 和 $n$ 由核函数决定(这里分别为 [0,2),[0,2) ) 85 | 86 | 9. 离散卷积可以看做矩阵的乘法,但是该矩阵的一些元素被限定为:必须和另一些元素相等 87 | 88 | - 对于单变量的离散卷积,矩阵的每一行必须和上一行移动一个元素后相等,这种矩阵叫做`Toeplitz`矩阵 89 | - 对于二维的情况,卷积对应着一个双重块循环矩阵。除了元素相等的限制以外,卷积通常对应了一个非常稀疏的矩阵(几乎所有元素都为零) 90 | 91 | 10. 一个使用矩阵乘法但是不依赖矩阵的结构的特殊性的神经网络算法,都适用于卷积运算,且不需要对神经网络作出大的修改。因为卷积可以转换成矩阵乘法 92 | 93 | 11. 卷积和矩阵乘法: 94 | 95 | - 循环矩阵的定义: 96 | 97 | $$ 98 | \mathbf C=\begin{bmatrix}c_0&c_{n-1}&\cdots&c_2&c_1\\c_1&c_0&\cdots&c_3&c_2\\ 99 | \vdots&\vdots&\ddots&\vdots\\ 100 | c_{n-1}&c_{n-2}&\cdots&c_1&c_0\end{bmatrix} 101 | $$ 102 | 103 | - 我们可以利用循环矩阵求卷积 104 | 105 | - 假设有两个长度分别为 $M$ 和 $N$ 的序列 $x(i)$ 和 $w(i)$, 则卷积 106 | 107 | $$ 108 | s(i)=x(i)*w(i)=\sum_{j}x(j)w(i-j) 109 | $$ 110 | 111 | 卷积的长度为 $L=M+N-1$。 112 | 113 | 首先用 0 扩充序列 $x,w$: 114 | 115 | $$ 116 | x_p(i)=\begin{cases}x(i)&,1\le i\le M\\ 0&, M\lt i\le L\end{cases} 117 | $$ 118 | 119 | $$ 120 | w_p(i)=\begin{cases}w(i)&,1\le i\le N\\ 0&, N\lt i\le L\end{cases} 121 | $$ 122 | 123 | 由于用 $w$ 取卷积 $x$,因此构造 $w$ 的循环矩阵: 124 | 125 | $$ 126 | \mathbf W=\begin{bmatrix}w_p(1)&w_p(L)&w_p(L-1)&\cdots&w_p(2)\\ 127 | w_p(2)&w_p(1)&w_p(L)&\cdots&w_p(3)\\ 128 | \vdots&\vdots&\vdots&\ddots&\vdots\\ 129 | w_p(L)&w_p(L-1)&w_p(L-2)&\cdots&w_p(1) \end{bmatrix} 130 | $$ 131 | 132 | > 这里列优先,因此第一列是完全顺序的 133 | 134 | 则卷积为: 135 | 136 | $$ 137 | s=\mathbf W\cdot x_p= \begin{bmatrix}w_p(1)&w_p(L)&w_p(L-1)&\cdots&w_p(2)\\ 138 | w_p(2)&w_p(1)&w_p(L)&\cdots&w_p(3)\\ 139 | \vdots&\vdots&\vdots&\ddots&\vdots\\ 140 | w_p(L)&w_p(L-1)&w_p(L-2)&\cdots&w_p(1) \end{bmatrix}\cdot \begin{bmatrix}x_p(1)\\ 141 | x_p(2)\\ 142 | \vdots\\ 143 | x_p(L)\end{bmatrix} 144 | $$ 145 | 146 | 12. 二维卷积:$\mathbf S(i,j)=(\mathbf I*\mathbf K)(i,j)=\sum_m\sum_n\mathbf I(m,n)\mathbf K(i-m,j-n)$ 147 | 148 | - 先将 $\mathbf I,\mathbf K$ 扩充到 $M\times N$ 维。扩充之后的新矩阵为 $\mathbf I_p,\mathbf K_p$ 149 | 150 | - 用 $\mathbf I_p$ 构造一个列向量 $f_p$ :将 $\mathbf I_p$ 的第一行转置之后将其成为 $f_p$ 的前 $N$ 个元素;接下来是第二行的转置....第 $M$ 行的转置 151 | 152 | - 将 $\mathbf K_p$ 中的每一行,都按照一维卷积中介绍的循环矩阵生成的方法构成一个 $N\times N$ 的循环矩阵。这样的矩阵记做: $\mathbf G_1,\mathbf G_2,\cdots \mathbf G_M$ 153 | 154 | - 用这些循环矩阵构造一个大的块循环矩阵 155 | 156 | $$ 157 | \mathbf G_b=\begin{bmatrix}[\mathbf G_1]&[\mathbf G_M]&\cdots& [\mathbf G_2] \\ 158 | [\mathbf G_2]&[\mathbf G_1]&\cdots &[\mathbf G_3]\\ 159 | \vdots&\vdots&\ddots&\vdots\\ 160 | [\mathbf G_M]&[\mathbf G_{M-1}]&\cdots&[\mathbf G_1]\end{bmatrix} 161 | $$ 162 | 163 | - 于是二维卷积可以表示为: $h_b=\mathbf G_b \cdot f_p $ , 将 $h_b$ 的结果分配到 $\mathbf S$ 的各行(与构造 $f_p$ 相反的过程),即得到二维卷积 164 | 165 | ## 2. 动机 166 | 167 | 1. 卷积运算通过三个重要的思想来改进机器学习系统: 168 | - 稀疏交互`sparse interactions` 169 | - 参数共享`parameter sharing` 170 | - 等变表示`equivariant representation` 171 | 2. 一些不能被传统的神经网络处理的特殊数据可以通过卷积神经网络处理 172 | - 传统神经网络要求输入的数据是固定大小的 173 | 174 | ### 2.1 稀疏交互 175 | 176 | 1. 稀疏交互:传统的神经网络是全连接的 177 | 178 | - 传统的神经网络用矩阵乘法来建立输入与输出的连接关系。矩阵的每个参数都是独立的,它描述了每个输入单元与输出单元的交互 179 | 180 | - 这意味着每个输出单元与每个输入单元都产生交互 181 | 182 | - 卷积神经网络通过使得核规模远小于输入规模,来实现稀疏交互(也称作稀疏连接,或者稀疏权重) 183 | 184 | - 这意味着我们需要存储的参数更少,这不仅减少了模型的存储需求,也降低了计算量 185 | 186 | 2. 稀疏交互:每个输入单元影响的输出单元 187 | 188 | ![sparse_1](../imgs/9/sparse1.png) 189 | 190 | 这里给出了从下往上看时,每个输入单元影响的输出单元。 191 | 192 | - 对于传统神经网络(下图),每个输入单元影响了所有的输出单元(以 $x_3$ 为例) 193 | - 对于卷积神经网络(上图),每个输入单元只影响了3个输出单元(核宽度为3时)(以 $x_3$ 为例) 194 | 195 | 3. 稀疏交互:每个输出单元依赖的输入单元 196 | 197 | ​ ![sparse2](../imgs/9/sparse2.png) 198 | 199 | 这里给出了上往下看,每个输出单元依赖的输入单元 200 | 201 | - 对于传统神经网络(下图),每个输出单元依赖所有的输入单元(以 $s_3$ 为例) 202 | - 对于卷积神经网络(上图),每个输出单元只依赖3个输入单元(核宽度为3时)(以 $s_3$ 为例) 203 | 204 | 4. 稀疏交互:虽然每个输出单元只依赖于少量的直接输入单元,但是它可能间接依赖于大部分的间接输入单元 205 | 206 | ![sparse3](../imgs/9/sparse3.png) 207 | 208 | ​ 处在卷积网络更深层的单元,其接受域(即影响它的神经元)要比处在浅层的单元的接受域更大 209 | 210 | ### 2.2 参数共享 211 | 212 | 1. 参数共享:在模型的多个函数中使用相同的参数 213 | 214 | 2. 传统的神经网络中,当计算一层的输出时,权重矩阵的每个元素只使用一次(在与输入做矩阵乘法之后,再也用不着了)。 215 | 216 | - 而在卷积神经网络中,同一个核会在输入的不同区域做卷积运算。这意味着我们并不需要对于输入的每个位置来学习一个单独的参数(传统神经网络的做法),而是只需要学习核函数。 217 | 218 | - 核函数会在输入的不同区域之间共享 219 | 220 | > 这个区域的大小就是核函数的大小 221 | 222 | 3. 卷积神经网络显著地把模型的存储需求降低到 $k$ 个参数 ($k$ 为核矩阵的大小),因此卷积在存储需求和计算效率方面要大大优于传统神经网络的稠密矩阵的乘法运算。 223 | 224 | 4. 下面给出了卷积神经网络和传统神经网络的参数 225 | 226 | - 上图中, $x_3\rightarrow s_3$ 的权重被共享到 $x_i\rightarrow s_i,i=1,2,4,5$ 227 | - 下图中, $x_3\rightarrow s_3$ 的权重只使用了一次 228 | 229 | ![share](../imgs/9/share.png) 230 | 231 | 5. 卷积神经网络就是将小的、局部区域上的相同的线性变换(由核函数描述),应用到整个输入上。 232 | 233 | ### 2.3 等变表示 234 | 235 | 1. 等变:如果一个函数满足输入发生改变,输出也以同样的方式改变,则称它是等变的`equivariant` 236 | 237 | 2. 如果函数 $f(x),g(x)$ 满足 $f(g(x))=g(f(x))$ ,则称 $f(x) $ 对于变换 $g$ 具有等变性 238 | 239 | 3. 对于卷积神经网络,它具有平移等变的性质 240 | 241 | - 如果 $g$ 是输入的任何一个平移函数(比如说,将图片向右移动一个像素),则先对图片进行卷积之后再对结果应用平移函数 $g$ ,与先对图片应用平移函数 $g$ 再对图片进行卷积,结果是相同的 242 | 243 | 4. 当处理时间序列时,如果把输入中的一个事件向后延时,则卷积的输出中也发生相应的延时。 244 | 245 | 处理图像也类似:如果移动了输入的对象,则卷积的输出结果也移动了相同的量 246 | 247 | 5. 卷积对于其它的一些变换并不是等变的:如缩放变换(改变图像的尺寸)、角度变换。 248 | 249 | - 这些非等变的变换需要其它机制来处理(而不是卷积) 250 | 251 | ## 3. 池化 252 | 253 | 1. 卷积神经网络的卷基层通常包含三级: 254 | 255 | - 第一级:并行地执行多个卷积运算(注意:卷积是一种线性变换)。卷积的作用是从输入中提取特征。不同的核函数提取了不同的特征 256 | - 第二级:执行非线性的激活函数(如`reLU`单元)(这一级是非线性变换)。这一级有时也被称作探测级。其作用是引入非线性。 257 | - 第三极:通过池化函数来调整卷基层的输出。池化也叫亚采样或者下采样。它降低了各个输出的维度,但保持大部分重要的信息。 258 | 259 | > 如:对于一个图形,如水平梯度的卷积核 260 | > 261 | > $$\begin{bmatrix}-1&-2&-1\\ 0&0&0\\ 1&2&1\end{bmatrix} $$ , 262 | > 263 | > - 第一级卷积:它相当于一个滤波器,检测到图像在水平方向上的变化。 264 | > - 第二级 `reLU`:这一步类似传统的神经网络 265 | > - 池化函数:就是将一个局部的数据块规约到一个数值,从而降低数据的维度 266 | 267 | 2. 对于卷基层的分层有两种观点: 268 | 269 | - 卷积神经网络有少量的卷基层,每个卷基层都是复杂的、由三级组成的(如左图所示) 270 | - 卷积神经网络由多个层组成,每一层都是简单的(如右图所示) 271 | 272 | ![layer](../imgs/9/layer.png) 273 | 274 | 3. 池化:用一个矩阵区域内部的某个总体统计特征来代神经网络在该矩阵区域的输出 275 | 276 | - 最大池化:定义一个窗口,并从窗口内取出最大值 277 | - 均值池化:定义一个窗口,并从窗口内取出平均值 278 | 279 | 其他常见的还有: $L^{2}$ 范数以及基于中心像素距离的加权平均函数 280 | 281 | 4. 池化的优势:当输入做出了少量的平移时,池化能够帮助我们获得输出的近似不变性。 282 | 283 | 即:当我们把输入平移一个微小的量时,经过池化函数的输出值并不会发生改变。 284 | 285 | - 下图的上半部分:给出了一个最大池化的输出。 286 | - 下半部分:当最大池化的输入右移了一个单位时,最大池化的输出。 287 | - 可以看到:当输入的所有值发生改变时,最大池化的输出只有一半的值发生了改变。这是因为:最大池化单元只对周围的最大值比较敏感,而不是对精确的位置敏感 288 | 289 | ![pooling](../imgs/9/pooling.png) 290 | 291 | 5. 局部平移不变性是个很重要的性质:它可以表明:我们关心某个特征是否出现,而不关心它出现的具体位置。 292 | 293 | - 如判断是否人脸时,我们并不关心眼睛的位置。只需要知道一只眼睛在脸的左边;一只眼睛在脸的右边 294 | - 但是有些领域,特征的具体位置很重要。如判断两条线段是否相交时 295 | 296 | 6. 池化相当于是一个非常强的先验:卷基层学得的函数必须具有对少量平移的不变性。 297 | 298 | - 只有这个假设成立时,池化才能极大地提高网络的统计效率 299 | 300 | 7. 池化只能对空间的平移具有不变性,而无法对空间的旋转具有不变性。 301 | 302 | - 我们可以将空间的旋转的角度进行离散化,每个角度对应一个卷积,然后采用池化。这种做法也可以实现空间的旋转不变性 303 | 304 | 下图中,使用三个过滤器(卷积实现的)和一个最大池化单元可以学的旋转不变性。当输入旋转某个角度时,对应的过滤器被激活。只要任意一个过滤器被激活,最大池化单元也相应被激活。 305 | 306 | > 池化的空间平移不变性是天然不变的。其他变换的不变性则必须采用这种多通道的方法来实现 307 | 308 | ![rotate_pool](../imgs/9/rotate_pool.png) 309 | 310 | 8. 因为池化综合了全部邻居的反馈,因此可以使得池化单元的数量少于探测单元(即`reLU`单元,它也是池化层的输入级) 311 | 312 | 下图中,`reLU`单元有6个,池的宽度为3,池之间的步幅为 2,导致池化单元的数量降到3个。 313 | 314 | - 池化减少了下一层的输入,提高了网络计算效率,减少了参数的存储需求 315 | 316 | ![pooling_num](../imgs/9/pooling_num.png) 317 | 318 | 9. 如果对不同大小的图像进行分类,那么要求分类层的输入必须是固定大小 319 | 320 | - 可以通过卷基层来实现。卷基层的输出就是分类层的输入 321 | - 卷基层的池化处理中,调整池化区域的大小来实现不同大小的图像经过卷基层之后生成同样数量的输出 322 | 323 | ## 4.卷积与池化作为一种无限强的先验 324 | 325 | 1. 先验有强弱之分: 326 | 327 | - 弱的先验具有较高的熵(即较大的不确定性),例如方差很大的高斯分布(方差无穷大就成了均匀分布) 328 | - 强的先验具有较低的熵(具有很小的不确定性),例如方差很小的高斯分布(方差很小意味着随机变量取值几乎确定) 329 | 330 | 一个无限强的先验对于参数在参数空间的某些取值的概率是0,无论我们的数据是否支持参数取这些值 331 | 332 | 2. 卷积神经网络也可以看做是一个全连接网络,但是它的权值有一个无限强的先验: 333 | 334 | - 隐单元之间:所有隐单元与上一层连接的权重都是重复的(即不同的隐单元,其连接权重都是相同的) 335 | - 隐单元内部:在隐单元与上一层连接中,只有隐单元接受区域内的权重非零,大多数的权重都是零 336 | 337 | 这个先验表明:卷基层学得的函数只包含了局部连接关系,并且具有平移等变性。 338 | 339 | 3. 池化也是一个无限强的先验:每个池化单元都具有对少量平移的不变性 340 | 341 | 4. 卷积与池化只有当先验的假设合理,且正确时才有用 342 | 343 | - 如果任务依赖于保存精确的空间信息,那么使用池化将增大训练误差 344 | - 如果任务需要对输入中相隔较远的信息进行合并,那么卷积所需要的先验可能就不准确(因为卷积拥有平移不变性,相隔的远近没有意义) 345 | 346 | ## 5. 基本卷积函数的变体 347 | 348 | 1. 带有单个核的卷积只能提取一种类型的特征。通常我们希望神经网络的一层能够提取多个特征,因此我们在卷积神经网络中,并行使用多个卷积 349 | 350 | 2. 通常卷积神经网络的输入不仅仅是二维的图像(黑白的),也可能是三维的索引:一个索引来标明不同的通道(如红绿蓝),另外两个索引标明在每个通道上的空间坐标。甚至是高纬的张量 351 | 352 | - 假设我们有一个4维的核张量 $\mathbf K$ ,每个元素是 $K_{i,j,k,l}$ ,代表了一对输出单元和输入单元的权重: 353 | 354 | - $i$ 表示输出单元位于 $i$ 通道 355 | 356 | - $j$ 表示输入单元位于 $j$ 通道 357 | 358 | - $k,l$ 表示通道中的偏移(如图像上的偏移) 359 | 360 | > 比如:$i=红色,j=绿色,k =0,l=0$ 时,表示绿色通道中图像位置 $(0,0)$ 对于红色通道中图像位置 $(0,0)$ 的权重 361 | 362 | - 假设我们的输入由观测数据 $\mathbf V$ 组成,每个元素是 $V_{i,j,k}$ 363 | 364 | - $i$ 表示输入单元位于 $i$ 通道 365 | 366 | - $j,k$ 表示输入位于该通道的第 $j$ 行第 $k$ 列 367 | 368 | > 如:彩色图像 (通道有三个:红绿蓝)。$j=0,k=0$ 可以表示成蓝色通道中,图片 $(0,0)$ 位置处的值(取值范围 $0.0 \sim 1.0$ ) 369 | 370 | - 假定输出 $\mathbf Z$ 和输入 $\mathbf V$ 具有相同的形式。如果只涉及卷积而不翻转核(即:这里并不是使用卷积的数学定义),则: 371 | 372 | $$ 373 | Z_{i,j,k}=\sum_l\sum_{m=1}^{M}\sum_{n=1}^{N}V_{l,j+m-1,k+n-1}K_{i,l,m,n} 374 | $$ 375 | 376 | - 固定 $i$ :表明输出时 $i$ 通道 377 | - 对 $l$ 遍历:表明评估所有其他通道对于通道 $i$ 的影响 378 | - $m,n$ 的遍历:类似于二维图像的卷积。其中 $M$ 为卷积核的宽度; $N$ 为卷积核的高度(当然二者也可以一个表示高度,另一个表示宽度) 379 | - 这里减 1,是因为代数系统中,下标从 1 开始 380 | 381 | 3. 如果我们希望跳过图片中的一些位置来降低计算开销(相应代价是提取特征没有那么好了),我们可以对卷积输出进行降采样。 382 | 383 | - 假设我们希望对输出的每个方向上,每隔 $s$ 个像素进行采样,则定义一个降采样卷积函数 $c$ ,使得 384 | 385 | $$ 386 | Z_{i,j,k}=c(\mathbf K,\mathbf V,s)_{i,j,k}=\sum_l\sum_{m=1}^{M}\sum_{n=1}^{N}V_{l,(j-1)\times s+m,(k-1)\times s+n}K_{i,l,m,n} 387 | $$ 388 | 389 | - 这里 $s$ 称作降采样卷积的步幅。可以对不同的方向定义不同的步幅 390 | 391 | ![down_sampling](../imgs/9/down_sampling.png) 392 | 393 | 上图为降采样卷积的两种实现形式 394 | 395 | - 上半部分:通过直接实现步幅为2的卷积 396 | - 下半部分:先进行卷积,再降采样。这种做法会造成计算上的大量浪费 397 | 398 | 4. 在任何卷积神经网络的应用中都有一个重要性质:能隐含地对输入 $\mathbf V$ 进行用零填充,使得它加宽 399 | 400 | - 如果没有这个性质,那么每一层的宽度会逐层递减。根据卷积的性质,每一层宽度减少的数量等于核的像素减1. 401 | - 如果核较大,则网络空间的宽度迅速缩减。限制了网络的深度 402 | - 如果核较小,则可用的核的数量大幅度降低,网络的表达能力降低 403 | 404 | 5. 有三种填充零的方式: 405 | 406 | - 第一种:不使用零来填充,卷积核只允许访问那些图像中能完全包含整个核的位置。 407 | 408 | - 在`matlab`中,这称作有效卷积 409 | - 此时输出的数量等于输入的数量。但是输出的大小在每一层都缩减。如果输入图像的宽度是 $m$ ,核的宽度是 $k$ ,则输出的宽度变成 $m-k+1$ 。 410 | - 如果核的宽度非常大时,缩减非常明显。最终网络的空间维度会缩减到 $1\times 1$ 411 | 412 | ![no_padding](../imgs/9/no_padding.png) 413 | 414 | - 第二种:只进行足够的零来填充来保持输出和输入具有相同的大小 415 | 416 | - 在 `matlab` 中,称作相同卷积 417 | - 此时网络可以包含任意多的卷基层 418 | - 但是,输入像素中,靠近边界的部分相比中间部分来讲,它们对于输出像素的影响更小了。这可能导致边界像素存在一定程度的欠表达 419 | 420 | ![same_padding](../imgs/9/same_padding.png) 421 | 422 | - 第三种:进行足够多的零来填充,使得每个像素在每个方向上恰好被访问了 $k$ 次(在输入的两端各填充 $k-1$ 个零,使得输入的每个像素都恰好被核访问 $k$ 次,最终输出宽度为 $[m+2(k-1)]-(k-1)=m+k-1$ 次) 423 | 424 | - 在`matlab` 中,称作全卷积 425 | - 最终输出图像的宽度为 $m+k-1$ 426 | - 此时,输出图像的边界部分,相对于输出图像的中间部分,依赖于更少的输入像素。这回导致学习一个对所有位置都表现不错的单核更为困难 427 | 428 | 通常零填充的最优数量处于有效卷积核相同卷积之间 429 | 430 | 6. 局部连接与卷积很类似:如下图所示,它也是连接受限的,但是每个连接都有自己的权重(并没有共享参数) 431 | 432 | ![local_join](../imgs/9/local_join.png) 433 | 434 | 我们用6维的张量 $\mathbf W$ 表示,元素 $w_{i,j,k,l,m,n}$ 的索引表示: 435 | 436 | - $i$ 为输出的通道(如红色通道) 437 | - $j,k$ 为输出通道中,图像的坐标(行、列) 438 | - $l$ 为输入的通道(如绿色通道) 439 | - $m,n$ 为输入通道中,图像的坐标(行、列) 440 | 441 | 于是局部连接层的线性部分表示为: 442 | 443 | $$ 444 | Z_{i,j,k}=\sum_{l}\sum_m\sum_n[V_{l,j+m-1,k+n-1}w_{i,j,k,l,m,n}] 445 | $$ 446 | 447 | > 因为下标从1计数,所以这里有 $-1$ 448 | 449 | 这称作非共享卷积,因为它并不横跨位置来共享参数。下图给出了局部连接、卷积、全连接的区别。从上到下依次为:局部连接、卷积、全连接 450 | 451 | 452 | ![local_join2](../imgs/9/local_join2.png) 453 | 454 | 7. 如果我们知道特征是一小部分区域的函数,而不是整个区域的函数时,局部连接层很有用。此时我们只需要处理部分输入即可 455 | 456 | - 如果我们需要辨别一张图片是否人脸图像,则只需要在图像的下部中央部分寻找即可 457 | 458 | 8. 有时候,我们会进一步限制卷积或者局部连接层。 459 | 460 | - 我们可以限制每个输出的通道 $i$ 仅仅是输入通道 $l$ 的一部分的函数(而不是通道 $l$ 的整体的函数)。这种方案减少了通道之间的连接,使得模型需要更少的参数,降低了存储的消耗,减少了计算量 461 | 462 | 9. 拼接卷积`tiled convolution` 对卷积层和局部连接层进行了这种:我们学习一组核,使得当我们在空间移动时,它们可以循环利用 463 | 464 | ![tiled_conv](../imgs/9/tiled_conv.png) 465 | 466 | - 这意味着在近邻的位置上拥有不同的过滤器,就像局部连接层一样 467 | - 但是参数的存储需求仅仅会增长常数倍(该常数就是核的集合的大小),而不是整个输出的大小 468 | 469 | 下图从上到下依次为局部连接、拼贴卷积、标准卷积 470 | 471 | ![tiled_conv2](../imgs/9/tiled_conv2.png) 472 | 473 | 令 $\mathbf K$ 为一个 6 维的张量,其元素为 $K_{i,j,k,l,m,n}$ ,索引表示: 474 | 475 | - $i$ 为输出的通道(如红色通道) 476 | - $j,k$ 为输出通道中,图像的坐标(行、列) 477 | - $l$ 为输入的通道(如绿色通道) 478 | - $m,n$ 为输入通道中,图像的坐标(行、列) 479 | 480 | 于是局部连接层的线性部分表示为: 481 | 482 | $$ 483 | Z_{i,j,k}=\sum_{l}\sum_m\sum_n[V_{l,j+m-1,k+n-1}K_{i,l,m,n,j\%t+1,t,k\%t+1}] 484 | $$ 485 | 486 | > 如果是卷基层,则为 $K_{i,l,m,n}$ 487 | 488 | 这里百分号是取摸运算。$t$ 为不同的核的数量,输出的位置在每个方向上 $t$ 个不同的核组成的集合中循环。如果 $t$ 等于输出的宽度,这就是局部连接层 489 | 490 | > 因为下标从1计数,所以这里有 $-1$ 491 | 492 | 10. 实现卷积神经网络时,为了学习模型,必须能够计算核的梯度 493 | 494 | - 在某些简单情况下,核的梯度可以通过卷积来实现。但是大多数情况下(包括步幅大于1时),并不具有这样的性质 495 | - 卷积是一种线性运算,所以可以表示成矩阵乘法形式。 496 | - 涉及的矩阵是卷积核的函数。 497 | - 这个矩阵是稀疏的,并且核的每个元素都复制到该矩阵的很多个位置 498 | 499 | 假设要训练一个卷积神经网络,它包含步幅为 $s$ 的步幅卷积,卷积核为 $\mathbf K$ ,作用于多通道的图像 $\mathbf V$ 。于是卷积输出为 500 | 501 | $$ 502 | Z_{i,j,k}=c(\mathbf K,\mathbf V,s)_{i,j,k} =\sum_l\sum_{m=1}^{M}\sum_{n=1}^{N}V_{l,(j-1)\times s+m,(k-1)\times s+n}K_{i,l,m,n} 503 | $$ 504 | 505 | 假设我们需要最小化某个损失函数 $J(\mathbf V,\mathbf K)$ ,则: 506 | 507 | - 前向传播过程中,我们需要通过 $c(\cdot)$ 来计算 $\mathbf Z$ ,然后将 $\mathbf Z$ 传递到网络的其余部分,并用来计算 $J$ 508 | 509 | - 在反向传播过程中,我们得到一个张量 $\mathbf G$ 为: $G_{i,j,k}=\frac{\partial}{\partial Z_{i,j,k}}J(\mathbf V,\mathbf K)$ 510 | 511 | - 为了训练网络,我们需要对核中的权重求导。我们利用函数 512 | 513 | $$ 514 | g(\mathbf G,\mathbf V,s)_{i,j,k,l}=\frac{\partial}{\partial K_{i,j,k,l}}J(\mathbf V,\mathbf K)\\ 515 | =\sum_u\sum_m\sum_n\frac{\partial}{\partial Z_{u,m,n}}J(\mathbf V,\mathbf K)\frac{\partial Z_{u,m,n}}{\partial K_{i,j,k,l}}\\ 516 | =\sum_m\sum_nG_{i,m,n}V_{j,(m-1)\times s+k,(n-1)\times s+l} 517 | $$ 518 | 519 | 最后一个等号,是因为 $Z_{i,j,k}$ 只与 $K_{i,l,m,n}$ 有关,与其他通道无关。 520 | 521 | - 如果这一层不是网络的底层,则需要对 $\mathbf V$ 求梯度来使得误差进一步反向传播: 522 | 523 | $$ 524 | h(\mathbf K,\mathbf G,s)_{i,j,k}=\frac{\partial}{\partial V_{i,j,k}}J(\mathbf V,\mathbf K)\\ 525 | =\sum_q\sum_m\sum_n\frac{\partial}{\partial Z_{q,m,n}}J(\mathbf V,\mathbf K)\frac{\partial Z_{q,m,n}}{\partial V_{i,j,k}}\\ 526 | =\sum_{\substack{l,m \\s.t. (l-1)\times s+m=j}}\sum_{\substack{n,p\\s.t. (n-1)\times s+p=k}}\sum_qK_{q,i,m,p}G_{q,l,n} 527 | $$ 528 | 529 | 530 | 11. 通常在卷基层我们会加入非线性运算。我么也会在非线性单元中,对它的输入(也就是前一级的输出)加入一些偏置项 531 | 532 | - 对于局部连接层,每个单元都有特定的偏置 533 | - 对于拼贴卷积层,偏置项与核一样的拼贴模式来共享 534 | - 对于卷基层,通常在单元在通道级别上共享偏置(同一个通道,偏置项相同) 535 | - 如果输入是固定大小的,也可以在每个位置上学习一个单独的偏置。好处是:允许模型校正图像中不同位置的差异 536 | 537 | ## 6. 结构和输出 538 | 539 | 1. 卷积神经网络可以输出高维的结构化对象,而不仅仅一维的分类任务的标签或者回归任务的实数值 540 | 541 | - 通常这个输出对象是一个张量,由标准卷基层产生 542 | - 如张量 $\mathbf S$ ,其中 $S_{i,j,k}$ 是网络的输入像素 $(j,k)$ 属于类 $i$ 的概率。这允许模型标记图像中的每个像素,并绘制单个物体的精确轮廓 543 | 544 | 2. 对图像进行逐个像素标记的一种策略是: 545 | 546 | - 先产生图像标签的一个原始猜测 547 | - 然后使用相邻像素之间的校验来修正该原始猜测 548 | - 重复上述修正步骤相当于在每一步使用相同的卷积。很多个这样的卷积组成了一个深层网络,但是这个网络的最后几层之间存在权值连接(标准的前馈神经网络没有跨层的权值连接) 549 | - 这种跨层的权值连接构成了反馈,这种深层网络形成了一个特殊的循环神经网络 550 | 551 | ![img_output](../imgs/9/img_output.png) 552 | 553 | 如上图所示:输入时图像张量 $\mathbf X$, 其下标对应着图像的行、列、通道(红绿蓝)。输出是标签张量 $\hat{\mathbf Y}$ ,其下标对应着图像的行、列、不同类别的概率 554 | 555 | - 该网络并不是一次性输出结果,而是使用前一轮的输出来改善结果 556 | - 每一步使用对 $\mathbf X $ 的卷积核都是张量 $\mathbf U$ 557 | - 每一步产生图像的 $\mathbf H^{(t)}$ 都需要两个输入: 558 | - 一个输入是通过对图像 $\mathbf X$ 采用核 $\mathbf U$ 来卷积 559 | - 一个输入是通过对前一个输出 $\hat{\mathbf Y}^{(t-1)}$ 采用核 $\mathbf W$ 进行卷积。第一次产生 $\mathbf H^{(1)}$ 时,这一项为零(因为还没有前一次输入) 560 | - 核张量 $\mathbf V$ 用于产生从 $\mathbf H^{(t)}$ 到 $\mathbf Y^{(t)}$ 的输出 561 | 562 | > 因为每一步使用相同的参数,所以这是一个循环神经网络的例子 563 | 564 | 3. 一旦对每个像素都进行了一次,就可以用各种方法来进一步处理这些预测 565 | 566 | - 常规思路是:假设大片相连的像素对应于相同的标签。 567 | 568 | ## 7. 数据类型 569 | 570 | 1. 卷积神经网络使用的数据通常包含多个通道:每个通道都是时间/空间上一个点的某种不用的观测量 571 | 572 | - 同一个点,观测的角度不同,就产生了不同的通道 573 | - 如三维的单通道:立体成像的数据。每个点代表了三维空间的一个点。三维的多通道:彩色视频数据:时间维度+二维空间(图像)+色彩通道(红绿蓝三通道) 574 | 575 | 2. 目前我们仅讨论了数据中每个样例都具有相同的空间维度的情况。但是卷积神经网络还可以处理具有变化的空间尺度的输入(如样本集中,样本的像素可能都不相同) 576 | 577 | - 这种类型的输入不能使用传统的基于矩阵乘法的神经网络来表示(因为不同样本的输入的维度可能不同) 578 | 579 | - 但是卷积神经网络可以处理这种情况:根据输入图片的大小,核被简单的使用不同次数。并且卷积运算的输出也会相应的缩放 580 | 581 | > 卷积和矩阵乘法是等价的。这里可以理解为:利用卷积,卷积核为每种大小的输入引入了一个不同大小的双重循环矩阵(由卷积核构造的) 582 | 583 | - 如果网络的输出和输入一样的,(如为每个输入像素分配一个分类标签),则无需做更多的工作 584 | - 如果要求网络的输出大小是固定的,(如为整个图像分配一个类别标签),此时需要插入一个池化层,池化区域的大小要和输入的大小成比例,从而保持固定数量的池化输出 585 | 586 | 3. 卷积能处理可变大小的输入,但这种“可变”必须是因为相同事物的不同量的观察不同导致的(如:时间量上的不同观察导致时间维度可变,空间上的不同观察导致空间维度可变) 587 | 588 | - 这种可变并不包括特征数量的可变:比如某个输入具有 “年龄、学历、性别”特征,另一个输入只具有“年龄、学历”特征。那么卷积对于这个类型的样本集无能为力 589 | 590 | ## 8. 高效的卷积算法 591 | 592 | 1. 卷积等效于: 593 | 594 | - 使用傅里叶变换将输入和核都转换到频域 595 | - 在频域将输入和核进行逐点相乘 596 | - 把相乘的结果使用傅里叶逆变换转换回时域 597 | 598 | 对于某些规模的问题,这种算法可能比离散卷积的直接计算要来的更快 599 | 600 | 2. 对于一个 $d$ 维的核,如果可以表示成 $d$ 个一维向量的外积时,称该核是可分离的 601 | 602 | - 这里的外积不同于代数意义上的叉乘,而是: 603 | 604 | $$ 605 | \mathbf{\vec a}\otimes \mathbf{\vec b}= \begin{bmatrix}a_1\\ 606 | a_2 \\ 607 | \vdots\\ 608 | a_M\end{bmatrix}\otimes\begin{bmatrix}b_1 \\ 609 | b_2 \\ 610 | \vdots\\ 611 | b_N\end{bmatrix}=\begin{bmatrix}a_1b_1&a_1b_2&\cdots&a_1b_N\\ 612 | a_2b1&a_2b_2&\cdots&a_2b_N\\ 613 | \vdots&\vdots&\ddots&\vdots\\ 614 | a_Mb_1&a_Mb_2&\cdots&a_Mb_N\end{bmatrix} 615 | $$ 616 | 617 | - 当核可分离时,直接计算卷积是非常低效的。它等价于组合 $d$ 个一维向量的卷积,每次卷积时使用这些向量中的一个 618 | 619 | - 如果核在每个维度都是 $w$ 个元素宽,那么直接计算卷积需要 $O(w^d)$ 的运行时间和空间(存储参数),而可分离的卷积只需要 $O(w\times d)$ 的运行时间和参数存储空间 620 | 621 | - 如果核可分离时,采用可分离的卷积效果更好。但是并不是每个核都是可分离的 622 | 623 | 3. 设计更快的卷积或者近似卷积而不降低模型准确率的方法是一个活跃的研究领域 624 | 625 | - 甚至仅提高前向传播效率的技术也是有用的。因为在商业环境中,通常部署网络比训练网络还要耗资源 626 | 627 | ## 9. 随机或者无监督的特征 628 | 629 | 1. 通常卷积网络训练中最昂贵的部分是学习特征 630 | 631 | - 输出层通常相对廉价。因为经过若干层池化之后,输出层的输入的特征的数量就相对少得多 632 | 633 | > 这里的学习特征,应该是学习卷积核。每一个单元的输入都是特征,但是一个单元的输入也是另一个单元的输出(除了最原始的的输入 $\mathbf X$) 。因此学习特征就是要学得中间每一级的输出。其中最重要的就是卷基层的输出 634 | 635 | 2. 当使用梯度下降执行有监督训练时,每个梯度步骤需要完整的在全网中运行前向传播和反向传播 636 | 637 | - 减少训练成本的方法是:使用那些非监督方式训练的特征 638 | 639 | 3. 有三种基本策略来避免监督训练而得到卷积核 640 | 641 | - 第一种方法是:简单地随机初始化卷积核 642 | - 第二种方法是:手动设计一个卷积核。如设计一个检测图像边缘的核 643 | - 第三种方法是:用无监督来学习核 644 | 645 | 4. 使用无监督来学习核时,允许其结构与网络顶层的分类曾相分离 646 | 647 | - 使用无监督学习特征 648 | - 学到之后就提取训练集的全部特征,构建一个新的训练集 649 | - 将这个新的训练集作为最后一层的输入 650 | 651 | 5. 随机过滤器经常在卷积网络中表现的出乎意料的好 652 | 653 | - 通常给出多个随机权值,生成一组候选的卷积网络结构 654 | - 然后仅仅训练最后一层来评估几个卷积网络结构的性能,挑选最好的结构,并且使用代价更大的方法来训练整个网络 655 | 656 | 6. 还有一种办法是使用一些特殊的方法来学习特征,但是这些方法不需要再每个梯度步骤中都完整的前向和反向传播 657 | 658 | - 比如:使用贪心逐层式预训练: 659 | - 独立地训练第一层。然后从第一层提取所有特征构建新的训练集 660 | - 然后用新训练集独立地训练第二层...以此类推 661 | - 卷积模型的贪心逐层预训练的经典模型是卷积深度信念网络 662 | - 卷积网络能够为我们提供相对于多层感知机更进一步的预训练的机会:不是一层训练整个卷基层,而是训练一小块模型。然后使用这个小块模型的参数来定义卷基层的核。 663 | - 这意味着使用无监督学习来训练卷积网络,并且在训练过程中完全不使用卷积也是可能的 664 | - 使用这种方法,我们可以训练非常大的模型,并且只在推理期间产生高计算成本 665 | 666 | 7. 如今大多数卷积网络以纯粹有监督的方式训练,因为计算能力比以前大幅度提升 667 | 668 | 8. 无监督预训练的好处难以说清 669 | 670 | - 使用无监督预训练可以提供一些相对于监督训练的正则化 671 | - 使用无监督预训练可以训练更大的结构,因为它的学习规则减少了计算成本 672 | 673 | ## 10. 卷积神经网络的神经科学基础 674 | 675 | 1. 神经生理学家`David Hubel`核`Torsten Wiesel`观察了猫的脑内神经元的视觉响应:处于视觉系统较为前面的神经元对于特定的光模式反应最强烈,但是对于其它模式几乎完全没有反应 676 | 677 | 对这一过程进行简化:我们关注大脑的 $V1$ 部分,也称作主要视觉皮层。 678 | 679 | - 图像从光到达眼睛并刺激视网膜 680 | - 视网膜中的神经元对图像进行一些简单的预处理,但是基本不改变图像的表达方式 681 | - 图像通过视神经,以及称作外侧膝状体的脑部区域 682 | 683 | 2. 卷积层被设计为描述 $V1$ 的三个性质: 684 | 685 | - $V1$ 分布在空间图中。它实际上具有二维结构来映射视网膜中的图像 686 | 687 | - 视网膜下半部的光仅仅影响 $V1$ 相应的一半 688 | - 卷积网络通过用二维映射定义特征的方式来描述该特性 689 | 690 | - $V1$ 包含许多简单细胞。这些简单细胞的行为简单概括为:在一个空间上小的、局部的接受域内的图像的线性函数 691 | 692 | - 卷积网络的检测器单元被设计为模拟简单细胞 693 | 694 | - $V1$ 还包括许多复杂细胞。这些细胞相应类似于由简单细胞检测的那些特征。 695 | 696 | - 但是复杂细胞对于特征的位置的微小偏移具有不变性(这通过卷积网络的池化单元来刻画) 697 | 698 | - 复杂细胞对于照明中的一些变化也是不变的(它不能简单地通过在空间位置上池化来刻画) 699 | 700 | > 这些不变性激发了卷积网络中的一些跨通道池化策略,如`maxout`单元 701 | 702 | 3. 一般认为:类似于 $V1$ 的原理也适用于视觉系统的其他区域 703 | 704 | - 在大脑中,我们找到了响应一些特定概念的细胞,并且这种细胞对于输入的许多种变换都具有不变性。这些细胞被称作祖母细胞 705 | 706 | > 一个人可能有这样的一个神经元,当他看到祖母的照片时,该神经元被激活。无论祖母出现在照片的哪个位置、无论是祖母的脸部还是全身、无论是光亮还是黑暗 707 | 708 | - 这些祖母细胞存在于内侧颞叶的区域 709 | 710 | 4. 与卷积网络最后一层特征上最接近的类比是:颞下皮质的脑区 711 | 712 | - 当查看一个对象时,信息从视网膜经过 `LGN` 流到 $V1$ ,然后到 $V2$ ,$V4$ ,然后是颞下皮质 713 | - 这发生在瞥见对象的前 100ms 内 714 | - 如果允许一个人继续观察对象更多的时间,那么信息将开始向后流动(即前面过程的反馈路径)。因为大脑使用自上而下的反馈来更新较低级脑区中的激活 715 | - 如果打断人的注视,并且只观察前 100ms 内的大多数前向传播路径,则颞下皮质与卷积网络非常相似 716 | 717 | 5. 动物的视觉系统与卷积网络的主要区别: 718 | 719 | - 人眼大部分是非常低的分辨率,除了一个被称作中央凹的小块(手臂远的拇指大小的区域) 720 | - 虽然我们觉得我们可以看到高分辨率的整个场景,但是这是大脑的潜意识部分创建的错觉,因为它缝合了我们瞥见的若干个小区域。大多数卷积网络实际上接收到的是一张高分辨率的照片 721 | - 人类大脑控制几次眼动(称作扫视),从而瞥见场景中最显眼的或者任务相关的部分。这称作关注机制。目前关注机制对于自然语言处理是最成功的 722 | - 人类视觉系统集成了许多其他感觉(如听觉,以及心情想法之类的因素)。卷及网络目前为止纯粹是视觉的 723 | - 人类视觉系统不仅用于识别对象,它还能够理解整个场景:包括许多对象、对象之间的关系、我们的身体与世界交互所需要的丰富的三维几何信息。卷积神经网络在这些问题上还是起步阶段 724 | - 即使像 $V1$ 这样简单的大脑区域也受到来自较高级别的反馈的严重影响。虽然神经网络模型也探索反馈机制,但是目前没有提供引人瞩目的改进 725 | - 大脑可能使用非常不同的激活核池化函数。单个神经元的激活可能并不能通过单个线性过滤器的相应来很好的表征。 726 | 727 | 6. 对大脑的研究表明,大多数的 $V1$ 细胞具有由 `Gabor`函数描述的权重。 728 | 729 | - 我们认为图像是由 $I(x,y)$ 描述的函数 730 | 731 | - 我们认为简单细胞是在图像中的某些位置上进行采样。 732 | 733 | - 这些位置由一组 $x$ 坐标 $\mathbb X$ 核一组 $y$ 坐标 $\mathbb Y$ 来定义。 734 | 735 | - 采样的结果的权重为 $w(x,y)$ 736 | 737 | - 简单细胞对于图像的响应为: 738 | 739 | $$ 740 | s(I)=\sum_{x\in \mathbb X}\sum_{y\in \mathbb Y}w(x,y)I(x,y) 741 | $$ 742 | 743 | 7. `Gabor` 函数描述了图像中的 2维点处的权重 744 | 745 | $$ 746 | w(x,y;\alpha,\beta_x,\beta_y,f,\phi,x_0,y_o,\tau)=\alpha \exp(-\beta_x x^{\prime2}-\beta_yy^{\prime2})\cos(fx^{\prime}+\phi) 747 | $$ 748 | 749 | 其中 750 | 751 | $$ 752 | x^{\prime}=(x-x_0)\cos(\tau)+(y-y_0)\sin(\tau)\\ y^{\prime}=-(x-x_0)\cos(\tau)+(y-y_0)\sin(\tau) 753 | $$ 754 | 755 | 这里 $\alpha,\beta_x,\beta_y,f,\phi,x_0,y_o,\tau$ 都是控制 `Gabor`函数性质的参数 756 | 757 | - 参数 $x_0,y_0,\tau$ 定义坐标系。 758 | 759 | - 我们通过平移和旋转 $x,y$ 来得到 $x^{\prime},y^{\prime}$。 简单细胞会响应以点 $(x_0,y_0)$ 为中心的图像特征。 760 | - 当我们沿着水平方向旋转 $\tau$ 弧度时, 简单细胞将响应亮度的变化。 761 | - 下图中:白色表示较大的正权重;黑色表示较大的负权重;灰色对应零权重。网格中每个`Gabor`函数被赋予它在网格中的位置成比例的 $x_0,y_0$ 的值。$\tau$ 的值被选择为:`Gabor`的值对径向非常敏感。其他参数固定不变 762 | 763 | ![response_translate](../imgs/9/response_translate.png) 764 | 765 | - 当我们沿着 $w^{\prime}$ 移动时,函数 $w$ 通过亮度变换来响应移动。它有两个重要的因子:一个是高斯函数,另一个是余弦函数。 766 | 767 | - $\alpha,\beta_x,\beta_y$ 调整高斯因子 768 | 769 | - 高斯因子(高斯函数) $\alpha \exp(-\beta_x x^{\prime2}-\beta_yy^{\prime2})$ 可以视作阈值项,用于保证简单细胞仅对接近 $x^{\prime}=0,y^{\prime}=0$ 处的值产生响应。即:只有在中心点处产生较强的响应,远离中心点则响应指数级衰减尺度因子 770 | 771 | - $\alpha$ 调整简单细胞响应的总量级 772 | 773 | - $\beta_x,\beta_y$ 控制接受域衰减的速度(即远离中心点的衰减速度) 774 | 775 | - 下图中:白色表示较大的正权重;黑色表示较大的负权重;灰色对应零权重。$x_0,y_0,\tau$ 固定为零。从左到右, $\beta_x$ 减少;从上到下, $\beta_y$ 减少。其他参数保持不变 776 | 777 | ![response_gaussian](../imgs/9/response_gaussian.png) 778 | 779 | - $f,\phi$ 控制余弦因子 780 | 781 | - 余弦因子(余弦函数) $\cos (fx^{\prime}+\phi)$ 控制简单细胞如何响应沿着 $x^{\prime}$ 轴的变化 782 | 783 | - 参数 $f$ 控制余弦的频率 784 | 785 | - 参数 $\phi$ 控制它的相位偏移 786 | 787 | - 下图中:白色表示较大的正权重;黑色表示较大的负权重;灰色对应零权重。$x_0,y_0,\tau$ 固定为零。从左到右, $\phi$ 增加;从上到下, $f$ 增加。其他参数保持不变 788 | 789 | ![response_cos](../imgs/9/response_cos.png) 790 | 791 | - 合在一起的意义为:简单细胞对特定位置处、特定方向上、特定空间频率的亮度进行响应 792 | 793 | - 当图像中的光波与细胞的权重具有相同的相位时,简单细胞时最活跃的:当图像亮时,权重为正;图像暗时,权重为负 794 | - 当光波与权重完全异相时,简单细胞被抑制的:当图像为亮时,权重为负;图像暗时,权重为正 795 | 796 | 8. 复杂细胞是计算它包含两个简单细胞响应的 2维向量的 $L^{2}$ 范数 797 | 798 | $$ 799 | c(I)=\sqrt{s_0(I)^{2}+s_1(I)^{2}} 800 | $$ 801 | 802 | - 一个重要特殊情况是:当 $s_1,s_0$ 除了 $\phi$ 以外的参数都相同; 且 $\phi$ 参数上, $s_0,s_1$ 相位相差 $\frac 14$ 个周期时, $s_0,s_1$ 形成正交对 803 | - 复杂细胞对于图像在方向 $\tau$ 上的微小变换或者翻转图像(黑白互换)具有不变性 804 | 805 | 806 | ## 11. 卷积神经网络与深度学习的历史 807 | 808 | 1. 卷积神经网络时第一个解决重要商业应用的神经网络 809 | 2. 卷积网络是用反向传播训练的第一个有效的深度网络之一 810 | 3. 卷积网络提供了一种方法来专业化神经网络,从而处理具有清楚的网络结构拓扑的数据 811 | - 这种方法在二维图像拓扑上是最成功的 812 | - 为了处理一维序列数据,我们往往采用另一种强大的专业化网络:循环神经网络 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | -------------------------------------------------------------------------------- /imgs/1/AI_system.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/AI_system.JPG -------------------------------------------------------------------------------- /imgs/1/AI_system.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/AI_system.png -------------------------------------------------------------------------------- /imgs/1/MNIST.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/MNIST.JPG -------------------------------------------------------------------------------- /imgs/1/MNIST.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/MNIST.png -------------------------------------------------------------------------------- /imgs/1/con_per_neurons.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/con_per_neurons.JPG -------------------------------------------------------------------------------- /imgs/1/con_per_neurons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/con_per_neurons.png -------------------------------------------------------------------------------- /imgs/1/concepts.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/concepts.JPG -------------------------------------------------------------------------------- /imgs/1/concepts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/concepts.png -------------------------------------------------------------------------------- /imgs/1/dataset_size.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/dataset_size.JPG -------------------------------------------------------------------------------- /imgs/1/dataset_size.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/dataset_size.png -------------------------------------------------------------------------------- /imgs/1/depth.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/depth.JPG -------------------------------------------------------------------------------- /imgs/1/depth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/depth.png -------------------------------------------------------------------------------- /imgs/1/error_rate.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/error_rate.JPG -------------------------------------------------------------------------------- /imgs/1/error_rate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/error_rate.png -------------------------------------------------------------------------------- /imgs/1/history.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/history.JPG -------------------------------------------------------------------------------- /imgs/1/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/history.png -------------------------------------------------------------------------------- /imgs/1/num_neurons.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/num_neurons.JPG -------------------------------------------------------------------------------- /imgs/1/num_neurons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/num_neurons.png -------------------------------------------------------------------------------- /imgs/1/representation.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/representation.JPG -------------------------------------------------------------------------------- /imgs/1/representation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/representation.png -------------------------------------------------------------------------------- /imgs/1/venn_diagram.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/venn_diagram.JPG -------------------------------------------------------------------------------- /imgs/1/venn_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/1/venn_diagram.png -------------------------------------------------------------------------------- /imgs/10/LSTM.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/LSTM.PNG -------------------------------------------------------------------------------- /imgs/10/bi_RNN.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/bi_RNN.PNG -------------------------------------------------------------------------------- /imgs/10/deep_rnn.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/deep_rnn.PNG -------------------------------------------------------------------------------- /imgs/10/deep_rnn2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/deep_rnn2.PNG -------------------------------------------------------------------------------- /imgs/10/encode_decode.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/encode_decode.PNG -------------------------------------------------------------------------------- /imgs/10/memory_cell.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/memory_cell.PNG -------------------------------------------------------------------------------- /imgs/10/more_hiden.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/more_hiden.PNG -------------------------------------------------------------------------------- /imgs/10/rnn_dag.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/rnn_dag.PNG -------------------------------------------------------------------------------- /imgs/10/rnn_dag2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/rnn_dag2.PNG -------------------------------------------------------------------------------- /imgs/10/rnn_more.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/rnn_more.PNG -------------------------------------------------------------------------------- /imgs/10/rnn_type1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/rnn_type1.PNG -------------------------------------------------------------------------------- /imgs/10/rnn_type2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/rnn_type2.PNG -------------------------------------------------------------------------------- /imgs/10/rnn_type3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/rnn_type3.PNG -------------------------------------------------------------------------------- /imgs/10/rnn_x.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/rnn_x.PNG -------------------------------------------------------------------------------- /imgs/10/teacher_forcing.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/teacher_forcing.PNG -------------------------------------------------------------------------------- /imgs/10/tree_rnn.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/tree_rnn.PNG -------------------------------------------------------------------------------- /imgs/10/unfolding.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/unfolding.PNG -------------------------------------------------------------------------------- /imgs/10/unfolding2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/10/unfolding2.PNG -------------------------------------------------------------------------------- /imgs/11/man_search.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/11/man_search.PNG -------------------------------------------------------------------------------- /imgs/12/GCN.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/12/GCN.PNG -------------------------------------------------------------------------------- /imgs/12/LCN.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/12/LCN.PNG -------------------------------------------------------------------------------- /imgs/12/attention.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/12/attention.PNG -------------------------------------------------------------------------------- /imgs/12/nlp_tree.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/12/nlp_tree.PNG -------------------------------------------------------------------------------- /imgs/12/translate.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/12/translate.PNG -------------------------------------------------------------------------------- /imgs/2/cross.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/2/cross.JPG -------------------------------------------------------------------------------- /imgs/2/cross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/2/cross.png -------------------------------------------------------------------------------- /imgs/2/dot.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/2/dot.JPG -------------------------------------------------------------------------------- /imgs/2/dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/2/dot.png -------------------------------------------------------------------------------- /imgs/3/expon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/3/expon.png -------------------------------------------------------------------------------- /imgs/3/gaussian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/3/gaussian.png -------------------------------------------------------------------------------- /imgs/3/laplace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/3/laplace.png -------------------------------------------------------------------------------- /imgs/3/sigmoid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/3/sigmoid.png -------------------------------------------------------------------------------- /imgs/3/sigmoid_softplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/3/sigmoid_softplus.png -------------------------------------------------------------------------------- /imgs/3/softplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/3/softplus.png -------------------------------------------------------------------------------- /imgs/4/critical_point.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/4/critical_point.JPG -------------------------------------------------------------------------------- /imgs/4/critical_point.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/4/critical_point.png -------------------------------------------------------------------------------- /imgs/4/curvature.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/4/curvature.JPG -------------------------------------------------------------------------------- /imgs/4/curvature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/4/curvature.png -------------------------------------------------------------------------------- /imgs/4/deeplearning_optimization.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/4/deeplearning_optimization.JPG -------------------------------------------------------------------------------- /imgs/4/deeplearning_optimization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/4/deeplearning_optimization.png -------------------------------------------------------------------------------- /imgs/4/g_descent.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/4/g_descent.JPG -------------------------------------------------------------------------------- /imgs/4/g_descent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/4/g_descent.png -------------------------------------------------------------------------------- /imgs/4/saddle.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/4/saddle.JPG -------------------------------------------------------------------------------- /imgs/4/saddle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/4/saddle.png -------------------------------------------------------------------------------- /imgs/5/bias_var.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/5/bias_var.JPG -------------------------------------------------------------------------------- /imgs/5/bias_var.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/5/bias_var.png -------------------------------------------------------------------------------- /imgs/5/capacity.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/5/capacity.JPG -------------------------------------------------------------------------------- /imgs/5/capacity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/5/capacity.png -------------------------------------------------------------------------------- /imgs/5/manifold.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/5/manifold.JPG -------------------------------------------------------------------------------- /imgs/5/manifold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/5/manifold.png -------------------------------------------------------------------------------- /imgs/6/BP_forward.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/BP_forward.JPG -------------------------------------------------------------------------------- /imgs/6/BP_forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/BP_forward.png -------------------------------------------------------------------------------- /imgs/6/BP_forward2.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/BP_forward2.JPG -------------------------------------------------------------------------------- /imgs/6/BP_forward2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/BP_forward2.png -------------------------------------------------------------------------------- /imgs/6/MLP_bp.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/MLP_bp.JPG -------------------------------------------------------------------------------- /imgs/6/MLP_bp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/MLP_bp.png -------------------------------------------------------------------------------- /imgs/6/compu_chain.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/compu_chain.JPG -------------------------------------------------------------------------------- /imgs/6/compu_chain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/compu_chain.png -------------------------------------------------------------------------------- /imgs/6/compu_g.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/compu_g.JPG -------------------------------------------------------------------------------- /imgs/6/compu_g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/compu_g.png -------------------------------------------------------------------------------- /imgs/6/deeper.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/deeper.JPG -------------------------------------------------------------------------------- /imgs/6/deeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/deeper.png -------------------------------------------------------------------------------- /imgs/6/feedforward.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/feedforward.JPG -------------------------------------------------------------------------------- /imgs/6/feedforward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/feedforward.png -------------------------------------------------------------------------------- /imgs/6/forward_learn.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/forward_learn.JPG -------------------------------------------------------------------------------- /imgs/6/forward_learn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/forward_learn.png -------------------------------------------------------------------------------- /imgs/6/hard_tanh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/hard_tanh.png -------------------------------------------------------------------------------- /imgs/6/max_min.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/max_min.png -------------------------------------------------------------------------------- /imgs/6/mix_gaussian.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/mix_gaussian.JPG -------------------------------------------------------------------------------- /imgs/6/mix_gaussian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/mix_gaussian.png -------------------------------------------------------------------------------- /imgs/6/more_param.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/more_param.JPG -------------------------------------------------------------------------------- /imgs/6/more_param.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/more_param.png -------------------------------------------------------------------------------- /imgs/6/relu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/relu.png -------------------------------------------------------------------------------- /imgs/6/relu_modified.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/relu_modified.png -------------------------------------------------------------------------------- /imgs/6/sigmoid_tanh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/sigmoid_tanh.png -------------------------------------------------------------------------------- /imgs/6/symbol_symbol.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/symbol_symbol.JPG -------------------------------------------------------------------------------- /imgs/6/symbol_symbol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/symbol_symbol.png -------------------------------------------------------------------------------- /imgs/6/xor_forward.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/xor_forward.JPG -------------------------------------------------------------------------------- /imgs/6/xor_forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/xor_forward.png -------------------------------------------------------------------------------- /imgs/6/xor_linear.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/xor_linear.JPG -------------------------------------------------------------------------------- /imgs/6/xor_linear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/xor_linear.png -------------------------------------------------------------------------------- /imgs/6/xor_net.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/xor_net.JPG -------------------------------------------------------------------------------- /imgs/6/xor_net.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/6/xor_net.png -------------------------------------------------------------------------------- /imgs/7/L2.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/7/L2.JPG -------------------------------------------------------------------------------- /imgs/7/L2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/7/L2.png -------------------------------------------------------------------------------- /imgs/7/dropout.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/7/dropout.JPG -------------------------------------------------------------------------------- /imgs/7/dropout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/7/dropout.png -------------------------------------------------------------------------------- /imgs/7/early_stopping.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/7/early_stopping.JPG -------------------------------------------------------------------------------- /imgs/7/early_stopping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/7/early_stopping.png -------------------------------------------------------------------------------- /imgs/7/mul_task.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/7/mul_task.JPG -------------------------------------------------------------------------------- /imgs/7/mul_task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/7/mul_task.png -------------------------------------------------------------------------------- /imgs/7/train_validate.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/7/train_validate.JPG -------------------------------------------------------------------------------- /imgs/7/train_validate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/7/train_validate.png -------------------------------------------------------------------------------- /imgs/8/explode.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/8/explode.JPG -------------------------------------------------------------------------------- /imgs/8/explode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/8/explode.png -------------------------------------------------------------------------------- /imgs/8/greedy.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/8/greedy.JPG -------------------------------------------------------------------------------- /imgs/8/greedy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/8/greedy.png -------------------------------------------------------------------------------- /imgs/8/ill_condition.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/8/ill_condition.JPG -------------------------------------------------------------------------------- /imgs/8/ill_condition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/8/ill_condition.png -------------------------------------------------------------------------------- /imgs/8/local_global.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/8/local_global.JPG -------------------------------------------------------------------------------- /imgs/8/local_global.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/8/local_global.png -------------------------------------------------------------------------------- /imgs/8/momentum.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/8/momentum.JPG -------------------------------------------------------------------------------- /imgs/8/momentum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/8/momentum.png -------------------------------------------------------------------------------- /imgs/9/2d_con.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/2d_con.PNG -------------------------------------------------------------------------------- /imgs/9/down_sampling.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/down_sampling.PNG -------------------------------------------------------------------------------- /imgs/9/img_output.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/img_output.PNG -------------------------------------------------------------------------------- /imgs/9/layer.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/layer.PNG -------------------------------------------------------------------------------- /imgs/9/local_join.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/local_join.PNG -------------------------------------------------------------------------------- /imgs/9/local_join2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/local_join2.PNG -------------------------------------------------------------------------------- /imgs/9/no_padding.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/no_padding.PNG -------------------------------------------------------------------------------- /imgs/9/pooling.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/pooling.PNG -------------------------------------------------------------------------------- /imgs/9/pooling_num.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/pooling_num.PNG -------------------------------------------------------------------------------- /imgs/9/response_cos.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/response_cos.PNG -------------------------------------------------------------------------------- /imgs/9/response_gaussian.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/response_gaussian.PNG -------------------------------------------------------------------------------- /imgs/9/response_translate.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/response_translate.PNG -------------------------------------------------------------------------------- /imgs/9/rotate_pool.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/rotate_pool.PNG -------------------------------------------------------------------------------- /imgs/9/same_padding.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/same_padding.PNG -------------------------------------------------------------------------------- /imgs/9/share.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/share.PNG -------------------------------------------------------------------------------- /imgs/9/sparse1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/sparse1.PNG -------------------------------------------------------------------------------- /imgs/9/sparse2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/sparse2.PNG -------------------------------------------------------------------------------- /imgs/9/sparse3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/sparse3.PNG -------------------------------------------------------------------------------- /imgs/9/tiled_conv.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/tiled_conv.PNG -------------------------------------------------------------------------------- /imgs/9/tiled_conv2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huaxz1986/deep_learning_notes/2ce2d425798ef273bded61a0dc5469e81e6e4ac6/imgs/9/tiled_conv2.PNG -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | 4 | # 深度学习笔记 5 | 6 | 笔记来自于 www.deeplearningbook.org ,采用`markdown`格式撰写。所有的公式采用`MathJax`编写。 7 | 8 | 因为基础部分对我太简单,隐层基础部分:线性代数、概率论和信息论、数值计算、基础机器学习将简单介绍而已。 9 | 10 | 另:本人搜集了个人笔记并整理成册,命名为《AI算法工程师手册》,详见:www.huaxiaozhuan.com 11 | 12 | ## 结构: 13 | 14 | ``` 15 | chapters/ 保存所有的笔记内容 16 | imgs/ 保存所有的图片 17 | ``` 18 | --------------------------------------------------------------------------------