-
-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathru.srt
2487 lines (1866 loc) · 115 KB
/
ru.srt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1
00:00:58,990000 --> 00:01:01,820000
Майкл, добро пожаловать на мой канал.
2
00:01:01,820000 --> 00:01:12,930000
сегодня мы поговорим о float и double и о том, как эти две основные абстракции и реализации влияют на жизнь других программистов.
3
00:01:12,990000 --> 00:01:15,010000
так что, пожалуйста, представьтесь.
4
00:01:15,750000 --> 00:01:16,400000
спасибо вам.
5
00:01:16,400000 --> 00:01:18,340000
мне очень приятно быть здесь.
6
00:01:18,340000 --> 00:01:20,170000
спасибо, что пригласили меня, Никита.
7
00:01:20,390000 --> 00:01:21,900000
меня зовут Майкл Овертон.
8
00:01:21,900000 --> 00:01:27,050000
я профессор компьютерных наук и математики в Нью-Йоркском университете в Нью-Йорке.
9
00:01:29,110000 --> 00:01:30,890000
я проработал там всю свою карьеру.
10
00:01:31,110000 --> 00:01:40,330000
и это не является моим основным интересом, но одним из моих интересов долгое время была арифметика с плавающей запятой, главным образом потому, что я увлекся этим, потому что
11
00:01:40,350000 --> 00:01:51,450000
я преподавал численные вычисления на факультете компьютерных наук, и мне было действительно интересно объяснить студентам гораздо больше о том, как работает компьютер. вычислительная техника работала вместо этого
12
00:01:51,950000 --> 00:01:59,800000
Типичная вещь на занятиях по численному анализу на математическом факультете - вы тратите около 15 минут на обсуждение этого, а затем говорите обо всех этих математических методах.
13
00:01:59,800000 --> 00:02:05,860000
но на самом деле детали вычислений очень интересны, особенно студентам, изучающим информатику.
14
00:02:05,860000 --> 00:02:16,290000
так что в итоге я начал писать заметки, а затем это превратилось в небольшую книгу, которую я написал и которая была опубликована для SIAM, Общества промышленной прикладной математики, в 2001 году.
15
00:02:18,030000 --> 00:02:21,340000
а потом я оставил эту книгу.
16
00:02:21,340000 --> 00:02:33,440000
я имею в виду, что я пользовался этой книгой в течение многих лет, но на самом деле не особо оглядывался на нее за последние 20 лет, пока недавно у меня не появилась возможность написать второе издание, потому что с 2001 года многое изменилось.
17
00:02:33,440000 --> 00:02:35,010000
да, этого вы еще не знаете.
18
00:02:35,830000 --> 00:02:37,860000
с 2001 года так много изменилось.
19
00:02:37,860000 --> 00:02:42,250000
основные принципы остались прежними, но технологии, конечно, полностью изменились.
20
00:02:42,270000 --> 00:02:51,210000
так что на самом деле я очень близок к завершению второго издания, которое будет опубликовано издательством SIAM, предположительно, в 2025 году.
21
00:02:51,550000 --> 00:02:53,490000
о, отличные новости.
22
00:02:53,710000 --> 00:02:58,890000
не могли бы вы, пожалуйста, немного объяснить аудитории, что именно изменилось?
23
00:03:02,150000 --> 00:03:08,130000
может быть, было бы лучше сначала объяснить, что произошло в 1985 году с первоначальным стандартом с плавающей запятой.
24
00:03:09,830000 --> 00:03:24,920000
если мы углубимся в историю, а затем вернемся к настоящему позже, если вы пройдете весь путь назад, то на самом деле плавающая точка была впервые разработана Конрадом Цузе во время Второй мировой войны. Вторая мировая война
25
00:03:24,920000 --> 00:03:26,010000
я в Германии.
26
00:03:26,910000 --> 00:03:32,860000
Он на самом деле построил компьютер с двоичной арифметикой с плавающей запятой.
27
00:03:32,860000 --> 00:03:33,980000
но он не был электронным.
28
00:03:33,980000 --> 00:03:35,450000
он был электромеханическим.
29
00:03:35,590000 --> 00:03:38,760000
а позже были разработаны первые электронные компьютеры.
30
00:03:38,760000 --> 00:03:47,930000
конечно, было много людей, которые участвовали во всем этом процессе после войны, особенно фон Нейман и Тьюринг.
31
00:03:48,350000 --> 00:03:58,170000
а затем различные компании, конечно же, начали создавать электронные компьютеры и продавать их, особенно IBM.
32
00:03:58,470000 --> 00:04:01,690000
существовало множество различных способов выполнения компьютерной арифметики.
33
00:04:02,150000 --> 00:04:16,460000
это было очень запутанно, потому что в те дни вы могли запустить программу, скажем, на Фортране, на одном компьютере, на компьютере IBM, и вы могли получить совсем другие результаты, чем если бы вы запустили ее на другом компьютере, потому что способ, которым она была запущена,
34
00:04:16,460000 --> 00:04:20,850000
арифметика, реализованная на компьютере, была совсем другой.
35
00:04:20,990000 --> 00:04:23,090000
было много людей, которые были обеспокоены этим.
36
00:04:24,550000 --> 00:04:33,900000
стандарт с плавающей запятой был наконец опубликован в 1985 году после примерно пяти лет работы.
37
00:04:33,900000 --> 00:04:37,020000
на самом деле это было вскоре после того, как я стал аспирантом.
38
00:04:37,020000 --> 00:04:50,890000
я в этом не участвовал, но некоторые из моих коллег и близких друзей участвовали, и особенно профессор Велвел Кахан из Беркли, который руководил всем процессом.
39
00:04:51,270000 --> 00:05:01,980000
Он также участвовал в разработке чипа с плавающей запятой для нового, на тот момент, Intel 8087, который был процессором с плавающей запятой. пойнт-чип.
40
00:05:01,980000 --> 00:05:09,610000
на самом деле это был сопроцессор с плавающей запятой, который работал вместе с процессором 8088, который они разрабатывали.
41
00:05:11,150000 --> 00:05:24,490000
и Кахан принимал активное участие в его разработке, и многие из тех же идей были приняты в Стандарте, который был опубликован в 1985 году IEEE, а затем также принят на международном уровне.
42
00:05:25,830000 --> 00:05:41,170000
так вот, случилось так, что Стандарт оказал огромное влияние, потому что в то время существовали различные так называемые мэйнфреймовые компьютеры: VAX, DECVAX, HP
43
00:05:41,950000 --> 00:05:44,160000
IBM, я уже упоминал о многих других.
44
00:05:44,160000 --> 00:05:46,010000
многие из этих названий уже исчезли.
45
00:05:46,630000 --> 00:05:48,210000
все они занимались своими делами.
46
00:05:48,590000 --> 00:05:50,810000
никто из них на самом деле не хотел менять то, чем они занимались.
47
00:05:50,830000 --> 00:06:02,730000
но потом случилось то, что персональные компьютеры стремительно развивались, особенно с появлением чипов Intel, которые были приняты IBM и IBM PC.
48
00:06:04,030000 --> 00:06:18,690000
а затем и все другие производители микропроцессорных чипов, которые использовались в ПК, в частности Motorola, все они приняли тот же стандарт, с та же стандартная арифметика.
49
00:06:18,950000 --> 00:06:26,010000
и в конечном итоге все мэйнфреймы исчезли, как и большие машины IBM, которые полностью доминировали в вычислительной технике в 60-х и 70-х годах.
50
00:06:26,350000 --> 00:06:28,520000
люди больше не использовали их так часто.
51
00:06:28,520000 --> 00:06:34,090000
люди гораздо чаще использовали новые чипы Intel, которые продолжали развиваться на протяжении многих лет.
52
00:06:34,470000 --> 00:06:37,010000
так что стандарт оказался чрезвычайно успешным.
53
00:06:37,110000 --> 00:06:40,570000
индустрия действительно приняла изменения.
54
00:06:42,150000 --> 00:06:57,410000
но с точки зрения того, что произошло с тех пор, основные принципы стандарта, о которых я подробнее расскажу позже, по-прежнему широко применяются.
55
00:06:57,910000 --> 00:07:04,850000
но это 32-разрядные и 64-разрядные слова с плавающей запятой, одинарный и двойной форматы.
56
00:07:06,070000 --> 00:07:21,080000
и что произошло совсем недавно, так это то, что из-за огромного объема вычислений, необходимых для машинного обучения, различные компании производят чипы, используемые машинами
57
00:07:21,080000 --> 00:07:25,660000
learning, включая Google и NVIDIA
58
00:07:25,660000 --> 00:07:39,050000
в частности, они начали использовать эти более короткие форматы, 16-битный и даже 8-битный, а теперь даже 4-битный формат с плавающей запятой, который, в общем-то, неточен.
59
00:07:39,310000 --> 00:07:40,360000
это кардинальное изменение.
60
00:07:40,360000 --> 00:07:41,380000
это очень неточно.
61
00:07:41,380000 --> 00:07:41,760000
да.
62
00:07:41,760000 --> 00:07:43,210000
можно сказать, что это пугает.
63
00:07:45,070000 --> 00:07:48,130000
мы могли бы подробнее поговорить об этом позже, но да, вернемся к тебе.
64
00:07:48,750000 --> 00:07:56,610000
так что да, большое спасибо за это очень краткое и глубокое введение в историю с плавающей запятой.
65
00:07:56,790000 --> 00:08:05,050000
вы упомянули, что стандарт IEEE оказал огромное влияние на индустрию.
66
00:08:05,270000 --> 00:08:11,890000
а почему именно этот стандарт победил в гонке среди многих других?
67
00:08:12,470000 --> 00:08:14,480000
ну, на самом деле, это был единственный стандарт.
68
00:08:14,480000 --> 00:08:23,240000
случилось так, что все эти разные производители занимались своими делами, и стандарт сказал: "Нет, давайте все сделаем так".
69
00:08:23,240000 --> 00:08:25,170000
и не было никакого конкурирующего стандарта.
70
00:08:25,190000 --> 00:08:40,260000
и, как я уже сказал, из-за феноменального роста индустрии персональных компьютеров и используемых чипов, извините, но в этой отрасли, особенно в области чипов Intel и...
71
00:08:40,260000 --> 00:08:44,330000
чипов Motorola, все они просто приняли этот стандарт.
72
00:08:45,670000 --> 00:08:48,050000
они все согласились с тем, что это хорошая идея.
73
00:08:48,190000 --> 00:08:52,530000
тогда программы людей будут работать так, как ожидалось, на разных компьютерах.
74
00:08:54,070000 --> 00:08:57,130000
таким образом, на самом деле не существовало конкурирующего стандарта.
75
00:08:57,270000 --> 00:09:12,930000
в комитете, в который входили ученые-компьютерщики во главе с Каханом, а также множество представителей индустрии из всех крупных компаний, было много споров. известные в то время компании: IBM, HP и так далее, ДЕКАБРЬ.
76
00:09:13,470000 --> 00:09:18,370000
и они все спорили, конечно, не все пришли к единому мнению о том, что следует делать в первую очередь.
77
00:09:18,590000 --> 00:09:28,060000
но точка зрения Кахана была, ну, очень убедительной, но в то же время очень хорошо обоснованной с точки зрения теории и здравого смысла.
78
00:09:28,060000 --> 00:09:37,010000
и еще одна вещь, которая, как мне кажется, очень помогла, заключается в том, что Кахан является профессором компьютерных наук и математики, я думаю, и в Беркли.
79
00:09:37,550000 --> 00:09:43,740000
но также он приехал из Торонто, где на самом деле получил обширную подготовку в области электронного обучения, а также в области электротехники.
80
00:09:43,740000 --> 00:09:48,020000
так что он знал, о чем говорил, когда начинал, когда говорил об оборудовании.
81
00:09:48,020000 --> 00:09:50,810000
Он не был каким-то парнем, который не разбирался ни в чем из этого.
82
00:09:53,790000 --> 00:09:55,530000
короче говоря, они к нему прислушивались.
83
00:09:56,750000 --> 00:09:59,930000
я думаю, что в "стандарде" много замечательного.
84
00:10:00,270000 --> 00:10:05,540000
но я также хочу обратить внимание на некоторые проблемы, которые могут быть скрыты в этом стандарте.
85
00:10:05,540000 --> 00:10:08,620000
у тебя есть какие-нибудь существующие примеры?
86
00:10:08,620000 --> 00:10:13,970000
например, в своей книге вы упомянули, что постепенное уменьшение объема является наиболее спорной частью стандарта.
87
00:10:14,190000 --> 00:10:18,080000
так оно и было, но одна вещь, которая изменилась, заключается в том, что это больше не вызывает споров.
88
00:10:18,080000 --> 00:10:20,560000
это в значительной степени нашло применение в аппаратном обеспечении.
89
00:10:20,560000 --> 00:10:27,010000
случилось так, что для того, чтобы... ну, может быть, сначала нам следует объяснить нашим слушателям, что такое постепенный сброс.
90
00:10:28,990000 --> 00:10:33,650000
в формате с плавающей запятой у вас есть только, скажем, 32 бита.
91
00:10:34,870000 --> 00:10:40,810000
давайте сначала объясним, как, прежде чем мы перейдем к "недостаточному потоку", давайте объясним, как используются эти 32 бита.
92
00:10:41,070000 --> 00:10:44,970000
итак, есть один бит, который необходим для обозначения знака числа, плюс или минус.
93
00:10:45,390000 --> 00:10:47,170000
так что теперь у тебя осталось 31.
94
00:10:47,390000 --> 00:10:58,650000
так вот, в формате, который они согласились принять по разным причинам, следующие восемь битов использовались для представления показателя степени с плавающей запятой.
95
00:10:58,830000 --> 00:11:14,450000
итак, система с плавающей запятой - это система, которую иногда сравнивают с научной нотацией, где у вас есть, скажем так, простейший пример, давайте возьмем число 16.
96
00:11:14,550000 --> 00:11:16,370000
16 - это 2 в степени 4.
97
00:11:16,510000 --> 00:11:21,130000
ну, в двоичном формате, потому что мы всегда используем двоичный код с плавающей запятой, это совсем другая история.
98
00:11:21,270000 --> 00:11:25,330000
на самом деле существует десятичная точка, десятичная точка с плавающей запятой два, которая используется в бизнесе.
99
00:11:25,510000 --> 00:11:32,770000
но с научной точки зрения, в научных приложениях, в подавляющем большинстве приложений, используется двоичная точка с плавающей запятой.
100
00:11:33,150000 --> 00:11:43,370000
итак, число 16 в двоичной системе счисления равно 1,0000 и так далее, столько нулей, сколько вы хотите, умножьте на 2 в степени 4, получится 16.
101
00:11:43,950000 --> 00:11:50,130000
16 - это 2, умноженное на 2, умноженное на 2, умноженное на 2, умноженное на 2, 16.
102
00:11:50,310000 --> 00:11:59,850000
таким образом, число 4 хранится в поле экспоненты 32-битного слова.
103
00:12:00,190000 --> 00:12:11,690000
у вас есть до 8 бит, так что вы можете увеличить показатель примерно до 127, потому что вы также должны учитывать отрицательные показатели.
104
00:12:12,830000 --> 00:12:21,450000
а затем оставшиеся 23 бита в слове, верно, потому что их 32, но мы использовали 1 для синуса, 8 для показателя степени, это для так называемого значимого показателя.
105
00:12:21,590000 --> 00:12:27,980000
так что в случае с числом 16, поскольку оно в точности соответствует степени 2, получается просто 1.000, а затем куча нулей.
106
00:12:27,980000 --> 00:12:43,000000
но более сложное число, такое как пи, конечно, или даже что-то вроде, скажем, почти любого числа на самом деле, не будет равно 1.000, но так и будет, вы знаете, так и будет
107
00:12:43,000000 --> 00:12:45,690000
чтобы в расширении была куча единиц и нулей.
108
00:12:47,110000 --> 00:12:54,410000
таким образом, у вас есть 23 бита для этого значения, плюс еще один бит, который называется скрытым, но давайте пока оставим это в стороне.
109
00:12:54,830000 --> 00:12:57,890000
а затем у вас есть эти восемь бит для показателя степени.
110
00:12:58,070000 --> 00:13:05,560000
а показатель степени, как я уже сказал, варьируется примерно от минус 127 до плюс 127.
111
00:13:05,560000 --> 00:13:12,050000
есть пара специальных показателей степени, которые представляют особые числа, такие как ноль и бесконечность, что является еще одним интересным числом.
112
00:13:13,230000 --> 00:13:28,380000
но дело в постепенном уменьшении числа - это то, что происходит, когда число опускается до 2 до минус 126, я думаю, что это так и есть, ниже этого, вы могли бы сказать, ну послушайте, мы не можем сохранить число, которое меньше этого, так что
113
00:13:28,380000 --> 00:13:29,920000
нам придется снизить этот показатель до нуля.
114
00:13:29,920000 --> 00:13:34,610000
это будет не постепенный сброс, а резкий сброс.
115
00:13:34,710000 --> 00:13:51,130000
но постепенный сброс говорит о том, что, ну, нет, на самом деле, если быть немного умнее, мы действительно можем сохранить 2 до минус 127, 2 до минус 128, вплоть до того, что на самом деле это от 2 до минус 149 в так называемой одинарной точности, в 32-битном формате.
116
00:13:51,510000 --> 00:13:54,080000
вот что такое постепенный отток.
117
00:13:54,080000 --> 00:14:09,160000
так вот, как я уже сказал, это было спорно, потому что реализация арифметики с числами, которые могут быть так называемыми субнормальными, означает, что они опустились ниже этого порога оттока в субнормальный диапазон, используя постепенный отток
118
00:14:09,160000 --> 00:14:17,490000
в underflow используется арифметика, которая работает как с числами такого типа, так и с обычными числами с плавающей запятой, нормализованными.
119
00:14:18,150000 --> 00:14:23,620000
ну что ж, это дороже, сложнее, и многие производители просто не хотели этого делать.
120
00:14:23,620000 --> 00:14:25,820000
компания DEC, в частности, была категорически против этого.
121
00:14:25,820000 --> 00:14:30,770000
но Intel была в восторге, вероятно, из-за влияния Кахана.
122
00:14:32,350000 --> 00:14:45,090000
но в конце концов все поняли, что им было разрешено делать это в программном обеспечении, чтобы соответствовать стандарту, но это было проблемой, потому что тогда машины действительно могли бы выполнять вычисления. притормози.
123
00:14:46,550000 --> 00:14:55,200000
так что, в конце концов, практически все перешли на постепенный отказ от аппаратного обеспечения.
124
00:14:55,200000 --> 00:14:58,370000
так что на самом деле это уже не вызывает споров, но так было тогда.
125
00:14:59,350000 --> 00:15:02,010000
так что это одна из тех вещей, которые изменились к лучшему.
126
00:15:02,750000 --> 00:15:05,090000
может быть, есть какие-то другие примеры.
127
00:15:06,470000 --> 00:15:11,210000
ну что ж, самый важный из них на данный момент - это короткий формат для машинного обучения.
128
00:15:12,710000 --> 00:15:15,250000
не могли бы вы рассказать об этом чуть подробнее, пожалуйста?
129
00:15:15,310000 --> 00:15:15,930000
конечно.
130
00:15:19,110000 --> 00:15:24,080000
итак, стандарт определяет несколько форматов с плавающей запятой.
131
00:15:24,080000 --> 00:15:27,930000
32-битный формат - это так называемая одинарная точность.
132
00:15:28,070000 --> 00:15:30,210000
на языке Си это называется float.
133
00:15:31,390000 --> 00:15:36,440000
64-битный формат double - это двойная точность, на языке Си это называется double.
134
00:15:36,440000 --> 00:15:38,440000
я думаю, в Python это называется float, верно?
135
00:15:38,440000 --> 00:15:40,440000
это то, что тебя, по-видимому, интересует.
136
00:15:40,440000 --> 00:15:47,930000
потому что Python, по крайней мере, оригинальный Python, работает только с 64-битными числами с плавающей запятой двойной точности.
137
00:15:48,430000 --> 00:15:50,780000
насколько я понимаю, пожалуйста, поправьте меня, если я ошибаюсь.
138
00:15:50,780000 --> 00:15:51,770000
да, все правильно.
139
00:15:51,830000 --> 00:15:52,450000
да.
140
00:15:55,990000 --> 00:15:58,920000
хорошо, тогда как насчет более длинных и более коротких форматов?
141
00:15:58,920000 --> 00:16:11,090000
ну что ж, в формате 1985 года, стандарте 1985 года, были введены только одинарные и двойные форматы, и они сказали, что для соответствия стандарту необходимо использовать одинарные форматы.
142
00:16:11,110000 --> 00:16:13,210000
и вы также можете использовать двойные форматы, если хотите.
143
00:16:14,310000 --> 00:16:18,410000
и они рекомендовали расширенный формат, но это не так интересно.
144
00:16:19,190000 --> 00:16:24,960000
так вот, предполагается, что стандарт пересматривается каждые 10 лет, потому что в противном случае срок его действия истекает.
145
00:16:24,960000 --> 00:16:26,410000
это правило IEEE.
146
00:16:27,470000 --> 00:16:32,120000
это означает, что он должен был быть пересмотрен в 2005 году.
147
00:16:32,120000 --> 00:16:35,810000
на самом деле, редакция, наконец, появилась в 2008 году после долгих обсуждений.
148
00:16:35,830000 --> 00:16:38,410000
в 2008 году было внесено довольно много изменений.
149
00:16:38,590000 --> 00:16:46,260000
так что они ввели 128-битный формат, который иногда называют четырехкратной точностью.
150
00:16:46,260000 --> 00:16:50,490000
у вас есть одинарная, двойная, четырехкратная точность, 32, 64, 128 бит.
151
00:16:51,030000 --> 00:16:54,240000
и они также ввели половинную точность, которая составляет 16 бит.
152
00:16:54,240000 --> 00:16:58,720000
но этого становится все меньше, потому что для обозначения знака все равно нужен один бит.
153
00:16:58,720000 --> 00:17:11,650000
теперь, я думаю, в стандарте IEEE half precision у вас есть пять битов для показателя степени, что означает, что показатель степени может увеличиваться только от 2 до 16, верно, от 2 от минус 16 до плюс 16, примерно, от 2 до плюс 16.
154
00:17:16,070000 --> 00:17:24,010000
я думаю, что таким образом остается 10 бит для значения, плюс один так называемый скрытый бит, который присутствует во всех числах, кроме нуля.
155
00:17:27,950000 --> 00:17:30,360000
итак, был введен 16-битный формат.
156
00:17:30,360000 --> 00:17:35,880000
обычно это называется половинной точностью, или числом, названия также были изменены.
157
00:17:35,880000 --> 00:17:42,210000
так что в 2008 году вместо одинарного и двойного чисел они стали называть их двоичными 32 и двоичными 64.
158
00:17:42,350000 --> 00:17:46,330000
часто это сокращается до FP 32 или FP 64.
159
00:17:46,790000 --> 00:17:53,410000
а затем двоичными 128 и двоичными 16, или BF 16, я имею в виду FP 16.
160
00:17:54,750000 --> 00:18:05,650000
но затем, в 2019 году, была проведена еще одна ревизия, опять же, с небольшим опозданием, на год позже, но это не было серьезной ревизией.
161
00:18:05,950000 --> 00:18:11,730000
в нем появилось несколько новых вещей и исправлена пара ошибок, но это не было чем-то особо важным.
162
00:18:11,790000 --> 00:18:17,930000
но между тем, в период с 2008 по 2016 год произошли большие изменения, и именно поэтому машинное обучение получило развитие.
163
00:18:18,230000 --> 00:18:25,130000
и вот что произошло: именно Google первым сказал: "Хорошо, давайте сделаем так"... Ну, это был не только Google.
164
00:18:25,670000 --> 00:18:40,290000
Группа людей, работающих в области машинного обучения, говорили: "Эй, давайте использовать 16-битный формат, потому что, когда вы говорите о умножении двух 16-битных чисел, это очень много"
165
00:18:41,950000 --> 00:18:49,090000
этот процесс требует гораздо меньше энергии, чем умножение 32-битных чисел.
166
00:18:51,110000 --> 00:18:56,210000
таким образом, вы экономите энергию и пространство за счет использования более коротких форматов.
167
00:18:57,310000 --> 00:19:00,410000
до появления машинного обучения это не было такой уж большой проблемой.
168
00:19:00,590000 --> 00:19:05,600000
но что произошло с машинным обучением, так это то, что в нем задействовано огромное количество вычислений.
169
00:19:05,600000 --> 00:19:12,330000
и причина, по которой машинное обучение внезапно стало таким успешным, заключается в том, что теперь это возможно благодаря современным технологиям.
170
00:19:12,790000 --> 00:19:16,260000
раньше было невозможно выполнять такие масштабные вычисления.
171
00:19:16,260000 --> 00:19:17,930000
это было просто слишком дорого.
172
00:19:18,670000 --> 00:19:23,410000
но сейчас, когда компьютеры становятся все быстрее и дешевле, теперь это возможно.
173
00:19:23,550000 --> 00:19:38,680000
вся идея нейронных сетей, которую продвигали Ян Лекун и другие еще до начала века, я думаю, он как бы говорил, понимаете, он
174
00:19:38,680000 --> 00:19:43,500000
я был вроде как не совсем одинок в дикой местности, но люди не были уверены, что нейронные сети вообще могут работать.
175
00:19:43,500000 --> 00:19:48,850000
а потом, примерно к 2010 году или около того, стало совершенно ясно, что они удивительно эффективны.
176
00:19:48,990000 --> 00:20:04,170000
а к 2015 или 16 году такие компании, как Google, которые разрабатывали свой TPU, тензорный процессор, поняли, что, хорошо, если мы будем использовать 16 бит, это будет намного быстрее и дешевле.
177
00:20:05,430000 --> 00:20:17,050000
но на самом деле, давайте введем новый формат, - сказали они, - потому что им не понравилось двоичное число 16, потому что диапазон значений экспоненты очень мал - от 2 до минус 16 и от 2 до 16.
178
00:20:17,670000 --> 00:20:22,370000
так вот, они представили нечто, что они назвали bfloat 16.
179
00:20:22,710000 --> 00:20:25,130000
B означает "мозг", Google brain.
180
00:20:26,390000 --> 00:20:29,690000
и в этом формате у вас все еще остается один бит для обозначения знака.
181
00:20:30,510000 --> 00:20:37,730000
но теперь у вас есть восемь бит для показателя степени, что соответствует стандарту IEEE single precision.
182
00:20:38,510000 --> 00:20:42,290000
ну и ладно, тогда получается, что используется девять из ваших 16 бит.
183
00:20:42,590000 --> 00:20:45,050000
и что же у тебя осталось?
184
00:20:45,270000 --> 00:20:55,330000
теперь у тебя осталось семь бит плюс один скрытый бит, которого недостаточно даже для того, чтобы представить точность более двух десятичных разрядов.
185
00:20:57,190000 --> 00:21:02,010000
возможно, это не так очевидно, но мы могли бы поговорить об этом позже, если это представляет интерес.
186
00:21:05,270000 --> 00:21:13,500000
люди были немного шокированы тем, что в цифрах так мало точности, но они сказали: "Слушай, эй, это же машинное обучение".
187
00:21:13,500000 --> 00:21:18,770000
мы выполняем огромные объемы ИТ-работ, и у нас много избыточности, и нам не нужна высокая точность.
188
00:21:22,710000 --> 00:21:28,100000
вы не можешь спорить с тем фактом, что машинное обучение оказалось чрезвычайно успешным, так что, по-видимому, оно работает.
189
00:21:28,100000 --> 00:21:35,010000
вряд ли тебе захочется делать это для решения научных задач, требующих высокоточных вычислений.
190
00:21:35,950000 --> 00:21:40,170000
но в машинном обучении, похоже, в этом нет необходимости.
191
00:21:41,390000 --> 00:21:44,570000
поэтому они представили BFLOAT 16 и создали свои собственные чипы.
192
00:21:45,390000 --> 00:21:47,770000
они не особо скрывали это.
193
00:21:50,790000 --> 00:21:52,130000
они действительно опубликовали это.
194
00:21:53,030000 --> 00:22:04,410000
а затем другие производители начали придерживаться того же формата, включая NVIDIA и Intel, которые, как я полагаю, являются двумя крупнейшими игроками, производящими чипы на данный момент.
195
00:22:08,230000 --> 00:22:13,210000
ну, может быть, еще один или два, но в любом случае, это, безусловно, два очень крупных производителя.
196
00:22:19,830000 --> 00:22:21,050000
так что все в порядке.
197
00:22:22,310000 --> 00:22:25,600000
тогда люди сказали: "Ну, послушай, если 16 бит, то почему не 8 бит"?
198
00:22:25,600000 --> 00:22:31,650000
так вот, группа исследователей начала использовать 8 бит, сначала просто имитируя это, потому что у них не было 8-битного оборудования.
199
00:22:32,390000 --> 00:22:37,490000
но с другой стороны, производители начали создавать 8-битное оборудование.
200
00:22:37,910000 --> 00:22:42,610000
так что и Intel, и NVIDIA выпустили 8-битные чипы с плавающей запятой.
201
00:22:42,950000 --> 00:22:44,890000
ну что ж, этого становится все меньше.
202
00:22:45,190000 --> 00:22:57,900000
а теперь последняя новость: всего несколько месяцев назад, я думаю, это было в апреле или около того, NVIDIA объявила, что они выпускают 4-битные чипы с плавающей запятой, что в некотором роде шокирует.
203
00:22:57,900000 --> 00:22:58,970000
я имею в виду, что это только начало.
204
00:22:59,190000 --> 00:23:03,860000
я даже не знаю, как представить их двоичную структуру.
205
00:23:03,860000 --> 00:23:15,050000
итак, первый бит, очевидно, обозначает знак, затем два бита, я полагаю, обозначают показатель степени и один бит - мантиссу.
206
00:23:15,910000 --> 00:23:18,250000
да, мантисса - это еще одно слово, обозначающее значение.
207
00:23:19,510000 --> 00:23:21,570000
это прекрасно, только для нашей аудитории.
208
00:23:23,030000 --> 00:23:26,760000
да, именно так, плюс один скрытый бит, который дает вам два бита для значения.
209
00:23:26,760000 --> 00:23:29,250000
на самом деле я не уверен, так ли это на самом деле.
210
00:23:29,310000 --> 00:23:31,860000
скорее всего, так оно и есть, или, может быть, на один бит меньше для показателя степени.
211
00:23:31,860000 --> 00:23:32,260000
я не уверен.
212
00:23:32,260000 --> 00:23:33,240000
я еще не проверял это.
213
00:23:33,240000 --> 00:23:35,010000
я планирую сделать это очень скоро.
214
00:23:36,710000 --> 00:23:39,490000
в любом случае, где же предел?
215
00:23:39,990000 --> 00:23:42,010000
да, это довольно интересно.
216
00:23:42,790000 --> 00:23:46,810000
вы также довольно часто упоминал об этом скрытом бите.
217
00:23:46,870000 --> 00:23:49,770000
так что не могли бы вы, пожалуйста, объяснить, что такое скрытый бит?
218
00:23:49,910000 --> 00:23:57,020000
каждое число, каждая двоичная система, каждое число, за исключением нуля, имеет начальную единицу, верно?
219
00:23:57,020000 --> 00:24:06,060000
поскольку вы всегда можете это сделать, весь смысл использования плавающей запятой заключается в том, что вы нормализуете, сдвигаете двоичную точку так, чтобы она переместилась в нужное положение.
220
00:24:06,060000 --> 00:24:07,400000
вот почему это называется плавающей запятой.
221
00:24:07,400000 --> 00:24:13,600000
она перемещается в положение, где единица находится впереди двоичной точки, а затем ноль, ноль, ноль.
222
00:24:13,600000 --> 00:24:20,820000
дело в том, что все числа, будь то число пи, квадратный корень из двух или одна десятая, представляют интерес.
223
00:24:20,820000 --> 00:24:21,690000
давай попробуем именно это.
224
00:24:21,710000 --> 00:24:36,730000
одна десятая равна 1,100110011001100 точка-точка-точка, умноженная на 2 с минусом
225
00:24:37,310000 --> 00:24:39,290000
ему 4 года, если я правильно помню.
226
00:24:39,430000 --> 00:24:41,450000
для этого мне нужно воспользоваться калькулятором.
227
00:24:46,190000 --> 00:24:48,130000
получается, что это одна десятая часть.
228
00:24:48,270000 --> 00:24:48,890000
все в порядке.
229
00:24:49,350000 --> 00:24:50,650000
примерно одна десятая часть, да.
230
00:24:51,150000 --> 00:24:54,130000
да, именно так, если вы будешь продолжать в том же духе вечно.
231
00:24:55,150000 --> 00:24:57,080000
но опять же, как видишь, все начинается с 1.
232
00:24:57,080000 --> 00:25:02,330000
ну, конечно же, все начинается с 1, потому что я расставил двоичную точку так, чтобы впереди была 1.
233
00:25:02,830000 --> 00:25:06,090000
я не ставил 0,0001100.
234
00:25:06,310000 --> 00:25:15,690000
я мог бы это сделать, но весь смысл плавающей точки в том, что вы хотите переместить эту двоичную точку, чтобы получить значение один впереди, и тогда у тебя будет в разы больше силы.
235
00:25:16,110000 --> 00:25:19,090000
а вот тот, что спереди, зачем нам его хранить?
236
00:25:19,350000 --> 00:25:22,210000
мы знаем, что это единица, так что это скрытый бит.
237
00:25:22,390000 --> 00:25:33,610000
так вот, до появления стандарта, на самом деле именно Vax первым начал это делать, DEC VAX, но до появления DEC VAX Люди сохраняли это, и причина в том, что им нужен был способ записать ноль.
238
00:25:33,870000 --> 00:25:35,130000
а ноль равен 0,000.
239
00:25:36,150000 --> 00:25:39,360000
вы не можете заменить двоичную точку на ноль, чтобы получить единицу впереди.
240
00:25:39,360000 --> 00:25:40,220000
здесь никого нет.
241
00:25:40,220000 --> 00:25:41,530000
там сплошные нули.
242
00:25:41,550000 --> 00:25:46,970000
но, видишь ли, вместо нуля можно использовать специальный показатель степени.
243
00:25:47,670000 --> 00:26:02,740000
так что, возвращаясь к 32-битному формату, я сказал, что цифры - это что-то вроде от минус 126 до плюс 127, но при этом остается пара свободных чисел, и
244
00:26:02,740000 --> 00:26:07,930000
число, которое соответствует минус 127, соответствует нулю.
245
00:26:08,630000 --> 00:26:19,170000
число, находящееся на другом конце диапазона, показатель степени 128, по-моему, или, может быть, 127, соответствует бесконечности.
246
00:26:19,430000 --> 00:26:26,410000
потому что в арифметике IEEE единица, деленная на ноль, равна бесконечности.
247
00:26:26,550000 --> 00:26:27,170000
да.
248
00:26:28,310000 --> 00:26:30,210000
но это очень интересная часть.
249
00:26:30,270000 --> 00:26:36,250000
в некоторых языках это считается бесконечностью, но в некоторых языках есть исключения.
250
00:26:36,310000 --> 00:26:38,100000
например, CPython делает это.