diff --git a/translated_images/1200px-Girl_and_cat.89bd70951181e86a088f41f72415b6324ba4fe506148c6f18dca4e2ef3079ec3.hk.jpg b/translated_images/1200px-Girl_and_cat.89bd70951181e86a088f41f72415b6324ba4fe506148c6f18dca4e2ef3079ec3.hk.jpg new file mode 100644 index 00000000..7112c185 Binary files /dev/null and b/translated_images/1200px-Girl_and_cat.89bd70951181e86a088f41f72415b6324ba4fe506148c6f18dca4e2ef3079ec3.hk.jpg differ diff --git a/translated_images/1200px-Girl_and_cat.89bd70951181e86a088f41f72415b6324ba4fe506148c6f18dca4e2ef3079ec3.tw.jpg b/translated_images/1200px-Girl_and_cat.89bd70951181e86a088f41f72415b6324ba4fe506148c6f18dca4e2ef3079ec3.tw.jpg new file mode 100644 index 00000000..7112c185 Binary files /dev/null and b/translated_images/1200px-Girl_and_cat.89bd70951181e86a088f41f72415b6324ba4fe506148c6f18dca4e2ef3079ec3.tw.jpg differ diff --git a/translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.hk.png b/translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.hk.png new file mode 100644 index 00000000..2e350440 Binary files /dev/null and b/translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.hk.png differ diff --git a/translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.tw.png b/translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.tw.png new file mode 100644 index 00000000..2da28627 Binary files /dev/null and b/translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.tw.png differ diff --git a/translated_images/ComputeGraph.463c9d8ebdcb22158e0563fcc50171dfbf3cb40443b597bc642b0f34ac23abbf.hk.png b/translated_images/ComputeGraph.463c9d8ebdcb22158e0563fcc50171dfbf3cb40443b597bc642b0f34ac23abbf.hk.png new file mode 100644 index 00000000..c94b929d Binary files /dev/null and b/translated_images/ComputeGraph.463c9d8ebdcb22158e0563fcc50171dfbf3cb40443b597bc642b0f34ac23abbf.hk.png differ diff --git a/translated_images/ComputeGraph.463c9d8ebdcb22158e0563fcc50171dfbf3cb40443b597bc642b0f34ac23abbf.tw.png b/translated_images/ComputeGraph.463c9d8ebdcb22158e0563fcc50171dfbf3cb40443b597bc642b0f34ac23abbf.tw.png new file mode 100644 index 00000000..c94b929d Binary files /dev/null and b/translated_images/ComputeGraph.463c9d8ebdcb22158e0563fcc50171dfbf3cb40443b597bc642b0f34ac23abbf.tw.png differ diff --git a/translated_images/ComputeGraphGrad.4626252c0de035075e5cd2b7f71b776d5e3e8f64f2dc472b4420d3fdfaf53ba8.hk.png b/translated_images/ComputeGraphGrad.4626252c0de035075e5cd2b7f71b776d5e3e8f64f2dc472b4420d3fdfaf53ba8.hk.png new file mode 100644 index 00000000..9c03605a Binary files /dev/null and b/translated_images/ComputeGraphGrad.4626252c0de035075e5cd2b7f71b776d5e3e8f64f2dc472b4420d3fdfaf53ba8.hk.png differ diff --git a/translated_images/ComputeGraphGrad.4626252c0de035075e5cd2b7f71b776d5e3e8f64f2dc472b4420d3fdfaf53ba8.tw.png b/translated_images/ComputeGraphGrad.4626252c0de035075e5cd2b7f71b776d5e3e8f64f2dc472b4420d3fdfaf53ba8.tw.png new file mode 100644 index 00000000..9c03605a Binary files /dev/null and b/translated_images/ComputeGraphGrad.4626252c0de035075e5cd2b7f71b776d5e3e8f64f2dc472b4420d3fdfaf53ba8.tw.png differ diff --git a/translated_images/CoreferenceResolution.861924d6d384a7d68d8d0039d06a71a151f18a796b8b1330239d3590bd4947eb.hk.png b/translated_images/CoreferenceResolution.861924d6d384a7d68d8d0039d06a71a151f18a796b8b1330239d3590bd4947eb.hk.png new file mode 100644 index 00000000..4313582c Binary files /dev/null and b/translated_images/CoreferenceResolution.861924d6d384a7d68d8d0039d06a71a151f18a796b8b1330239d3590bd4947eb.hk.png differ diff --git a/translated_images/CoreferenceResolution.861924d6d384a7d68d8d0039d06a71a151f18a796b8b1330239d3590bd4947eb.tw.png b/translated_images/CoreferenceResolution.861924d6d384a7d68d8d0039d06a71a151f18a796b8b1330239d3590bd4947eb.tw.png new file mode 100644 index 00000000..4313582c Binary files /dev/null and b/translated_images/CoreferenceResolution.861924d6d384a7d68d8d0039d06a71a151f18a796b8b1330239d3590bd4947eb.tw.png differ diff --git a/translated_images/Cross-Entropy-Loss.dc7ba633d2467ef3ae9ff8f06546ffcdff1347fa032b8e4b3d70b9e4ad0bf506.hk.png b/translated_images/Cross-Entropy-Loss.dc7ba633d2467ef3ae9ff8f06546ffcdff1347fa032b8e4b3d70b9e4ad0bf506.hk.png new file mode 100644 index 00000000..4dd0951c Binary files /dev/null and b/translated_images/Cross-Entropy-Loss.dc7ba633d2467ef3ae9ff8f06546ffcdff1347fa032b8e4b3d70b9e4ad0bf506.hk.png differ diff --git a/translated_images/Cross-Entropy-Loss.dc7ba633d2467ef3ae9ff8f06546ffcdff1347fa032b8e4b3d70b9e4ad0bf506.tw.png b/translated_images/Cross-Entropy-Loss.dc7ba633d2467ef3ae9ff8f06546ffcdff1347fa032b8e4b3d70b9e4ad0bf506.tw.png new file mode 100644 index 00000000..4dd0951c Binary files /dev/null and b/translated_images/Cross-Entropy-Loss.dc7ba633d2467ef3ae9ff8f06546ffcdff1347fa032b8e4b3d70b9e4ad0bf506.tw.png differ diff --git a/translated_images/DALL·E 2023-06-20 15.56.56 - a closeup watercolor portrait of young male teacher of literature with a book.56499a0c282407c94d2b8e9337d8a006f2a7a90e067f3c34a8c6425ea905f490.hk.png b/translated_images/DALL·E 2023-06-20 15.56.56 - a closeup watercolor portrait of young male teacher of literature with a book.56499a0c282407c94d2b8e9337d8a006f2a7a90e067f3c34a8c6425ea905f490.hk.png new file mode 100644 index 00000000..817ac42d Binary files /dev/null and b/translated_images/DALL·E 2023-06-20 15.56.56 - a closeup watercolor portrait of young male teacher of literature with a book.56499a0c282407c94d2b8e9337d8a006f2a7a90e067f3c34a8c6425ea905f490.hk.png differ diff --git a/translated_images/DALL·E 2023-06-20 15.56.56 - a closeup watercolor portrait of young male teacher of literature with a book.56499a0c282407c94d2b8e9337d8a006f2a7a90e067f3c34a8c6425ea905f490.tw.png b/translated_images/DALL·E 2023-06-20 15.56.56 - a closeup watercolor portrait of young male teacher of literature with a book.56499a0c282407c94d2b8e9337d8a006f2a7a90e067f3c34a8c6425ea905f490.tw.png new file mode 100644 index 00000000..817ac42d Binary files /dev/null and b/translated_images/DALL·E 2023-06-20 15.56.56 - a closeup watercolor portrait of young male teacher of literature with a book.56499a0c282407c94d2b8e9337d8a006f2a7a90e067f3c34a8c6425ea905f490.tw.png differ diff --git a/translated_images/DALL·E 2023-06-20 15.57.43 - a closeup oil portrait of young female teacher of computer science with a computer.081e8aed073e2fbfb6ddc71819ae0ba025e10144c73ad0ce906933e5382d081d.hk.png b/translated_images/DALL·E 2023-06-20 15.57.43 - a closeup oil portrait of young female teacher of computer science with a computer.081e8aed073e2fbfb6ddc71819ae0ba025e10144c73ad0ce906933e5382d081d.hk.png new file mode 100644 index 00000000..2d43fa37 Binary files /dev/null and b/translated_images/DALL·E 2023-06-20 15.57.43 - a closeup oil portrait of young female teacher of computer science with a computer.081e8aed073e2fbfb6ddc71819ae0ba025e10144c73ad0ce906933e5382d081d.hk.png differ diff --git a/translated_images/DALL·E 2023-06-20 15.57.43 - a closeup oil portrait of young female teacher of computer science with a computer.081e8aed073e2fbfb6ddc71819ae0ba025e10144c73ad0ce906933e5382d081d.tw.png b/translated_images/DALL·E 2023-06-20 15.57.43 - a closeup oil portrait of young female teacher of computer science with a computer.081e8aed073e2fbfb6ddc71819ae0ba025e10144c73ad0ce906933e5382d081d.tw.png new file mode 100644 index 00000000..2d43fa37 Binary files /dev/null and b/translated_images/DALL·E 2023-06-20 15.57.43 - a closeup oil portrait of young female teacher of computer science with a computer.081e8aed073e2fbfb6ddc71819ae0ba025e10144c73ad0ce906933e5382d081d.tw.png differ diff --git a/translated_images/DALL·E 2023-06-20 15.58.42 - a closeup oil portrait of old male teacher of mathematics in front of blackboard.534175cf58a361d952ff424cc6533143559f9d97298020f64ebac91356cbb416.hk.png b/translated_images/DALL·E 2023-06-20 15.58.42 - a closeup oil portrait of old male teacher of mathematics in front of blackboard.534175cf58a361d952ff424cc6533143559f9d97298020f64ebac91356cbb416.hk.png new file mode 100644 index 00000000..8072fbe4 Binary files /dev/null and b/translated_images/DALL·E 2023-06-20 15.58.42 - a closeup oil portrait of old male teacher of mathematics in front of blackboard.534175cf58a361d952ff424cc6533143559f9d97298020f64ebac91356cbb416.hk.png differ diff --git a/translated_images/DALL·E 2023-06-20 15.58.42 - a closeup oil portrait of old male teacher of mathematics in front of blackboard.534175cf58a361d952ff424cc6533143559f9d97298020f64ebac91356cbb416.tw.png b/translated_images/DALL·E 2023-06-20 15.58.42 - a closeup oil portrait of old male teacher of mathematics in front of blackboard.534175cf58a361d952ff424cc6533143559f9d97298020f64ebac91356cbb416.tw.png new file mode 100644 index 00000000..8072fbe4 Binary files /dev/null and b/translated_images/DALL·E 2023-06-20 15.58.42 - a closeup oil portrait of old male teacher of mathematics in front of blackboard.534175cf58a361d952ff424cc6533143559f9d97298020f64ebac91356cbb416.tw.png differ diff --git a/translated_images/DIKW_Pyramid.94126f7d2bd8db5be71c6f1658b94bd3c85342e3cb827913b556b0414d358340.hk.png b/translated_images/DIKW_Pyramid.94126f7d2bd8db5be71c6f1658b94bd3c85342e3cb827913b556b0414d358340.hk.png new file mode 100644 index 00000000..367f4ca7 Binary files /dev/null and b/translated_images/DIKW_Pyramid.94126f7d2bd8db5be71c6f1658b94bd3c85342e3cb827913b556b0414d358340.hk.png differ diff --git a/translated_images/DIKW_Pyramid.94126f7d2bd8db5be71c6f1658b94bd3c85342e3cb827913b556b0414d358340.tw.png b/translated_images/DIKW_Pyramid.94126f7d2bd8db5be71c6f1658b94bd3c85342e3cb827913b556b0414d358340.tw.png new file mode 100644 index 00000000..367f4ca7 Binary files /dev/null and b/translated_images/DIKW_Pyramid.94126f7d2bd8db5be71c6f1658b94bd3c85342e3cb827913b556b0414d358340.tw.png differ diff --git a/translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.hk.png b/translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.hk.png new file mode 100644 index 00000000..d2abf9f7 Binary files /dev/null and b/translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.hk.png differ diff --git a/translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.tw.png b/translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.tw.png new file mode 100644 index 00000000..d2abf9f7 Binary files /dev/null and b/translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.tw.png differ diff --git a/translated_images/Mark_I_perceptron_wikipedia.1f84eaa2d4b76ec9fb32bab6ae07e40faa202be1935c0fbd8c2bc2600a87bcb1.hk.jpg b/translated_images/Mark_I_perceptron_wikipedia.1f84eaa2d4b76ec9fb32bab6ae07e40faa202be1935c0fbd8c2bc2600a87bcb1.hk.jpg new file mode 100644 index 00000000..6d8e742b Binary files /dev/null and b/translated_images/Mark_I_perceptron_wikipedia.1f84eaa2d4b76ec9fb32bab6ae07e40faa202be1935c0fbd8c2bc2600a87bcb1.hk.jpg differ diff --git a/translated_images/Mark_I_perceptron_wikipedia.1f84eaa2d4b76ec9fb32bab6ae07e40faa202be1935c0fbd8c2bc2600a87bcb1.tw.jpg b/translated_images/Mark_I_perceptron_wikipedia.1f84eaa2d4b76ec9fb32bab6ae07e40faa202be1935c0fbd8c2bc2600a87bcb1.tw.jpg new file mode 100644 index 00000000..6d8e742b Binary files /dev/null and b/translated_images/Mark_I_perceptron_wikipedia.1f84eaa2d4b76ec9fb32bab6ae07e40faa202be1935c0fbd8c2bc2600a87bcb1.tw.jpg differ diff --git a/translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.hk.png b/translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.hk.png new file mode 100644 index 00000000..eb159fbe Binary files /dev/null and b/translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.hk.png differ diff --git a/translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.tw.png b/translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.tw.png new file mode 100644 index 00000000..f68f8d46 Binary files /dev/null and b/translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.tw.png differ diff --git a/translated_images/NetLogo-ModelLib.efe023afb4763c059704a8ac0e2cd5e51889b117e8eac02aaa5334cfe1c52c13.hk.png b/translated_images/NetLogo-ModelLib.efe023afb4763c059704a8ac0e2cd5e51889b117e8eac02aaa5334cfe1c52c13.hk.png new file mode 100644 index 00000000..512d3eae Binary files /dev/null and b/translated_images/NetLogo-ModelLib.efe023afb4763c059704a8ac0e2cd5e51889b117e8eac02aaa5334cfe1c52c13.hk.png differ diff --git a/translated_images/NetLogo-ModelLib.efe023afb4763c059704a8ac0e2cd5e51889b117e8eac02aaa5334cfe1c52c13.tw.png b/translated_images/NetLogo-ModelLib.efe023afb4763c059704a8ac0e2cd5e51889b117e8eac02aaa5334cfe1c52c13.tw.png new file mode 100644 index 00000000..f4f6a3a0 Binary files /dev/null and b/translated_images/NetLogo-ModelLib.efe023afb4763c059704a8ac0e2cd5e51889b117e8eac02aaa5334cfe1c52c13.tw.png differ diff --git a/translated_images/NeuroArch.4e17cdba5e445721ad0a94a738c6f1178fc9c5f36486fb0f8fccfd61964d528c.hk.png b/translated_images/NeuroArch.4e17cdba5e445721ad0a94a738c6f1178fc9c5f36486fb0f8fccfd61964d528c.hk.png new file mode 100644 index 00000000..ca56d3be Binary files /dev/null and b/translated_images/NeuroArch.4e17cdba5e445721ad0a94a738c6f1178fc9c5f36486fb0f8fccfd61964d528c.hk.png differ diff --git a/translated_images/NeuroArch.4e17cdba5e445721ad0a94a738c6f1178fc9c5f36486fb0f8fccfd61964d528c.tw.png b/translated_images/NeuroArch.4e17cdba5e445721ad0a94a738c6f1178fc9c5f36486fb0f8fccfd61964d528c.tw.png new file mode 100644 index 00000000..ca56d3be Binary files /dev/null and b/translated_images/NeuroArch.4e17cdba5e445721ad0a94a738c6f1178fc9c5f36486fb0f8fccfd61964d528c.tw.png differ diff --git a/translated_images/ObjDetectionPrecisionRecall.d2ef5b6081a0b094b5242ff6aa810ef25285f5a4e0efcc604c31708798fd51ee.hk.png b/translated_images/ObjDetectionPrecisionRecall.d2ef5b6081a0b094b5242ff6aa810ef25285f5a4e0efcc604c31708798fd51ee.hk.png new file mode 100644 index 00000000..e4957213 Binary files /dev/null and b/translated_images/ObjDetectionPrecisionRecall.d2ef5b6081a0b094b5242ff6aa810ef25285f5a4e0efcc604c31708798fd51ee.hk.png differ diff --git a/translated_images/ObjDetectionPrecisionRecall.d2ef5b6081a0b094b5242ff6aa810ef25285f5a4e0efcc604c31708798fd51ee.tw.png b/translated_images/ObjDetectionPrecisionRecall.d2ef5b6081a0b094b5242ff6aa810ef25285f5a4e0efcc604c31708798fd51ee.tw.png new file mode 100644 index 00000000..e4957213 Binary files /dev/null and b/translated_images/ObjDetectionPrecisionRecall.d2ef5b6081a0b094b5242ff6aa810ef25285f5a4e0efcc604c31708798fd51ee.tw.png differ diff --git a/translated_images/ObjDetectionPrecisionRecallIoU.96b4116fcd30ce5a6f0db4193ce61830ea03e505138410480fc16f9051694a40.hk.png b/translated_images/ObjDetectionPrecisionRecallIoU.96b4116fcd30ce5a6f0db4193ce61830ea03e505138410480fc16f9051694a40.hk.png new file mode 100644 index 00000000..03a69dd1 Binary files /dev/null and b/translated_images/ObjDetectionPrecisionRecallIoU.96b4116fcd30ce5a6f0db4193ce61830ea03e505138410480fc16f9051694a40.hk.png differ diff --git a/translated_images/ObjDetectionPrecisionRecallIoU.96b4116fcd30ce5a6f0db4193ce61830ea03e505138410480fc16f9051694a40.tw.png b/translated_images/ObjDetectionPrecisionRecallIoU.96b4116fcd30ce5a6f0db4193ce61830ea03e505138410480fc16f9051694a40.tw.png new file mode 100644 index 00000000..d6c40e2e Binary files /dev/null and b/translated_images/ObjDetectionPrecisionRecallIoU.96b4116fcd30ce5a6f0db4193ce61830ea03e505138410480fc16f9051694a40.tw.png differ diff --git a/translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.hk.png b/translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.hk.png new file mode 100644 index 00000000..a754471f Binary files /dev/null and b/translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.hk.png differ diff --git a/translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.tw.png b/translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.tw.png new file mode 100644 index 00000000..a754471f Binary files /dev/null and b/translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.tw.png differ diff --git a/translated_images/Rosenblatt-wikipedia.294821b285ac796d2281a556fe3de9a7aa328e34cdd25f3ac9deefa0982ea2df.hk.jpg b/translated_images/Rosenblatt-wikipedia.294821b285ac796d2281a556fe3de9a7aa328e34cdd25f3ac9deefa0982ea2df.hk.jpg new file mode 100644 index 00000000..262d4559 Binary files /dev/null and b/translated_images/Rosenblatt-wikipedia.294821b285ac796d2281a556fe3de9a7aa328e34cdd25f3ac9deefa0982ea2df.hk.jpg differ diff --git a/translated_images/Rosenblatt-wikipedia.294821b285ac796d2281a556fe3de9a7aa328e34cdd25f3ac9deefa0982ea2df.tw.jpg b/translated_images/Rosenblatt-wikipedia.294821b285ac796d2281a556fe3de9a7aa328e34cdd25f3ac9deefa0982ea2df.tw.jpg new file mode 100644 index 00000000..262d4559 Binary files /dev/null and b/translated_images/Rosenblatt-wikipedia.294821b285ac796d2281a556fe3de9a7aa328e34cdd25f3ac9deefa0982ea2df.tw.jpg differ diff --git a/translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.hk.png b/translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.hk.png new file mode 100644 index 00000000..ef6d1b5e Binary files /dev/null and b/translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.hk.png differ diff --git a/translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.tw.png b/translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.tw.png new file mode 100644 index 00000000..86461466 Binary files /dev/null and b/translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.tw.png differ diff --git a/translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.hk.png b/translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.hk.png new file mode 100644 index 00000000..04699092 Binary files /dev/null and b/translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.hk.png differ diff --git a/translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.tw.png b/translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.tw.png new file mode 100644 index 00000000..04699092 Binary files /dev/null and b/translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.tw.png differ diff --git a/translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.hk.png b/translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.hk.png new file mode 100644 index 00000000..0e739ec7 Binary files /dev/null and b/translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.hk.png differ diff --git a/translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.tw.png b/translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.tw.png new file mode 100644 index 00000000..0e739ec7 Binary files /dev/null and b/translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.tw.png differ diff --git a/translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.hk.png b/translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.hk.png new file mode 100644 index 00000000..c2daf0e1 Binary files /dev/null and b/translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.hk.png differ diff --git a/translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.tw.png b/translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.tw.png new file mode 100644 index 00000000..c2daf0e1 Binary files /dev/null and b/translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.tw.png differ diff --git a/translated_images/aae.9d418a990fc75bf9204b701eb6998206fd1b986643cc4e9b899aabdd27504702.hk.png b/translated_images/aae.9d418a990fc75bf9204b701eb6998206fd1b986643cc4e9b899aabdd27504702.hk.png new file mode 100644 index 00000000..1a481b15 Binary files /dev/null and b/translated_images/aae.9d418a990fc75bf9204b701eb6998206fd1b986643cc4e9b899aabdd27504702.hk.png differ diff --git a/translated_images/aae.9d418a990fc75bf9204b701eb6998206fd1b986643cc4e9b899aabdd27504702.tw.png b/translated_images/aae.9d418a990fc75bf9204b701eb6998206fd1b986643cc4e9b899aabdd27504702.tw.png new file mode 100644 index 00000000..1a481b15 Binary files /dev/null and b/translated_images/aae.9d418a990fc75bf9204b701eb6998206fd1b986643cc4e9b899aabdd27504702.tw.png differ diff --git a/translated_images/activation-func.b4924007c7ce77648d4b1dd3e81c689453204902c096c626735c7b53688cdc63.hk.png b/translated_images/activation-func.b4924007c7ce77648d4b1dd3e81c689453204902c096c626735c7b53688cdc63.hk.png new file mode 100644 index 00000000..599d5f52 Binary files /dev/null and b/translated_images/activation-func.b4924007c7ce77648d4b1dd3e81c689453204902c096c626735c7b53688cdc63.hk.png differ diff --git a/translated_images/activation-func.b4924007c7ce77648d4b1dd3e81c689453204902c096c626735c7b53688cdc63.tw.png b/translated_images/activation-func.b4924007c7ce77648d4b1dd3e81c689453204902c096c626735c7b53688cdc63.tw.png new file mode 100644 index 00000000..6eb756c0 Binary files /dev/null and b/translated_images/activation-func.b4924007c7ce77648d4b1dd3e81c689453204902c096c626735c7b53688cdc63.tw.png differ diff --git a/translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.hk.png b/translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.hk.png new file mode 100644 index 00000000..2da4f4e2 Binary files /dev/null and b/translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.hk.png differ diff --git a/translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.tw.png b/translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.tw.png new file mode 100644 index 00000000..2da4f4e2 Binary files /dev/null and b/translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.tw.png differ diff --git a/translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.hk.png b/translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.hk.png new file mode 100644 index 00000000..76b9a673 Binary files /dev/null and b/translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.hk.png differ diff --git a/translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.tw.png b/translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.tw.png new file mode 100644 index 00000000..5bf9a6dc Binary files /dev/null and b/translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.tw.png differ diff --git a/translated_images/ai-for-beginners.b354ca904b22cd70ef0d0df7b0c8633af55878f9aba882d9b9971d12badff175.hk.png b/translated_images/ai-for-beginners.b354ca904b22cd70ef0d0df7b0c8633af55878f9aba882d9b9971d12badff175.hk.png new file mode 100644 index 00000000..8a2f37d6 Binary files /dev/null and b/translated_images/ai-for-beginners.b354ca904b22cd70ef0d0df7b0c8633af55878f9aba882d9b9971d12badff175.hk.png differ diff --git a/translated_images/ai-for-beginners.b354ca904b22cd70ef0d0df7b0c8633af55878f9aba882d9b9971d12badff175.tw.png b/translated_images/ai-for-beginners.b354ca904b22cd70ef0d0df7b0c8633af55878f9aba882d9b9971d12badff175.tw.png new file mode 100644 index 00000000..7621bcb7 Binary files /dev/null and b/translated_images/ai-for-beginners.b354ca904b22cd70ef0d0df7b0c8633af55878f9aba882d9b9971d12badff175.tw.png differ diff --git a/translated_images/ai-intro.bf28d1ac4235881c096f0ffdb320ba4102940eafcca4e9d7a55a03914361f8f3.hk.png b/translated_images/ai-intro.bf28d1ac4235881c096f0ffdb320ba4102940eafcca4e9d7a55a03914361f8f3.hk.png new file mode 100644 index 00000000..53a7ff58 Binary files /dev/null and b/translated_images/ai-intro.bf28d1ac4235881c096f0ffdb320ba4102940eafcca4e9d7a55a03914361f8f3.hk.png differ diff --git a/translated_images/ai-intro.bf28d1ac4235881c096f0ffdb320ba4102940eafcca4e9d7a55a03914361f8f3.tw.png b/translated_images/ai-intro.bf28d1ac4235881c096f0ffdb320ba4102940eafcca4e9d7a55a03914361f8f3.tw.png new file mode 100644 index 00000000..280c9874 Binary files /dev/null and b/translated_images/ai-intro.bf28d1ac4235881c096f0ffdb320ba4102940eafcca4e9d7a55a03914361f8f3.tw.png differ diff --git a/translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.hk.png b/translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.hk.png new file mode 100644 index 00000000..95de2caf Binary files /dev/null and b/translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.hk.png differ diff --git a/translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.tw.png b/translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.tw.png new file mode 100644 index 00000000..e0097f37 Binary files /dev/null and b/translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.tw.png differ diff --git a/translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.hk.png b/translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.hk.png new file mode 100644 index 00000000..bbebc3a3 Binary files /dev/null and b/translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.hk.png differ diff --git a/translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.tw.png b/translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.tw.png new file mode 100644 index 00000000..9316098a Binary files /dev/null and b/translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.tw.png differ diff --git a/translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.hk.png b/translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.hk.png new file mode 100644 index 00000000..180fc522 Binary files /dev/null and b/translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.hk.png differ diff --git a/translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.tw.png b/translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.tw.png new file mode 100644 index 00000000..703e80e5 Binary files /dev/null and b/translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.tw.png differ diff --git a/translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.hk.png b/translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.hk.png new file mode 100644 index 00000000..35f80768 Binary files /dev/null and b/translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.hk.png differ diff --git a/translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.tw.png b/translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.tw.png new file mode 100644 index 00000000..5d843ef5 Binary files /dev/null and b/translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.tw.png differ diff --git a/translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.hk.png b/translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.hk.png new file mode 100644 index 00000000..23802c01 Binary files /dev/null and b/translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.hk.png differ diff --git a/translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.tw.png b/translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.tw.png new file mode 100644 index 00000000..23802c01 Binary files /dev/null and b/translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.tw.png differ diff --git a/translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.hk.png b/translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.hk.png new file mode 100644 index 00000000..62a34250 Binary files /dev/null and b/translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.hk.png differ diff --git a/translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.tw.png b/translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.tw.png new file mode 100644 index 00000000..62a34250 Binary files /dev/null and b/translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.tw.png differ diff --git a/translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.hk.png b/translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.hk.png new file mode 100644 index 00000000..644edaec Binary files /dev/null and b/translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.hk.png differ diff --git a/translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.tw.png b/translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.tw.png new file mode 100644 index 00000000..644edaec Binary files /dev/null and b/translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.tw.png differ diff --git a/translated_images/ascii-character-map.18ed6aa7f3b0a7ffeb29db95be05a245b6a20712bb2c3a9963c1ec7e9df70358.hk.png b/translated_images/ascii-character-map.18ed6aa7f3b0a7ffeb29db95be05a245b6a20712bb2c3a9963c1ec7e9df70358.hk.png new file mode 100644 index 00000000..a5a59b57 Binary files /dev/null and b/translated_images/ascii-character-map.18ed6aa7f3b0a7ffeb29db95be05a245b6a20712bb2c3a9963c1ec7e9df70358.hk.png differ diff --git a/translated_images/ascii-character-map.18ed6aa7f3b0a7ffeb29db95be05a245b6a20712bb2c3a9963c1ec7e9df70358.tw.png b/translated_images/ascii-character-map.18ed6aa7f3b0a7ffeb29db95be05a245b6a20712bb2c3a9963c1ec7e9df70358.tw.png new file mode 100644 index 00000000..a5a59b57 Binary files /dev/null and b/translated_images/ascii-character-map.18ed6aa7f3b0a7ffeb29db95be05a245b6a20712bb2c3a9963c1ec7e9df70358.tw.png differ diff --git a/translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.hk.jpg b/translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.hk.jpg new file mode 100644 index 00000000..c777090f Binary files /dev/null and b/translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.hk.jpg differ diff --git a/translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.tw.jpg b/translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.tw.jpg new file mode 100644 index 00000000..c777090f Binary files /dev/null and b/translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.tw.jpg differ diff --git a/translated_images/bag-of-words-example.606fc1738f1d7ba98a9d693e3bcd706c6e83fa7bf8221e6e90d1a206d82f2ea4.hk.png b/translated_images/bag-of-words-example.606fc1738f1d7ba98a9d693e3bcd706c6e83fa7bf8221e6e90d1a206d82f2ea4.hk.png new file mode 100644 index 00000000..9a472e54 Binary files /dev/null and b/translated_images/bag-of-words-example.606fc1738f1d7ba98a9d693e3bcd706c6e83fa7bf8221e6e90d1a206d82f2ea4.hk.png differ diff --git a/translated_images/bag-of-words-example.606fc1738f1d7ba98a9d693e3bcd706c6e83fa7bf8221e6e90d1a206d82f2ea4.tw.png b/translated_images/bag-of-words-example.606fc1738f1d7ba98a9d693e3bcd706c6e83fa7bf8221e6e90d1a206d82f2ea4.tw.png new file mode 100644 index 00000000..9a472e54 Binary files /dev/null and b/translated_images/bag-of-words-example.606fc1738f1d7ba98a9d693e3bcd706c6e83fa7bf8221e6e90d1a206d82f2ea4.tw.png differ diff --git a/translated_images/bahdanau-fig3.09ba2d37f202a6af11de6c82d2d197830ba5f4528d9ea430eb65fd3a75065973.hk.png b/translated_images/bahdanau-fig3.09ba2d37f202a6af11de6c82d2d197830ba5f4528d9ea430eb65fd3a75065973.hk.png new file mode 100644 index 00000000..2ab633d3 Binary files /dev/null and b/translated_images/bahdanau-fig3.09ba2d37f202a6af11de6c82d2d197830ba5f4528d9ea430eb65fd3a75065973.hk.png differ diff --git a/translated_images/bahdanau-fig3.09ba2d37f202a6af11de6c82d2d197830ba5f4528d9ea430eb65fd3a75065973.tw.png b/translated_images/bahdanau-fig3.09ba2d37f202a6af11de6c82d2d197830ba5f4528d9ea430eb65fd3a75065973.tw.png new file mode 100644 index 00000000..951b7d67 Binary files /dev/null and b/translated_images/bahdanau-fig3.09ba2d37f202a6af11de6c82d2d197830ba5f4528d9ea430eb65fd3a75065973.tw.png differ diff --git a/translated_images/bot-ner.4b09235dbb0ad2754ec1f54c8c797f902cbb0b45ac90b0cfc8287343cef8df2f.hk.png b/translated_images/bot-ner.4b09235dbb0ad2754ec1f54c8c797f902cbb0b45ac90b0cfc8287343cef8df2f.hk.png new file mode 100644 index 00000000..f9c25a11 Binary files /dev/null and b/translated_images/bot-ner.4b09235dbb0ad2754ec1f54c8c797f902cbb0b45ac90b0cfc8287343cef8df2f.hk.png differ diff --git a/translated_images/bot-ner.4b09235dbb0ad2754ec1f54c8c797f902cbb0b45ac90b0cfc8287343cef8df2f.tw.png b/translated_images/bot-ner.4b09235dbb0ad2754ec1f54c8c797f902cbb0b45ac90b0cfc8287343cef8df2f.tw.png new file mode 100644 index 00000000..ddff2d0f Binary files /dev/null and b/translated_images/bot-ner.4b09235dbb0ad2754ec1f54c8c797f902cbb0b45ac90b0cfc8287343cef8df2f.tw.png differ diff --git a/translated_images/bow.3811869cff59368d951c7a765ed20ebeaf7d10680eb602ea7c5312fb22f7b7ad.hk.png b/translated_images/bow.3811869cff59368d951c7a765ed20ebeaf7d10680eb602ea7c5312fb22f7b7ad.hk.png new file mode 100644 index 00000000..45d661ff Binary files /dev/null and b/translated_images/bow.3811869cff59368d951c7a765ed20ebeaf7d10680eb602ea7c5312fb22f7b7ad.hk.png differ diff --git a/translated_images/bow.3811869cff59368d951c7a765ed20ebeaf7d10680eb602ea7c5312fb22f7b7ad.tw.png b/translated_images/bow.3811869cff59368d951c7a765ed20ebeaf7d10680eb602ea7c5312fb22f7b7ad.tw.png new file mode 100644 index 00000000..45d661ff Binary files /dev/null and b/translated_images/bow.3811869cff59368d951c7a765ed20ebeaf7d10680eb602ea7c5312fb22f7b7ad.tw.png differ diff --git a/translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.hk.png b/translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.hk.png new file mode 100644 index 00000000..82fa8e43 Binary files /dev/null and b/translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.hk.png differ diff --git a/translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.tw.png b/translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.tw.png new file mode 100644 index 00000000..82fa8e43 Binary files /dev/null and b/translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.tw.png differ diff --git a/translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.hk.png b/translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.hk.png new file mode 100644 index 00000000..b51b77da Binary files /dev/null and b/translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.hk.png differ diff --git a/translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.tw.png b/translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.tw.png new file mode 100644 index 00000000..b51b77da Binary files /dev/null and b/translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.tw.png differ diff --git a/translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.hk.jpeg b/translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.hk.jpeg new file mode 100644 index 00000000..5d3ee5e4 Binary files /dev/null and b/translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.hk.jpeg differ diff --git a/translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.tw.jpeg b/translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.tw.jpeg new file mode 100644 index 00000000..5d3ee5e4 Binary files /dev/null and b/translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.tw.jpeg differ diff --git a/translated_images/cartpole.f52a67f27e058170c25efc1bca8375b60906570ea757fe8d7ef04ae8e53df29d.hk.png b/translated_images/cartpole.f52a67f27e058170c25efc1bca8375b60906570ea757fe8d7ef04ae8e53df29d.hk.png new file mode 100644 index 00000000..76b66c47 Binary files /dev/null and b/translated_images/cartpole.f52a67f27e058170c25efc1bca8375b60906570ea757fe8d7ef04ae8e53df29d.hk.png differ diff --git a/translated_images/cartpole.f52a67f27e058170c25efc1bca8375b60906570ea757fe8d7ef04ae8e53df29d.tw.png b/translated_images/cartpole.f52a67f27e058170c25efc1bca8375b60906570ea757fe8d7ef04ae8e53df29d.tw.png new file mode 100644 index 00000000..76b66c47 Binary files /dev/null and b/translated_images/cartpole.f52a67f27e058170c25efc1bca8375b60906570ea757fe8d7ef04ae8e53df29d.tw.png differ diff --git a/translated_images/catsdogsdataset.a7aff8e6085fd3f062a882179ac5e5a9e652f82ca35c5f5a94f96f526da34498.hk.png b/translated_images/catsdogsdataset.a7aff8e6085fd3f062a882179ac5e5a9e652f82ca35c5f5a94f96f526da34498.hk.png new file mode 100644 index 00000000..dadebe84 Binary files /dev/null and b/translated_images/catsdogsdataset.a7aff8e6085fd3f062a882179ac5e5a9e652f82ca35c5f5a94f96f526da34498.hk.png differ diff --git a/translated_images/catsdogsdataset.a7aff8e6085fd3f062a882179ac5e5a9e652f82ca35c5f5a94f96f526da34498.tw.png b/translated_images/catsdogsdataset.a7aff8e6085fd3f062a882179ac5e5a9e652f82ca35c5f5a94f96f526da34498.tw.png new file mode 100644 index 00000000..dadebe84 Binary files /dev/null and b/translated_images/catsdogsdataset.a7aff8e6085fd3f062a882179ac5e5a9e652f82ca35c5f5a94f96f526da34498.tw.png differ diff --git a/translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.hk.png b/translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.hk.png new file mode 100644 index 00000000..8b5d6cb7 Binary files /dev/null and b/translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.hk.png differ diff --git a/translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.tw.png b/translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.tw.png new file mode 100644 index 00000000..ac0c1e70 Binary files /dev/null and b/translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.tw.png differ diff --git a/translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.hk.png b/translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.hk.png new file mode 100644 index 00000000..a9954bff Binary files /dev/null and b/translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.hk.png differ diff --git a/translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.tw.png b/translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.tw.png new file mode 100644 index 00000000..bbefb345 Binary files /dev/null and b/translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.tw.png differ diff --git a/translated_images/cnn-pyramid.85915455759ef0ce6a8cc9da2170492c85bfd9e1b61832650e2228e037039ec4.hk.png b/translated_images/cnn-pyramid.85915455759ef0ce6a8cc9da2170492c85bfd9e1b61832650e2228e037039ec4.hk.png new file mode 100644 index 00000000..00b4dfa7 Binary files /dev/null and b/translated_images/cnn-pyramid.85915455759ef0ce6a8cc9da2170492c85bfd9e1b61832650e2228e037039ec4.hk.png differ diff --git a/translated_images/cnn-pyramid.85915455759ef0ce6a8cc9da2170492c85bfd9e1b61832650e2228e037039ec4.tw.png b/translated_images/cnn-pyramid.85915455759ef0ce6a8cc9da2170492c85bfd9e1b61832650e2228e037039ec4.tw.png new file mode 100644 index 00000000..00b4dfa7 Binary files /dev/null and b/translated_images/cnn-pyramid.85915455759ef0ce6a8cc9da2170492c85bfd9e1b61832650e2228e037039ec4.tw.png differ diff --git a/translated_images/coco-examples.71bc60380fa6cceb7caad48bd09e35b6028caabd363aa04fee89c414e0870e86.hk.jpg b/translated_images/coco-examples.71bc60380fa6cceb7caad48bd09e35b6028caabd363aa04fee89c414e0870e86.hk.jpg new file mode 100644 index 00000000..87e2c770 Binary files /dev/null and b/translated_images/coco-examples.71bc60380fa6cceb7caad48bd09e35b6028caabd363aa04fee89c414e0870e86.hk.jpg differ diff --git a/translated_images/coco-examples.71bc60380fa6cceb7caad48bd09e35b6028caabd363aa04fee89c414e0870e86.tw.jpg b/translated_images/coco-examples.71bc60380fa6cceb7caad48bd09e35b6028caabd363aa04fee89c414e0870e86.tw.jpg new file mode 100644 index 00000000..87e2c770 Binary files /dev/null and b/translated_images/coco-examples.71bc60380fa6cceb7caad48bd09e35b6028caabd363aa04fee89c414e0870e86.tw.jpg differ diff --git a/translated_images/convolutionExample.634615d5ff7081e0b73416b9e398f9eade32856616386fdc0cf412ce898cc192.hk.png b/translated_images/convolutionExample.634615d5ff7081e0b73416b9e398f9eade32856616386fdc0cf412ce898cc192.hk.png new file mode 100644 index 00000000..3d76bfb9 Binary files /dev/null and b/translated_images/convolutionExample.634615d5ff7081e0b73416b9e398f9eade32856616386fdc0cf412ce898cc192.hk.png differ diff --git a/translated_images/convolutionExample.634615d5ff7081e0b73416b9e398f9eade32856616386fdc0cf412ce898cc192.tw.png b/translated_images/convolutionExample.634615d5ff7081e0b73416b9e398f9eade32856616386fdc0cf412ce898cc192.tw.png new file mode 100644 index 00000000..3d76bfb9 Binary files /dev/null and b/translated_images/convolutionExample.634615d5ff7081e0b73416b9e398f9eade32856616386fdc0cf412ce898cc192.tw.png differ diff --git a/translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.hk.png b/translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.hk.png new file mode 100644 index 00000000..80346439 Binary files /dev/null and b/translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.hk.png differ diff --git a/translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.tw.png b/translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.tw.png new file mode 100644 index 00000000..80346439 Binary files /dev/null and b/translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.tw.png differ diff --git a/translated_images/dcgan_generator.b500988ec2bc8ba5cb38dae855fece348933171227c0536743b9c3b599f33f3d.hk.png b/translated_images/dcgan_generator.b500988ec2bc8ba5cb38dae855fece348933171227c0536743b9c3b599f33f3d.hk.png new file mode 100644 index 00000000..d0782a30 Binary files /dev/null and b/translated_images/dcgan_generator.b500988ec2bc8ba5cb38dae855fece348933171227c0536743b9c3b599f33f3d.hk.png differ diff --git a/translated_images/dcgan_generator.b500988ec2bc8ba5cb38dae855fece348933171227c0536743b9c3b599f33f3d.tw.png b/translated_images/dcgan_generator.b500988ec2bc8ba5cb38dae855fece348933171227c0536743b9c3b599f33f3d.tw.png new file mode 100644 index 00000000..d0782a30 Binary files /dev/null and b/translated_images/dcgan_generator.b500988ec2bc8ba5cb38dae855fece348933171227c0536743b9c3b599f33f3d.tw.png differ diff --git a/translated_images/dog-from-unsplash.426f9fbca2febc93f70499f8330874380bd6f2184b4fb986bac7220826d11a00.hk.jpg b/translated_images/dog-from-unsplash.426f9fbca2febc93f70499f8330874380bd6f2184b4fb986bac7220826d11a00.hk.jpg new file mode 100644 index 00000000..1ec22269 Binary files /dev/null and b/translated_images/dog-from-unsplash.426f9fbca2febc93f70499f8330874380bd6f2184b4fb986bac7220826d11a00.hk.jpg differ diff --git a/translated_images/dog-from-unsplash.426f9fbca2febc93f70499f8330874380bd6f2184b4fb986bac7220826d11a00.tw.jpg b/translated_images/dog-from-unsplash.426f9fbca2febc93f70499f8330874380bd6f2184b4fb986bac7220826d11a00.tw.jpg new file mode 100644 index 00000000..1ec22269 Binary files /dev/null and b/translated_images/dog-from-unsplash.426f9fbca2febc93f70499f8330874380bd6f2184b4fb986bac7220826d11a00.tw.jpg differ diff --git a/translated_images/dsh_age.d212a30d4e54fb5f68b94a624aad64bc086124bcbbec9561ae5bd5da661e22d8.hk.png b/translated_images/dsh_age.d212a30d4e54fb5f68b94a624aad64bc086124bcbbec9561ae5bd5da661e22d8.hk.png new file mode 100644 index 00000000..2355616a Binary files /dev/null and b/translated_images/dsh_age.d212a30d4e54fb5f68b94a624aad64bc086124bcbbec9561ae5bd5da661e22d8.hk.png differ diff --git a/translated_images/dsh_age.d212a30d4e54fb5f68b94a624aad64bc086124bcbbec9561ae5bd5da661e22d8.tw.png b/translated_images/dsh_age.d212a30d4e54fb5f68b94a624aad64bc086124bcbbec9561ae5bd5da661e22d8.tw.png new file mode 100644 index 00000000..2355616a Binary files /dev/null and b/translated_images/dsh_age.d212a30d4e54fb5f68b94a624aad64bc086124bcbbec9561ae5bd5da661e22d8.tw.png differ diff --git a/translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.hk.png b/translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.hk.png new file mode 100644 index 00000000..f8d2aa2b Binary files /dev/null and b/translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.hk.png differ diff --git a/translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.tw.png b/translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.tw.png new file mode 100644 index 00000000..8581fc5a Binary files /dev/null and b/translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.tw.png differ diff --git a/translated_images/encoder-decoder-attention.7a726296894fb567aa2898c94b17b3289087f6705c11907df8301df9e5eeb3de.hk.png b/translated_images/encoder-decoder-attention.7a726296894fb567aa2898c94b17b3289087f6705c11907df8301df9e5eeb3de.hk.png new file mode 100644 index 00000000..ec7f143c Binary files /dev/null and b/translated_images/encoder-decoder-attention.7a726296894fb567aa2898c94b17b3289087f6705c11907df8301df9e5eeb3de.hk.png differ diff --git a/translated_images/encoder-decoder-attention.7a726296894fb567aa2898c94b17b3289087f6705c11907df8301df9e5eeb3de.tw.png b/translated_images/encoder-decoder-attention.7a726296894fb567aa2898c94b17b3289087f6705c11907df8301df9e5eeb3de.tw.png new file mode 100644 index 00000000..5a912607 Binary files /dev/null and b/translated_images/encoder-decoder-attention.7a726296894fb567aa2898c94b17b3289087f6705c11907df8301df9e5eeb3de.tw.png differ diff --git a/translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.hk.png b/translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.hk.png new file mode 100644 index 00000000..6aff3955 Binary files /dev/null and b/translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.hk.png differ diff --git a/translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.tw.png b/translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.tw.png new file mode 100644 index 00000000..26e16d89 Binary files /dev/null and b/translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.tw.png differ diff --git a/translated_images/f-rcnn.3cda6d9bb41888754037d2d9763e2298a96de5d9bc2a21db3147357aa5da9b1a.hk.png b/translated_images/f-rcnn.3cda6d9bb41888754037d2d9763e2298a96de5d9bc2a21db3147357aa5da9b1a.hk.png new file mode 100644 index 00000000..585a1798 Binary files /dev/null and b/translated_images/f-rcnn.3cda6d9bb41888754037d2d9763e2298a96de5d9bc2a21db3147357aa5da9b1a.hk.png differ diff --git a/translated_images/f-rcnn.3cda6d9bb41888754037d2d9763e2298a96de5d9bc2a21db3147357aa5da9b1a.tw.png b/translated_images/f-rcnn.3cda6d9bb41888754037d2d9763e2298a96de5d9bc2a21db3147357aa5da9b1a.tw.png new file mode 100644 index 00000000..c27839f7 Binary files /dev/null and b/translated_images/f-rcnn.3cda6d9bb41888754037d2d9763e2298a96de5d9bc2a21db3147357aa5da9b1a.tw.png differ diff --git a/translated_images/faster-rcnn.8d46c099b87ef30ab2ea26dbc4bdd85b974a57ba8eb526f65dc4cd0a4711de30.hk.png b/translated_images/faster-rcnn.8d46c099b87ef30ab2ea26dbc4bdd85b974a57ba8eb526f65dc4cd0a4711de30.hk.png new file mode 100644 index 00000000..31b01f12 Binary files /dev/null and b/translated_images/faster-rcnn.8d46c099b87ef30ab2ea26dbc4bdd85b974a57ba8eb526f65dc4cd0a4711de30.hk.png differ diff --git a/translated_images/faster-rcnn.8d46c099b87ef30ab2ea26dbc4bdd85b974a57ba8eb526f65dc4cd0a4711de30.tw.png b/translated_images/faster-rcnn.8d46c099b87ef30ab2ea26dbc4bdd85b974a57ba8eb526f65dc4cd0a4711de30.tw.png new file mode 100644 index 00000000..66d3bdea Binary files /dev/null and b/translated_images/faster-rcnn.8d46c099b87ef30ab2ea26dbc4bdd85b974a57ba8eb526f65dc4cd0a4711de30.tw.png differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.hk.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.hk.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.hk.png differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.tw.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.tw.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.tw.png differ diff --git a/translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.hk.png b/translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.hk.png new file mode 100644 index 00000000..77b093b6 Binary files /dev/null and b/translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.hk.png differ diff --git a/translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.tw.png b/translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.tw.png new file mode 100644 index 00000000..fb790990 Binary files /dev/null and b/translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.tw.png differ diff --git a/translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.hk.png b/translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.hk.png new file mode 100644 index 00000000..401f6b69 Binary files /dev/null and b/translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.hk.png differ diff --git a/translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.tw.png b/translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.tw.png new file mode 100644 index 00000000..b17c5868 Binary files /dev/null and b/translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.tw.png differ diff --git a/translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.hk.png b/translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.hk.png new file mode 100644 index 00000000..36bbe13e Binary files /dev/null and b/translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.hk.png differ diff --git a/translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.tw.png b/translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.tw.png new file mode 100644 index 00000000..83205a8b Binary files /dev/null and b/translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.tw.png differ diff --git a/translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.hk.png b/translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.hk.png new file mode 100644 index 00000000..8b869946 Binary files /dev/null and b/translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.hk.png differ diff --git a/translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.tw.png b/translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.tw.png new file mode 100644 index 00000000..8b869946 Binary files /dev/null and b/translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.tw.png differ diff --git a/translated_images/gan_arch_detail.46b95fd366f8e543170264fe07e516683ac3e5bb699392c35449e99590a11063.hk.png b/translated_images/gan_arch_detail.46b95fd366f8e543170264fe07e516683ac3e5bb699392c35449e99590a11063.hk.png new file mode 100644 index 00000000..252074a9 Binary files /dev/null and b/translated_images/gan_arch_detail.46b95fd366f8e543170264fe07e516683ac3e5bb699392c35449e99590a11063.hk.png differ diff --git a/translated_images/gan_arch_detail.46b95fd366f8e543170264fe07e516683ac3e5bb699392c35449e99590a11063.tw.png b/translated_images/gan_arch_detail.46b95fd366f8e543170264fe07e516683ac3e5bb699392c35449e99590a11063.tw.png new file mode 100644 index 00000000..252074a9 Binary files /dev/null and b/translated_images/gan_arch_detail.46b95fd366f8e543170264fe07e516683ac3e5bb699392c35449e99590a11063.tw.png differ diff --git a/translated_images/gan_architecture.8f3a5ab62b8d5d698a91f7668017d8e09b81c5d8e7cc99bdb23979d90a0c475e.hk.png b/translated_images/gan_architecture.8f3a5ab62b8d5d698a91f7668017d8e09b81c5d8e7cc99bdb23979d90a0c475e.hk.png new file mode 100644 index 00000000..e6a9e87d Binary files /dev/null and b/translated_images/gan_architecture.8f3a5ab62b8d5d698a91f7668017d8e09b81c5d8e7cc99bdb23979d90a0c475e.hk.png differ diff --git a/translated_images/gan_architecture.8f3a5ab62b8d5d698a91f7668017d8e09b81c5d8e7cc99bdb23979d90a0c475e.tw.png b/translated_images/gan_architecture.8f3a5ab62b8d5d698a91f7668017d8e09b81c5d8e7cc99bdb23979d90a0c475e.tw.png new file mode 100644 index 00000000..e6a9e87d Binary files /dev/null and b/translated_images/gan_architecture.8f3a5ab62b8d5d698a91f7668017d8e09b81c5d8e7cc99bdb23979d90a0c475e.tw.png differ diff --git a/translated_images/history-of-ai.7e83efa70b537f5a0264357672b0884cf3a220fbafe35c65d70b2c3805f7bf5e.hk.png b/translated_images/history-of-ai.7e83efa70b537f5a0264357672b0884cf3a220fbafe35c65d70b2c3805f7bf5e.hk.png new file mode 100644 index 00000000..f7f6a11a Binary files /dev/null and b/translated_images/history-of-ai.7e83efa70b537f5a0264357672b0884cf3a220fbafe35c65d70b2c3805f7bf5e.hk.png differ diff --git a/translated_images/history-of-ai.7e83efa70b537f5a0264357672b0884cf3a220fbafe35c65d70b2c3805f7bf5e.tw.png b/translated_images/history-of-ai.7e83efa70b537f5a0264357672b0884cf3a220fbafe35c65d70b2c3805f7bf5e.tw.png new file mode 100644 index 00000000..cb3d9411 Binary files /dev/null and b/translated_images/history-of-ai.7e83efa70b537f5a0264357672b0884cf3a220fbafe35c65d70b2c3805f7bf5e.tw.png differ diff --git a/translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.hk.png b/translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.hk.png new file mode 100644 index 00000000..80bdbea8 Binary files /dev/null and b/translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.hk.png differ diff --git a/translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.tw.png b/translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.tw.png new file mode 100644 index 00000000..80bdbea8 Binary files /dev/null and b/translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.tw.png differ diff --git a/translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.hk.png b/translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.hk.png new file mode 100644 index 00000000..54e79786 Binary files /dev/null and b/translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.hk.png differ diff --git a/translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.tw.png b/translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.tw.png new file mode 100644 index 00000000..54e79786 Binary files /dev/null and b/translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.tw.png differ diff --git a/translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.hk.png b/translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.hk.png new file mode 100644 index 00000000..0422909f Binary files /dev/null and b/translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.hk.png differ diff --git a/translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.tw.png b/translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.tw.png new file mode 100644 index 00000000..0422909f Binary files /dev/null and b/translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.tw.png differ diff --git a/translated_images/image.896e8254a2c60d451dbc648a499c3ed5d4b596bea265a3ca7ea581b5bc50d32f.hk.jpg b/translated_images/image.896e8254a2c60d451dbc648a499c3ed5d4b596bea265a3ca7ea581b5bc50d32f.hk.jpg new file mode 100644 index 00000000..599c8388 Binary files /dev/null and b/translated_images/image.896e8254a2c60d451dbc648a499c3ed5d4b596bea265a3ca7ea581b5bc50d32f.hk.jpg differ diff --git a/translated_images/image.896e8254a2c60d451dbc648a499c3ed5d4b596bea265a3ca7ea581b5bc50d32f.tw.jpg b/translated_images/image.896e8254a2c60d451dbc648a499c3ed5d4b596bea265a3ca7ea581b5bc50d32f.tw.jpg new file mode 100644 index 00000000..599c8388 Binary files /dev/null and b/translated_images/image.896e8254a2c60d451dbc648a499c3ed5d4b596bea265a3ca7ea581b5bc50d32f.tw.jpg differ diff --git a/translated_images/inception.a6605b85bcbc6f52490ec55e68109dd41924cba9d7e1007453b4cdf554199c8d.hk.png b/translated_images/inception.a6605b85bcbc6f52490ec55e68109dd41924cba9d7e1007453b4cdf554199c8d.hk.png new file mode 100644 index 00000000..3580a73a Binary files /dev/null and b/translated_images/inception.a6605b85bcbc6f52490ec55e68109dd41924cba9d7e1007453b4cdf554199c8d.hk.png differ diff --git a/translated_images/inception.a6605b85bcbc6f52490ec55e68109dd41924cba9d7e1007453b4cdf554199c8d.tw.png b/translated_images/inception.a6605b85bcbc6f52490ec55e68109dd41924cba9d7e1007453b4cdf554199c8d.tw.png new file mode 100644 index 00000000..3580a73a Binary files /dev/null and b/translated_images/inception.a6605b85bcbc6f52490ec55e68109dd41924cba9d7e1007453b4cdf554199c8d.tw.png differ diff --git a/translated_images/instance_vs_semantic.eee9812bebf8cd450cdef4caaed2d4dd9c6c3b671e0c65d8aef312758ebb7b89.hk.jpeg b/translated_images/instance_vs_semantic.eee9812bebf8cd450cdef4caaed2d4dd9c6c3b671e0c65d8aef312758ebb7b89.hk.jpeg new file mode 100644 index 00000000..7d5fb1fb Binary files /dev/null and b/translated_images/instance_vs_semantic.eee9812bebf8cd450cdef4caaed2d4dd9c6c3b671e0c65d8aef312758ebb7b89.hk.jpeg differ diff --git a/translated_images/instance_vs_semantic.eee9812bebf8cd450cdef4caaed2d4dd9c6c3b671e0c65d8aef312758ebb7b89.tw.jpeg b/translated_images/instance_vs_semantic.eee9812bebf8cd450cdef4caaed2d4dd9c6c3b671e0c65d8aef312758ebb7b89.tw.jpeg new file mode 100644 index 00000000..629b9783 Binary files /dev/null and b/translated_images/instance_vs_semantic.eee9812bebf8cd450cdef4caaed2d4dd9c6c3b671e0c65d8aef312758ebb7b89.tw.jpeg differ diff --git a/translated_images/iou_equation.9a4751d40fff4e119ecd0a7bcca4e71ab1dc83e0d4f2a0d66ff0859736f593cf.hk.png b/translated_images/iou_equation.9a4751d40fff4e119ecd0a7bcca4e71ab1dc83e0d4f2a0d66ff0859736f593cf.hk.png new file mode 100644 index 00000000..b4c10c22 Binary files /dev/null and b/translated_images/iou_equation.9a4751d40fff4e119ecd0a7bcca4e71ab1dc83e0d4f2a0d66ff0859736f593cf.hk.png differ diff --git a/translated_images/iou_equation.9a4751d40fff4e119ecd0a7bcca4e71ab1dc83e0d4f2a0d66ff0859736f593cf.tw.png b/translated_images/iou_equation.9a4751d40fff4e119ecd0a7bcca4e71ab1dc83e0d4f2a0d66ff0859736f593cf.tw.png new file mode 100644 index 00000000..e2b2bdaa Binary files /dev/null and b/translated_images/iou_equation.9a4751d40fff4e119ecd0a7bcca4e71ab1dc83e0d4f2a0d66ff0859736f593cf.tw.png differ diff --git a/translated_images/jalammarBERT-language-modeling-masked-lm.34f113ea5fec4362e39ee4381aab7cad06b5465a0b5f053a0f2aa05fbe14e746.hk.png b/translated_images/jalammarBERT-language-modeling-masked-lm.34f113ea5fec4362e39ee4381aab7cad06b5465a0b5f053a0f2aa05fbe14e746.hk.png new file mode 100644 index 00000000..46046940 Binary files /dev/null and b/translated_images/jalammarBERT-language-modeling-masked-lm.34f113ea5fec4362e39ee4381aab7cad06b5465a0b5f053a0f2aa05fbe14e746.hk.png differ diff --git a/translated_images/jalammarBERT-language-modeling-masked-lm.34f113ea5fec4362e39ee4381aab7cad06b5465a0b5f053a0f2aa05fbe14e746.tw.png b/translated_images/jalammarBERT-language-modeling-masked-lm.34f113ea5fec4362e39ee4381aab7cad06b5465a0b5f053a0f2aa05fbe14e746.tw.png new file mode 100644 index 00000000..03d39e71 Binary files /dev/null and b/translated_images/jalammarBERT-language-modeling-masked-lm.34f113ea5fec4362e39ee4381aab7cad06b5465a0b5f053a0f2aa05fbe14e746.tw.png differ diff --git a/translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.hk.png b/translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.hk.png new file mode 100644 index 00000000..89c2b504 Binary files /dev/null and b/translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.hk.png differ diff --git a/translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.tw.png b/translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.tw.png new file mode 100644 index 00000000..c19931fb Binary files /dev/null and b/translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.tw.png differ diff --git a/translated_images/lmfilters.ea9e4868a82cf74cdca05121b1128f0122297cf2879501cd06956beb88ff96a2.hk.jpg b/translated_images/lmfilters.ea9e4868a82cf74cdca05121b1128f0122297cf2879501cd06956beb88ff96a2.hk.jpg new file mode 100644 index 00000000..4edba1d7 Binary files /dev/null and b/translated_images/lmfilters.ea9e4868a82cf74cdca05121b1128f0122297cf2879501cd06956beb88ff96a2.hk.jpg differ diff --git a/translated_images/lmfilters.ea9e4868a82cf74cdca05121b1128f0122297cf2879501cd06956beb88ff96a2.tw.jpg b/translated_images/lmfilters.ea9e4868a82cf74cdca05121b1128f0122297cf2879501cd06956beb88ff96a2.tw.jpg new file mode 100644 index 00000000..4edba1d7 Binary files /dev/null and b/translated_images/lmfilters.ea9e4868a82cf74cdca05121b1128f0122297cf2879501cd06956beb88ff96a2.tw.jpg differ diff --git a/translated_images/ml-for-beginners.9e4fed176fd5817d7d1f7d358302515186579cbf09b2a6c5bd8092b345da7f22.hk.png b/translated_images/ml-for-beginners.9e4fed176fd5817d7d1f7d358302515186579cbf09b2a6c5bd8092b345da7f22.hk.png new file mode 100644 index 00000000..53d89cd4 Binary files /dev/null and b/translated_images/ml-for-beginners.9e4fed176fd5817d7d1f7d358302515186579cbf09b2a6c5bd8092b345da7f22.hk.png differ diff --git a/translated_images/ml-for-beginners.9e4fed176fd5817d7d1f7d358302515186579cbf09b2a6c5bd8092b345da7f22.tw.png b/translated_images/ml-for-beginners.9e4fed176fd5817d7d1f7d358302515186579cbf09b2a6c5bd8092b345da7f22.tw.png new file mode 100644 index 00000000..53d89cd4 Binary files /dev/null and b/translated_images/ml-for-beginners.9e4fed176fd5817d7d1f7d358302515186579cbf09b2a6c5bd8092b345da7f22.tw.png differ diff --git a/translated_images/mountaincar.f7b7a7f6d4f9933b31a5fb3453b9c026aa0d65f6644bb03513a955590aae1bc4.hk.png b/translated_images/mountaincar.f7b7a7f6d4f9933b31a5fb3453b9c026aa0d65f6644bb03513a955590aae1bc4.hk.png new file mode 100644 index 00000000..7e859b3d Binary files /dev/null and b/translated_images/mountaincar.f7b7a7f6d4f9933b31a5fb3453b9c026aa0d65f6644bb03513a955590aae1bc4.hk.png differ diff --git a/translated_images/mountaincar.f7b7a7f6d4f9933b31a5fb3453b9c026aa0d65f6644bb03513a955590aae1bc4.tw.png b/translated_images/mountaincar.f7b7a7f6d4f9933b31a5fb3453b9c026aa0d65f6644bb03513a955590aae1bc4.tw.png new file mode 100644 index 00000000..182e8a62 Binary files /dev/null and b/translated_images/mountaincar.f7b7a7f6d4f9933b31a5fb3453b9c026aa0d65f6644bb03513a955590aae1bc4.tw.png differ diff --git a/translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.hk.jpg b/translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.hk.jpg new file mode 100644 index 00000000..45edf4a9 Binary files /dev/null and b/translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.hk.jpg differ diff --git a/translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.tw.jpg b/translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.tw.jpg new file mode 100644 index 00000000..45edf4a9 Binary files /dev/null and b/translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.tw.jpg differ diff --git a/translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.hk.png b/translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.hk.png new file mode 100644 index 00000000..cbdfee1c Binary files /dev/null and b/translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.hk.png differ diff --git a/translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.tw.png b/translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.tw.png new file mode 100644 index 00000000..97a4d69c Binary files /dev/null and b/translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.tw.png differ diff --git a/translated_images/navi.2f20b727910110ea593fa03a2491f2ba1b25c62c97b33c692bcf01917a1f333f.hk.png b/translated_images/navi.2f20b727910110ea593fa03a2491f2ba1b25c62c97b33c692bcf01917a1f333f.hk.png new file mode 100644 index 00000000..9fe23e7e Binary files /dev/null and b/translated_images/navi.2f20b727910110ea593fa03a2491f2ba1b25c62c97b33c692bcf01917a1f333f.hk.png differ diff --git a/translated_images/navi.2f20b727910110ea593fa03a2491f2ba1b25c62c97b33c692bcf01917a1f333f.tw.png b/translated_images/navi.2f20b727910110ea593fa03a2491f2ba1b25c62c97b33c692bcf01917a1f333f.tw.png new file mode 100644 index 00000000..9fe23e7e Binary files /dev/null and b/translated_images/navi.2f20b727910110ea593fa03a2491f2ba1b25c62c97b33c692bcf01917a1f333f.tw.png differ diff --git a/translated_images/netout.1eb15eb76fd767313e067719f400cec4b0e5090239c3e997c29f6789d4c3c263.hk.png b/translated_images/netout.1eb15eb76fd767313e067719f400cec4b0e5090239c3e997c29f6789d4c3c263.hk.png new file mode 100644 index 00000000..9d914b4b Binary files /dev/null and b/translated_images/netout.1eb15eb76fd767313e067719f400cec4b0e5090239c3e997c29f6789d4c3c263.hk.png differ diff --git a/translated_images/netout.1eb15eb76fd767313e067719f400cec4b0e5090239c3e997c29f6789d4c3c263.tw.png b/translated_images/netout.1eb15eb76fd767313e067719f400cec4b0e5090239c3e997c29f6789d4c3c263.tw.png new file mode 100644 index 00000000..965d5ad0 Binary files /dev/null and b/translated_images/netout.1eb15eb76fd767313e067719f400cec4b0e5090239c3e997c29f6789d4c3c263.tw.png differ diff --git a/translated_images/offset-sequence-representation.eb73fcefb29b46eecfbe74466077cfeb7c0f93a4f254850538a2efbc63517479.hk.png b/translated_images/offset-sequence-representation.eb73fcefb29b46eecfbe74466077cfeb7c0f93a4f254850538a2efbc63517479.hk.png new file mode 100644 index 00000000..557b6637 Binary files /dev/null and b/translated_images/offset-sequence-representation.eb73fcefb29b46eecfbe74466077cfeb7c0f93a4f254850538a2efbc63517479.hk.png differ diff --git a/translated_images/offset-sequence-representation.eb73fcefb29b46eecfbe74466077cfeb7c0f93a4f254850538a2efbc63517479.tw.png b/translated_images/offset-sequence-representation.eb73fcefb29b46eecfbe74466077cfeb7c0f93a4f254850538a2efbc63517479.tw.png new file mode 100644 index 00000000..557b6637 Binary files /dev/null and b/translated_images/offset-sequence-representation.eb73fcefb29b46eecfbe74466077cfeb7c0f93a4f254850538a2efbc63517479.tw.png differ diff --git a/translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.hk.png b/translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.hk.png new file mode 100644 index 00000000..f6d867c3 Binary files /dev/null and b/translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.hk.png differ diff --git a/translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.tw.png b/translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.tw.png new file mode 100644 index 00000000..f6d867c3 Binary files /dev/null and b/translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.tw.png differ diff --git a/translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.hk.png b/translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.hk.png new file mode 100644 index 00000000..da672bbd Binary files /dev/null and b/translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.hk.png differ diff --git a/translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.tw.png b/translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.tw.png new file mode 100644 index 00000000..da672bbd Binary files /dev/null and b/translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.tw.png differ diff --git a/translated_images/overfit.a0bd57f717c157696f30c9c73fa7c3345c49b4280e412ff30c4a1a16ba29ff49.hk.png b/translated_images/overfit.a0bd57f717c157696f30c9c73fa7c3345c49b4280e412ff30c4a1a16ba29ff49.hk.png new file mode 100644 index 00000000..6a7fe0bc Binary files /dev/null and b/translated_images/overfit.a0bd57f717c157696f30c9c73fa7c3345c49b4280e412ff30c4a1a16ba29ff49.hk.png differ diff --git a/translated_images/overfit.a0bd57f717c157696f30c9c73fa7c3345c49b4280e412ff30c4a1a16ba29ff49.tw.png b/translated_images/overfit.a0bd57f717c157696f30c9c73fa7c3345c49b4280e412ff30c4a1a16ba29ff49.tw.png new file mode 100644 index 00000000..6a7fe0bc Binary files /dev/null and b/translated_images/overfit.a0bd57f717c157696f30c9c73fa7c3345c49b4280e412ff30c4a1a16ba29ff49.tw.png differ diff --git a/translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.hk.jpg b/translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.hk.jpg new file mode 100644 index 00000000..19d74964 Binary files /dev/null and b/translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.hk.jpg differ diff --git a/translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.tw.jpg b/translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.tw.jpg new file mode 100644 index 00000000..19d74964 Binary files /dev/null and b/translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.tw.jpg differ diff --git a/translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.hk.jpg b/translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.hk.jpg new file mode 100644 index 00000000..9e5f2f9b Binary files /dev/null and b/translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.hk.jpg differ diff --git a/translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.tw.jpg b/translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.tw.jpg new file mode 100644 index 00000000..40cb24b3 Binary files /dev/null and b/translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.tw.jpg differ diff --git a/translated_images/palm-movement.341495f0e9c47da39cc1f99626822a1d20203aa33ff89a86a068f14bea133e84.hk.png b/translated_images/palm-movement.341495f0e9c47da39cc1f99626822a1d20203aa33ff89a86a068f14bea133e84.hk.png new file mode 100644 index 00000000..bb70c019 Binary files /dev/null and b/translated_images/palm-movement.341495f0e9c47da39cc1f99626822a1d20203aa33ff89a86a068f14bea133e84.hk.png differ diff --git a/translated_images/palm-movement.341495f0e9c47da39cc1f99626822a1d20203aa33ff89a86a068f14bea133e84.tw.png b/translated_images/palm-movement.341495f0e9c47da39cc1f99626822a1d20203aa33ff89a86a068f14bea133e84.tw.png new file mode 100644 index 00000000..bb70c019 Binary files /dev/null and b/translated_images/palm-movement.341495f0e9c47da39cc1f99626822a1d20203aa33ff89a86a068f14bea133e84.tw.png differ diff --git a/translated_images/photo-cat.8c8e8fb760ffe45725c5b9f6b0d954e9bf114475c01c55adf0303982851b7eae.hk.jpg b/translated_images/photo-cat.8c8e8fb760ffe45725c5b9f6b0d954e9bf114475c01c55adf0303982851b7eae.hk.jpg new file mode 100644 index 00000000..776f24aa Binary files /dev/null and b/translated_images/photo-cat.8c8e8fb760ffe45725c5b9f6b0d954e9bf114475c01c55adf0303982851b7eae.hk.jpg differ diff --git a/translated_images/photo-cat.8c8e8fb760ffe45725c5b9f6b0d954e9bf114475c01c55adf0303982851b7eae.tw.jpg b/translated_images/photo-cat.8c8e8fb760ffe45725c5b9f6b0d954e9bf114475c01c55adf0303982851b7eae.tw.jpg new file mode 100644 index 00000000..776f24aa Binary files /dev/null and b/translated_images/photo-cat.8c8e8fb760ffe45725c5b9f6b0d954e9bf114475c01c55adf0303982851b7eae.tw.jpg differ diff --git a/translated_images/pos-embedding.e41ce9b6cf6078afd28da02f27e33ac7026ed4c156491df7ad9aa96be7c194bb.hk.png b/translated_images/pos-embedding.e41ce9b6cf6078afd28da02f27e33ac7026ed4c156491df7ad9aa96be7c194bb.hk.png new file mode 100644 index 00000000..8de57d1e Binary files /dev/null and b/translated_images/pos-embedding.e41ce9b6cf6078afd28da02f27e33ac7026ed4c156491df7ad9aa96be7c194bb.hk.png differ diff --git a/translated_images/pos-embedding.e41ce9b6cf6078afd28da02f27e33ac7026ed4c156491df7ad9aa96be7c194bb.tw.png b/translated_images/pos-embedding.e41ce9b6cf6078afd28da02f27e33ac7026ed4c156491df7ad9aa96be7c194bb.tw.png new file mode 100644 index 00000000..8871f703 Binary files /dev/null and b/translated_images/pos-embedding.e41ce9b6cf6078afd28da02f27e33ac7026ed4c156491df7ad9aa96be7c194bb.tw.png differ diff --git a/translated_images/protege.274177ceeac13b38094bc425073776bb0d2525620ad6261b9d9760ebd2a8e322.hk.png b/translated_images/protege.274177ceeac13b38094bc425073776bb0d2525620ad6261b9d9760ebd2a8e322.hk.png new file mode 100644 index 00000000..31dea891 Binary files /dev/null and b/translated_images/protege.274177ceeac13b38094bc425073776bb0d2525620ad6261b9d9760ebd2a8e322.hk.png differ diff --git a/translated_images/protege.274177ceeac13b38094bc425073776bb0d2525620ad6261b9d9760ebd2a8e322.tw.png b/translated_images/protege.274177ceeac13b38094bc425073776bb0d2525620ad6261b9d9760ebd2a8e322.tw.png new file mode 100644 index 00000000..5c41d9af Binary files /dev/null and b/translated_images/protege.274177ceeac13b38094bc425073776bb0d2525620ad6261b9d9760ebd2a8e322.tw.png differ diff --git a/translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.hk.png b/translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.hk.png new file mode 100644 index 00000000..45f0ea82 Binary files /dev/null and b/translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.hk.png differ diff --git a/translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.tw.png b/translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.tw.png new file mode 100644 index 00000000..99e908d6 Binary files /dev/null and b/translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.tw.png differ diff --git a/translated_images/rcnn1.cae407020dfb1d1fb572656e44f75cd6c512cc220591c116c506652c10e47f26.hk.png b/translated_images/rcnn1.cae407020dfb1d1fb572656e44f75cd6c512cc220591c116c506652c10e47f26.hk.png new file mode 100644 index 00000000..50f70d5b Binary files /dev/null and b/translated_images/rcnn1.cae407020dfb1d1fb572656e44f75cd6c512cc220591c116c506652c10e47f26.hk.png differ diff --git a/translated_images/rcnn1.cae407020dfb1d1fb572656e44f75cd6c512cc220591c116c506652c10e47f26.tw.png b/translated_images/rcnn1.cae407020dfb1d1fb572656e44f75cd6c512cc220591c116c506652c10e47f26.tw.png new file mode 100644 index 00000000..50f70d5b Binary files /dev/null and b/translated_images/rcnn1.cae407020dfb1d1fb572656e44f75cd6c512cc220591c116c506652c10e47f26.tw.png differ diff --git a/translated_images/rcnn2.2d9530bb83516484ec65b250c22dbf37d3d23244f32864ebcb91d98fe7c3112c.hk.png b/translated_images/rcnn2.2d9530bb83516484ec65b250c22dbf37d3d23244f32864ebcb91d98fe7c3112c.hk.png new file mode 100644 index 00000000..ddded4a7 Binary files /dev/null and b/translated_images/rcnn2.2d9530bb83516484ec65b250c22dbf37d3d23244f32864ebcb91d98fe7c3112c.hk.png differ diff --git a/translated_images/rcnn2.2d9530bb83516484ec65b250c22dbf37d3d23244f32864ebcb91d98fe7c3112c.tw.png b/translated_images/rcnn2.2d9530bb83516484ec65b250c22dbf37d3d23244f32864ebcb91d98fe7c3112c.tw.png new file mode 100644 index 00000000..abcad97c Binary files /dev/null and b/translated_images/rcnn2.2d9530bb83516484ec65b250c22dbf37d3d23244f32864ebcb91d98fe7c3112c.tw.png differ diff --git a/translated_images/resnet-block.aba4ccbcc094443477d7bee189d44fed695c852d710a702462d6b809155d959a.hk.png b/translated_images/resnet-block.aba4ccbcc094443477d7bee189d44fed695c852d710a702462d6b809155d959a.hk.png new file mode 100644 index 00000000..c8131269 Binary files /dev/null and b/translated_images/resnet-block.aba4ccbcc094443477d7bee189d44fed695c852d710a702462d6b809155d959a.hk.png differ diff --git a/translated_images/resnet-block.aba4ccbcc094443477d7bee189d44fed695c852d710a702462d6b809155d959a.tw.png b/translated_images/resnet-block.aba4ccbcc094443477d7bee189d44fed695c852d710a702462d6b809155d959a.tw.png new file mode 100644 index 00000000..debcc67a Binary files /dev/null and b/translated_images/resnet-block.aba4ccbcc094443477d7bee189d44fed695c852d710a702462d6b809155d959a.tw.png differ diff --git a/translated_images/rnn-anatomy.79ee3f3920b3294bd52e9543ef36102dbca3cecf6d4d78d8c63bf0bbc95fdc90.hk.png b/translated_images/rnn-anatomy.79ee3f3920b3294bd52e9543ef36102dbca3cecf6d4d78d8c63bf0bbc95fdc90.hk.png new file mode 100644 index 00000000..ddfe91f3 Binary files /dev/null and b/translated_images/rnn-anatomy.79ee3f3920b3294bd52e9543ef36102dbca3cecf6d4d78d8c63bf0bbc95fdc90.hk.png differ diff --git a/translated_images/rnn-anatomy.79ee3f3920b3294bd52e9543ef36102dbca3cecf6d4d78d8c63bf0bbc95fdc90.tw.png b/translated_images/rnn-anatomy.79ee3f3920b3294bd52e9543ef36102dbca3cecf6d4d78d8c63bf0bbc95fdc90.tw.png new file mode 100644 index 00000000..ddfe91f3 Binary files /dev/null and b/translated_images/rnn-anatomy.79ee3f3920b3294bd52e9543ef36102dbca3cecf6d4d78d8c63bf0bbc95fdc90.tw.png differ diff --git a/translated_images/rnn-generate-inf.5168dc65e0370eeab36f83885ba6b5bf56265698de5ddbd8648dc3653e1f0b9b.hk.png b/translated_images/rnn-generate-inf.5168dc65e0370eeab36f83885ba6b5bf56265698de5ddbd8648dc3653e1f0b9b.hk.png new file mode 100644 index 00000000..0498e867 Binary files /dev/null and b/translated_images/rnn-generate-inf.5168dc65e0370eeab36f83885ba6b5bf56265698de5ddbd8648dc3653e1f0b9b.hk.png differ diff --git a/translated_images/rnn-generate-inf.5168dc65e0370eeab36f83885ba6b5bf56265698de5ddbd8648dc3653e1f0b9b.tw.png b/translated_images/rnn-generate-inf.5168dc65e0370eeab36f83885ba6b5bf56265698de5ddbd8648dc3653e1f0b9b.tw.png new file mode 100644 index 00000000..0498e867 Binary files /dev/null and b/translated_images/rnn-generate-inf.5168dc65e0370eeab36f83885ba6b5bf56265698de5ddbd8648dc3653e1f0b9b.tw.png differ diff --git a/translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.hk.png b/translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.hk.png new file mode 100644 index 00000000..4af0ad5d Binary files /dev/null and b/translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.hk.png differ diff --git a/translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.tw.png b/translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.tw.png new file mode 100644 index 00000000..85c4ae5d Binary files /dev/null and b/translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.tw.png differ diff --git a/translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.hk.png b/translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.hk.png new file mode 100644 index 00000000..52c6bf13 Binary files /dev/null and b/translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.hk.png differ diff --git a/translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.tw.png b/translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.tw.png new file mode 100644 index 00000000..39bc9c2b Binary files /dev/null and b/translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.tw.png differ diff --git a/translated_images/segm.92442f2cb42ff4fa650fee858a3a02f55cf46825d9602115130e9e95a52a8526.hk.png b/translated_images/segm.92442f2cb42ff4fa650fee858a3a02f55cf46825d9602115130e9e95a52a8526.hk.png new file mode 100644 index 00000000..6594f355 Binary files /dev/null and b/translated_images/segm.92442f2cb42ff4fa650fee858a3a02f55cf46825d9602115130e9e95a52a8526.hk.png differ diff --git a/translated_images/segm.92442f2cb42ff4fa650fee858a3a02f55cf46825d9602115130e9e95a52a8526.tw.png b/translated_images/segm.92442f2cb42ff4fa650fee858a3a02f55cf46825d9602115130e9e95a52a8526.tw.png new file mode 100644 index 00000000..3c01fe33 Binary files /dev/null and b/translated_images/segm.92442f2cb42ff4fa650fee858a3a02f55cf46825d9602115130e9e95a52a8526.tw.png differ diff --git a/translated_images/segnet.87377542aa5a8b76c6e19b715e86daec8da5c1124df41ab6064d8409b8579be6.hk.png b/translated_images/segnet.87377542aa5a8b76c6e19b715e86daec8da5c1124df41ab6064d8409b8579be6.hk.png new file mode 100644 index 00000000..98012ec4 Binary files /dev/null and b/translated_images/segnet.87377542aa5a8b76c6e19b715e86daec8da5c1124df41ab6064d8409b8579be6.hk.png differ diff --git a/translated_images/segnet.87377542aa5a8b76c6e19b715e86daec8da5c1124df41ab6064d8409b8579be6.tw.png b/translated_images/segnet.87377542aa5a8b76c6e19b715e86daec8da5c1124df41ab6064d8409b8579be6.tw.png new file mode 100644 index 00000000..4a4a4add Binary files /dev/null and b/translated_images/segnet.87377542aa5a8b76c6e19b715e86daec8da5c1124df41ab6064d8409b8579be6.tw.png differ diff --git a/translated_images/style.5293e85e077ab22cf0e8f920132b79bd9a6d6f957085ef20079ec5eee96405c3.hk.jpg b/translated_images/style.5293e85e077ab22cf0e8f920132b79bd9a6d6f957085ef20079ec5eee96405c3.hk.jpg new file mode 100644 index 00000000..24361692 Binary files /dev/null and b/translated_images/style.5293e85e077ab22cf0e8f920132b79bd9a6d6f957085ef20079ec5eee96405c3.hk.jpg differ diff --git a/translated_images/style.5293e85e077ab22cf0e8f920132b79bd9a6d6f957085ef20079ec5eee96405c3.tw.jpg b/translated_images/style.5293e85e077ab22cf0e8f920132b79bd9a6d6f957085ef20079ec5eee96405c3.tw.jpg new file mode 100644 index 00000000..24361692 Binary files /dev/null and b/translated_images/style.5293e85e077ab22cf0e8f920132b79bd9a6d6f957085ef20079ec5eee96405c3.tw.jpg differ diff --git a/translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.hk.jpg b/translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.hk.jpg new file mode 100644 index 00000000..30e2b6bf Binary files /dev/null and b/translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.hk.jpg differ diff --git a/translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.tw.jpg b/translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.tw.jpg new file mode 100644 index 00000000..30e2b6bf Binary files /dev/null and b/translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.tw.jpg differ diff --git a/translated_images/transformer-layer.905e14747ca4e7d5cf1409e8bf8944c9b1d6e4f5ce3ab167918af65c4904d727.hk.png b/translated_images/transformer-layer.905e14747ca4e7d5cf1409e8bf8944c9b1d6e4f5ce3ab167918af65c4904d727.hk.png new file mode 100644 index 00000000..114626e2 Binary files /dev/null and b/translated_images/transformer-layer.905e14747ca4e7d5cf1409e8bf8944c9b1d6e4f5ce3ab167918af65c4904d727.hk.png differ diff --git a/translated_images/transformer-layer.905e14747ca4e7d5cf1409e8bf8944c9b1d6e4f5ce3ab167918af65c4904d727.tw.png b/translated_images/transformer-layer.905e14747ca4e7d5cf1409e8bf8944c9b1d6e4f5ce3ab167918af65c4904d727.tw.png new file mode 100644 index 00000000..114626e2 Binary files /dev/null and b/translated_images/transformer-layer.905e14747ca4e7d5cf1409e8bf8944c9b1d6e4f5ce3ab167918af65c4904d727.tw.png differ diff --git a/translated_images/triplet-complex.32094972c7b4441b844bd85e683ba8eedc08af12177160f11584452698f29ace.hk.png b/translated_images/triplet-complex.32094972c7b4441b844bd85e683ba8eedc08af12177160f11584452698f29ace.hk.png new file mode 100644 index 00000000..d398c8b4 Binary files /dev/null and b/translated_images/triplet-complex.32094972c7b4441b844bd85e683ba8eedc08af12177160f11584452698f29ace.hk.png differ diff --git a/translated_images/triplet-complex.32094972c7b4441b844bd85e683ba8eedc08af12177160f11584452698f29ace.tw.png b/translated_images/triplet-complex.32094972c7b4441b844bd85e683ba8eedc08af12177160f11584452698f29ace.tw.png new file mode 100644 index 00000000..079190ea Binary files /dev/null and b/translated_images/triplet-complex.32094972c7b4441b844bd85e683ba8eedc08af12177160f11584452698f29ace.tw.png differ diff --git a/translated_images/triplet.4b9b332587593298b31846eb5cf341d8f7e48da76e6692dbb7cf0fcf2fd5ab38.hk.png b/translated_images/triplet.4b9b332587593298b31846eb5cf341d8f7e48da76e6692dbb7cf0fcf2fd5ab38.hk.png new file mode 100644 index 00000000..13d29f4d Binary files /dev/null and b/translated_images/triplet.4b9b332587593298b31846eb5cf341d8f7e48da76e6692dbb7cf0fcf2fd5ab38.hk.png differ diff --git a/translated_images/triplet.4b9b332587593298b31846eb5cf341d8f7e48da76e6692dbb7cf0fcf2fd5ab38.tw.png b/translated_images/triplet.4b9b332587593298b31846eb5cf341d8f7e48da76e6692dbb7cf0fcf2fd5ab38.tw.png new file mode 100644 index 00000000..13d29f4d Binary files /dev/null and b/translated_images/triplet.4b9b332587593298b31846eb5cf341d8f7e48da76e6692dbb7cf0fcf2fd5ab38.tw.png differ diff --git a/translated_images/turing-test-evol.4184696701293ead6de6e6441a659c62f0b119b342456987f531005f43be0b6d.hk.png b/translated_images/turing-test-evol.4184696701293ead6de6e6441a659c62f0b119b342456987f531005f43be0b6d.hk.png new file mode 100644 index 00000000..254a96cb Binary files /dev/null and b/translated_images/turing-test-evol.4184696701293ead6de6e6441a659c62f0b119b342456987f531005f43be0b6d.hk.png differ diff --git a/translated_images/turing-test-evol.4184696701293ead6de6e6441a659c62f0b119b342456987f531005f43be0b6d.tw.png b/translated_images/turing-test-evol.4184696701293ead6de6e6441a659c62f0b119b342456987f531005f43be0b6d.tw.png new file mode 100644 index 00000000..e288c254 Binary files /dev/null and b/translated_images/turing-test-evol.4184696701293ead6de6e6441a659c62f0b119b342456987f531005f43be0b6d.tw.png differ diff --git a/translated_images/unet.3adb555bf39d3657bf535321c7ee153dbdd32895189e915e014229a9c79cf1e3.hk.png b/translated_images/unet.3adb555bf39d3657bf535321c7ee153dbdd32895189e915e014229a9c79cf1e3.hk.png new file mode 100644 index 00000000..04377905 Binary files /dev/null and b/translated_images/unet.3adb555bf39d3657bf535321c7ee153dbdd32895189e915e014229a9c79cf1e3.hk.png differ diff --git a/translated_images/unet.3adb555bf39d3657bf535321c7ee153dbdd32895189e915e014229a9c79cf1e3.tw.png b/translated_images/unet.3adb555bf39d3657bf535321c7ee153dbdd32895189e915e014229a9c79cf1e3.tw.png new file mode 100644 index 00000000..04377905 Binary files /dev/null and b/translated_images/unet.3adb555bf39d3657bf535321c7ee153dbdd32895189e915e014229a9c79cf1e3.tw.png differ diff --git a/translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.hk.jpg b/translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.hk.jpg new file mode 100644 index 00000000..d111a9aa Binary files /dev/null and b/translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.hk.jpg differ diff --git a/translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.tw.jpg b/translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.tw.jpg new file mode 100644 index 00000000..d111a9aa Binary files /dev/null and b/translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.tw.jpg differ diff --git a/translated_images/vae.464c465a5b6a9e253be65a8cb3be1724832cbde57ece3912ddc962b199472a89.hk.png b/translated_images/vae.464c465a5b6a9e253be65a8cb3be1724832cbde57ece3912ddc962b199472a89.hk.png new file mode 100644 index 00000000..fd54bef0 Binary files /dev/null and b/translated_images/vae.464c465a5b6a9e253be65a8cb3be1724832cbde57ece3912ddc962b199472a89.hk.png differ diff --git a/translated_images/vae.464c465a5b6a9e253be65a8cb3be1724832cbde57ece3912ddc962b199472a89.tw.png b/translated_images/vae.464c465a5b6a9e253be65a8cb3be1724832cbde57ece3912ddc962b199472a89.tw.png new file mode 100644 index 00000000..fd54bef0 Binary files /dev/null and b/translated_images/vae.464c465a5b6a9e253be65a8cb3be1724832cbde57ece3912ddc962b199472a89.tw.png differ diff --git a/translated_images/vaemnist-diag.694315f775d5d666b02fb54f8fc7c64db65a9d126a16c2fdb8683cf9726f9ff5.hk.png b/translated_images/vaemnist-diag.694315f775d5d666b02fb54f8fc7c64db65a9d126a16c2fdb8683cf9726f9ff5.hk.png new file mode 100644 index 00000000..6d15b15b Binary files /dev/null and b/translated_images/vaemnist-diag.694315f775d5d666b02fb54f8fc7c64db65a9d126a16c2fdb8683cf9726f9ff5.hk.png differ diff --git a/translated_images/vaemnist-diag.694315f775d5d666b02fb54f8fc7c64db65a9d126a16c2fdb8683cf9726f9ff5.tw.png b/translated_images/vaemnist-diag.694315f775d5d666b02fb54f8fc7c64db65a9d126a16c2fdb8683cf9726f9ff5.tw.png new file mode 100644 index 00000000..6d15b15b Binary files /dev/null and b/translated_images/vaemnist-diag.694315f775d5d666b02fb54f8fc7c64db65a9d126a16c2fdb8683cf9726f9ff5.tw.png differ diff --git a/translated_images/vaemnist.cab9e602dc08dc5066ce14e005889d6b53ca5bcaf16e35c28dbf8cd40c304de1.hk.png b/translated_images/vaemnist.cab9e602dc08dc5066ce14e005889d6b53ca5bcaf16e35c28dbf8cd40c304de1.hk.png new file mode 100644 index 00000000..8bf0cdbb Binary files /dev/null and b/translated_images/vaemnist.cab9e602dc08dc5066ce14e005889d6b53ca5bcaf16e35c28dbf8cd40c304de1.hk.png differ diff --git a/translated_images/vaemnist.cab9e602dc08dc5066ce14e005889d6b53ca5bcaf16e35c28dbf8cd40c304de1.tw.png b/translated_images/vaemnist.cab9e602dc08dc5066ce14e005889d6b53ca5bcaf16e35c28dbf8cd40c304de1.tw.png new file mode 100644 index 00000000..d75973f9 Binary files /dev/null and b/translated_images/vaemnist.cab9e602dc08dc5066ce14e005889d6b53ca5bcaf16e35c28dbf8cd40c304de1.tw.png differ diff --git a/translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.hk.jpg b/translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.hk.jpg new file mode 100644 index 00000000..d7fc5868 Binary files /dev/null and b/translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.hk.jpg differ diff --git a/translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.tw.jpg b/translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.tw.jpg new file mode 100644 index 00000000..de70bc24 Binary files /dev/null and b/translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.tw.jpg differ diff --git a/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.fr.jpg b/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.fr.jpg new file mode 100644 index 00000000..d3ddac32 Binary files /dev/null and b/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.fr.jpg differ diff --git a/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.hk.jpg b/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.hk.jpg new file mode 100644 index 00000000..aec6bc8a Binary files /dev/null and b/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.hk.jpg differ diff --git a/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.ja.jpg b/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.ja.jpg new file mode 100644 index 00000000..dc684255 Binary files /dev/null and b/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.ja.jpg differ diff --git a/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.ko.jpg b/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.ko.jpg new file mode 100644 index 00000000..f4e224f0 Binary files /dev/null and b/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.ko.jpg differ diff --git a/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.tw.jpg b/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.tw.jpg new file mode 100644 index 00000000..aec6bc8a Binary files /dev/null and b/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.tw.jpg differ diff --git a/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.zh.jpg b/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.zh.jpg new file mode 100644 index 00000000..977d78ad Binary files /dev/null and b/translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.zh.jpg differ diff --git a/translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.hk.png b/translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.hk.png new file mode 100644 index 00000000..613470a6 Binary files /dev/null and b/translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.hk.png differ diff --git a/translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.tw.png b/translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.tw.png new file mode 100644 index 00000000..0ae6e043 Binary files /dev/null and b/translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.tw.png differ diff --git a/translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.hk.png b/translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.hk.png new file mode 100644 index 00000000..5bf930ee Binary files /dev/null and b/translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.hk.png differ diff --git a/translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.tw.png b/translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.tw.png new file mode 100644 index 00000000..4b4af6d9 Binary files /dev/null and b/translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.tw.png differ diff --git a/translations/fr/README.md b/translations/fr/README.md index b439901f..246d461b 100644 --- a/translations/fr/README.md +++ b/translations/fr/README.md @@ -1,99 +1,108 @@ -[![Licence GitHub](https://img.shields.io/github/license/microsoft/AI-For-Beginners.svg)](https://github.com/microsoft/AI-For-Beginners/blob/main/LICENSE) -[![Contributeurs GitHub](https://img.shields.io/github/contributors/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/) -[![Problèmes GitHub](https://img.shields.io/github/issues/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/issues/) -[![Demandes de tirage GitHub](https://img.shields.io/github/issues-pr/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/pulls/) -[![PRs Bienvenus](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![Licence GitHub](https://img.shields.io/github/license/microsoft/AI-For-Beginners.svg)](https://github.com/microsoft/AI-For-Beginners/blob/main/LICENSE) +[![Contributeurs GitHub](https://img.shields.io/github/contributors/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/) +[![Problèmes GitHub](https://img.shields.io/github/issues/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/issues/) +[![Pull-requests GitHub](https://img.shields.io/github/issues-pr/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/pulls/) +[![PRs Bienvenus](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) -[![Observateurs GitHub](https://img.shields.io/github/watchers/microsoft/AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/AI-For-Beginners/watchers/) -[![Forks GitHub](https://img.shields.io/github/forks/microsoft/AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/AI-For-Beginners/network/) -[![Étoiles GitHub](https://img.shields.io/github/stars/microsoft/AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/) -[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD) -[![Gitter](https://badges.gitter.im/Microsoft/ai-for-beginners.svg)](https://gitter.im/Microsoft/ai-for-beginners?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![Observateurs GitHub](https://img.shields.io/github/watchers/microsoft/AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/AI-For-Beginners/watchers/) +[![Forks GitHub](https://img.shields.io/github/forks/microsoft/AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/AI-For-Beginners/network/) +[![Étoiles GitHub](https://img.shields.io/github/stars/microsoft/AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD) +[![Gitter](https://badges.gitter.im/Microsoft/ai-for-beginners.svg)](https://gitter.im/Microsoft/ai-for-beginners?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) +[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) # Intelligence Artificielle pour Débutants - Un Programme |![ Sketchnote par [(@girlie_mac)](https://twitter.com/girlie_mac) ](./lessons/sketchnotes/ai-overview.png)| |:---:| -| IA Pour Débutants - _Sketchnote par [@girlie_mac](https://twitter.com/girlie_mac)_ | +| AI For Beginners - _Sketchnote par [@girlie_mac](https://twitter.com/girlie_mac)_ | -Explorez le monde de l'**Intelligence Artificielle** (IA) avec notre programme de 12 semaines et 24 leçons ! Il comprend des leçons pratiques, des quiz et des laboratoires. Le programme est adapté aux débutants et couvre des outils comme TensorFlow et PyTorch, ainsi que l'éthique en IA. +Explorez le monde de l'**Intelligence Artificielle** (IA) avec notre programme de 12 semaines et 24 leçons ! Il inclut des leçons pratiques, des quiz et des laboratoires. Ce programme est adapté aux débutants et couvre des outils comme TensorFlow et PyTorch, ainsi que des questions d'éthique en IA. ## Ce que vous apprendrez -**[Carte mentale du Cours](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)** +**[Carte mentale du cours](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)** Dans ce programme, vous apprendrez : -* Différentes approches de l'Intelligence Artificielle, y compris la "vieille" approche symbolique avec la **Représentation des Connaissances** et le raisonnement ([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence)). -* **Réseaux de Neurones** et **Apprentissage Profond**, qui sont au cœur de l'IA moderne. Nous illustrerons les concepts derrière ces sujets importants à l'aide de code dans deux des frameworks les plus populaires - [TensorFlow](http://Tensorflow.org) et [PyTorch](http://pytorch.org). -* **Architectures Neuronales** pour travailler avec des images et du texte. Nous aborderons des modèles récents mais pourrions être un peu en retard par rapport à l'état de l'art. -* Des approches moins populaires de l'IA, telles que les **Algorithmes Génétiques** et les **Systèmes Multi-Agents**. +* Différentes approches de l'Intelligence Artificielle, y compris l'approche symbolique "classique" avec la **Représentation des Connaissances** et le raisonnement ([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence)). +* Les **Réseaux Neuronaux** et le **Deep Learning**, qui sont au cœur de l'IA moderne. Nous illustrerons les concepts derrière ces sujets importants avec du code dans deux des frameworks les plus populaires - [TensorFlow](http://Tensorflow.org) et [PyTorch](http://pytorch.org). +* Les **Architectures Neuronales** pour travailler avec les images et le texte. Nous couvrirons des modèles récents, mais il se peut que nous ne soyons pas totalement à jour avec les dernières avancées. +* Des approches moins populaires de l'IA, comme les **Algorithmes Génétiques** et les **Systèmes Multi-Agents**. Ce que nous ne couvrirons pas dans ce programme : -> [Trouvez toutes les ressources supplémentaires pour ce cours dans notre collection Microsoft Learn](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) +> [Retrouvez toutes les ressources supplémentaires pour ce cours dans notre collection Microsoft Learn](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) -* Les cas d'utilisation de l'**IA dans les affaires**. Envisagez de suivre le parcours d'apprentissage [Introduction à l'IA pour les utilisateurs professionnels](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) sur Microsoft Learn, ou [AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum), développé en coopération avec [INSEAD](https://www.insead.edu/). -* **Apprentissage Automatique Classique**, qui est bien décrit dans notre [Curriculum Apprentissage Automatique pour Débutants](http://github.com/Microsoft/ML-for-Beginners). -* Applications pratiques de l'IA construites en utilisant **[Services Cognitifs](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)**. Pour cela, nous vous recommandons de commencer par les modules Microsoft Learn pour [vision](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum), [traitement du langage naturel](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum), **[IA Générative avec le Service Azure OpenAI](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** et d'autres. -* Frameworks spécifiques de ML **Cloud**, tels que [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum), [Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum) ou [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum). Envisagez d'utiliser les parcours d'apprentissage [Build and operate machine learning solutions with Azure Machine Learning](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) et [Build and Operate Machine Learning Solutions with Azure Databricks](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum). -* **IA conversationnelle** et **Chat Bots**. Il existe un parcours d'apprentissage séparé [Create conversational AI solutions](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum), et vous pouvez également consulter [cet article de blog](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/) pour plus de détails. -* **Mathématiques approfondies** derrière l'apprentissage profond. Pour cela, nous recommandons [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618) par Ian Goodfellow, Yoshua Bengio et Aaron Courville, qui est également disponible en ligne à [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/). +* Les cas d'utilisation de l'**IA en entreprise**. Pensez à suivre le parcours d'apprentissage [Introduction à l'IA pour les utilisateurs professionnels](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) sur Microsoft Learn, ou [AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum), développé en collaboration avec [INSEAD](https://www.insead.edu/). +* Le **Machine Learning classique**, qui est bien décrit dans notre programme [Machine Learning pour Débutants](http://github.com/Microsoft/ML-for-Beginners). +* Les applications pratiques d'IA construites avec **[Cognitive Services](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)**. Pour cela, nous recommandons de commencer par les modules Microsoft Learn pour [vision](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum), [traitement du langage naturel](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum), **[IA générative avec Azure OpenAI Service](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** et autres. +* Les **Frameworks Cloud ML** spécifiques, comme [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum), [Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum), ou [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum). Pensez à utiliser les parcours d'apprentissage [Créer et exploiter des solutions de machine learning avec Azure Machine Learning](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) et [Créer et exploiter des solutions de machine learning avec Azure Databricks](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum). +* L'**IA conversationnelle** et les **Chat Bots**. Il existe un parcours d'apprentissage séparé [Créer des solutions d'IA conversationnelle](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum), et vous pouvez également consulter [cet article de blog](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/) pour plus de détails. +* Les **Mathématiques avancées** derrière le deep learning. Pour cela, nous recommandons [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618) par Ian Goodfellow, Yoshua Bengio et Aaron Courville, également disponible en ligne à [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/). -Pour une introduction douce aux sujets _IA dans le Cloud_, vous pouvez envisager de suivre le parcours d'apprentissage [Get started with artificial intelligence on Azure](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum). +Pour une introduction douce aux sujets liés à l'_IA dans le Cloud_, vous pouvez envisager de suivre le parcours d'apprentissage [Commencer avec l'intelligence artificielle sur Azure](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum). # Contenu -| | Lien de leçon | PyTorch/Keras/TensorFlow | Lab | +| | Lien de la leçon | PyTorch/Keras/TensorFlow | Lab | | :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ | | 0 | [Configuration du cours](./lessons/0-course-setup/setup.md) | [Configurer votre environnement de développement](./lessons/0-course-setup/how-to-run.md) | | | I | [**Introduction à l'IA**](./lessons/1-Intro/README.md) | | | | 01 | [Introduction et histoire de l'IA](./lessons/1-Intro/README.md) | - | - | -| II | **IA symbolique** | -| 02 | [Représentation des connaissances et systèmes experts](./lessons/2-Symbolic/README.md) | [Systèmes experts](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) / [Ontologie](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) /[Graphique conceptuel](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) | | +| II | **IA Symbolique** | +| 02 | [Représentation des connaissances et systèmes experts](./lessons/2-Symbolic/README.md) | [Systèmes experts](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) / [Ontologie](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) /[Graphes de concepts](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) | | | III | [**Introduction aux réseaux neuronaux**](./lessons/3-NeuralNetworks/README.md) ||| | 03 | [Perceptron](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [Lab](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) | | 04 | [Perceptron multicouche et création de notre propre framework](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [Lab](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) | | 05 | [Introduction aux frameworks (PyTorch/TensorFlow) et surapprentissage](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [Lab](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) | -| IV | [**Vision par Ordinateur**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [Explorez la Vision par Ordinateur sur Microsoft Azure](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) | -| 06 | [Introduction à la Vision par Ordinateur. OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [Lab](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) | -| 07 | [Réseaux de Neurones Convolutifs](./lessons/4-ComputerVision/07-ConvNets/README.md) & [Architectures CNN](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [Lab](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) | -| 08 | [Réseaux Pré-entraînés et Apprentissage par Transfert](./lessons/4-ComputerVision/08-TransferLearning/README.md) et [Astuces d'Entraînement](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [Lab](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) | +| IV | [**Vision par ordinateur**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [Explorer la vision par ordinateur sur Microsoft Azure](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) | +| 06 | [Introduction à la vision par ordinateur. OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [Lab](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) | +| 07 | [Réseaux neuronaux convolutionnels](./lessons/4-ComputerVision/07-ConvNets/README.md) & [Architectures CNN](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [Lab](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) | +| 08 | [Réseaux pré-entraînés et apprentissage par transfert](./lessons/4-ComputerVision/08-TransferLearning/README.md) et [Astuces d'entraînement](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [Lab](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) | | 09 | [Autoencodeurs et VAEs](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | | -| 10 | [Réseaux Antagonistes Génératifs & Transfert de Style Artistique](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | | -| 11 | [Détection d'Objets](./lessons/4-ComputerVision/11-ObjectDetection/README.md) | [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) | [Lab](./lessons/4-ComputerVision/11-ObjectDetection/lab/README.md) | -| 12 | [Segmentation Sémantique. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) | | -| V | [**Traitement du Langage Naturel**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [Explorer le Traitement du Langage Naturel sur Microsoft Azure](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)| -| 13 | [Représentation de Texte. Bow/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | | -| 14 | [Embeddings sémantiques. Word2Vec et GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | | -| 15 | [Modélisation du Langage. Entraînez vos propres embeddings](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [Laboratoire](./lessons/5-NLP/15-LanguageModeling/lab/README.md) | -| 16 | [Réseaux de Neurones Récurrents](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | | -| 17 | [Réseaux Récurrents Génératifs](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.md) / [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.md) | [Laboratoire](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) | +| 10 | [Réseaux antagonistes génératifs et transfert de style artistique](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | | +| 11 | [Détection d'objets](./lessons/4-ComputerVision/11-ObjectDetection/README.md) | [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) | [Lab](./lessons/4-ComputerVision/11-ObjectDetection/lab/README.md) | +| 12 | [Segmentation sémantique. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](../../(https:/github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb)) | | +| V | [**Traitement du langage naturel**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [Explorer le traitement du langage naturel sur Microsoft Azure](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)| +| 13 | [Représentation des textes. Bow/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | | +| 14 | [Word embeddings sémantiques. Word2Vec et GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | | +| 15 | [Modélisation du langage. Entraîner vos propres embeddings](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [Lab](./lessons/5-NLP/15-LanguageModeling/lab/README.md) | +| 16 | [Réseaux neuronaux récurrents](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | | +| 17 | [Réseaux récurrents génératifs](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.md) / [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.md) | [Lab](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) | | 18 | [Transformers. BERT.](./lessons/5-NLP/18-Transformers/READMEtransformers.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | | -| 19 | [Reconnaissance d'Entités Nommées](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [Laboratoire](./lessons/5-NLP/19-NER/lab/README.md) | -| 20 | [Grands Modèles de Langage, Programmation de Prompts et Tâches Few-Shot](./lessons/5-NLP/20-LangModels/READMELargeLang.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | | -| VI | **Autres Techniques d'IA** || | -| 21 | [Algorithmes Génétiques](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | | -| 22 | [Apprentissage par Renforcement Profond](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [Lab](./lessons/6-Other/22-DeepRL/lab/README.md) | -| 23 | [Systèmes Multi-Agents](./lessons/6-Other/23-MultiagentSystems/README.md) | | | +| 19 | [Reconnaissance d'entités nommées](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [Lab](./lessons/5-NLP/19-NER/lab/README.md) | +| 20 | [Grands modèles de langage, programmation par prompts et tâches few-shot](./lessons/5-NLP/20-LangModels/READMELargeLang.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | | +| VI | **Autres techniques d'IA** || | +| 21 | [Algorithmes génétiques](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | | +| 22 | [Apprentissage par renforcement profond](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [Lab](./lessons/6-Other/22-DeepRL/lab/README.md) | +| 23 | [Systèmes multi-agents](./lessons/6-Other/23-MultiagentSystems/README.md) | | | | VII | **Éthique de l'IA** | | | -| 24 | [Éthique de l'IA et IA Responsable](./lessons/7-Ethics/README.md) | [Microsoft Learn : Principes d'IA Responsable](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | | +| 24 | [Éthique de l'IA et IA responsable](./lessons/7-Ethics/README.md) | [Microsoft Learn : Principes d'IA responsable](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | | | IX | **Extras** | | | -| 25 | [Réseaux Multi-Modal, CLIP et VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) | | +| 25 | [Réseaux multi-modaux, CLIP et VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) | | ## Chaque leçon contient -* Matériel de pré-lecture -* Notebooks Jupyter exécutables, qui sont souvent spécifiques au cadre (**PyTorch** ou **TensorFlow**). Le notebook exécutable contient également beaucoup de matériel théorique, donc pour comprendre le sujet, vous devez parcourir au moins une version du notebook (soit PyTorch soit TensorFlow). -* **Labs** disponibles pour certains sujets, qui vous offrent l'opportunité d'essayer d'appliquer le matériel que vous avez appris à un problème spécifique. +* Du matériel de pré-lecture +* Des notebooks Jupyter exécutables, souvent spécifiques au framework (**PyTorch** ou **TensorFlow**). Ces notebooks contiennent également beaucoup de contenu théorique, donc pour comprendre le sujet, il est nécessaire de parcourir au moins une version du notebook (PyTorch ou TensorFlow). +* **Labs** disponibles pour certains sujets, qui vous permettent d'appliquer les connaissances acquises à un problème spécifique. * Certaines sections contiennent des liens vers des modules [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) qui couvrent des sujets connexes. ## Pour commencer -- Nous avons créé une [leçon de configuration](./lessons/0-course-setup/setup.md) pour vous aider à configurer votre environnement de développement. - Pour les éducateurs, nous avons également créé une [leçon de configuration des programmes](./lessons/0-course-setup/for-teachers.md) ! -- Comment [Exécuter le code dans un VSCode ou un Codepace](./lessons/0-course-setup/how-to-run.md) +- Nous avons créé une [leçon d'installation](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/setup.md) pour vous aider à configurer votre environnement de développement. - Pour les éducateurs, nous avons également créé une [leçon de configuration des programmes](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/for-teachers.md) ! +- Comment [exécuter le code dans VSCode ou un Codespace](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/how-to-run.md) Suivez ces étapes : @@ -101,40 +110,46 @@ Forkez le dépôt : Cliquez sur le bouton "Fork" en haut à droite de cette page Clonez le dépôt : `git clone https://github.com/microsoft/AI-For-Beginners.git` -N'oubliez pas de mettre une étoile (🌟) sur ce dépôt pour le retrouver plus facilement plus tard. +N'oubliez pas d'ajouter une étoile (🌟) à ce dépôt pour le retrouver plus facilement plus tard. ## Rencontrez d'autres apprenants -Rejoignez notre [serveur Discord officiel pour l'IA](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum) pour rencontrer et réseauter avec d'autres apprenants suivant ce cours et obtenir du soutien. +Rejoignez notre [serveur Discord officiel sur l'IA](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum) pour rencontrer et échanger avec d'autres apprenants suivant ce cours et obtenir du soutien. -## Quiz +Si vous avez des retours ou des questions sur les produits pendant votre apprentissage, visitez notre [forum des développeurs Azure AI Foundry](https://aka.ms/foundry/forum) -> **Une note sur les quiz** : Tous les quiz se trouvent dans le dossier Quiz-app dans etc\quiz-app. Ils sont liés depuis les leçons. L'application de quiz peut être exécutée localement ou déployée sur Azure ; suivez les instructions dans le dossier `quiz-app`. Ils sont en cours de localisation progressive. +## Quiz +> **Une note à propos des quiz** : Tous les quiz se trouvent dans le dossier Quiz-app dans etc\quiz-app. Ils sont liés depuis les leçons, et l'application de quiz peut être exécutée localement ou déployée sur Azure ; suivez les instructions dans le dossier `quiz-app`. Ils sont progressivement en cours de localisation. +## Besoin d'aide -## Aide demandée - -Avez-vous des suggestions ou trouvé des fautes d'orthographe ou des erreurs de code ? Ouvrez un problème ou créez une demande de tirage. +Vous avez des suggestions ou avez trouvé des erreurs de code ou d'orthographe ? Ouvrez une issue ou créez une pull request. ## Remerciements spéciaux -* **✍️ Auteur principal :** [Dmitry Soshnikov](http://soshnikov.com), PhD -* **🔥 Éditeur :** [Jen Looper](https://twitter.com/jenlooper), PhD -* **🎨 Illustrateur de sketchnote :** [Tomomi Imura](https://twitter.com/girlie_mac) -* **✅ Créateur de quiz :** [Lateefah Bello](https://github.com/CinnamonXI), [MLSA](https://studentambassadors.microsoft.com/) -* **🙏 Contributeurs principaux :** [Evgenii Pishchik](https://github.com/Pe4enIks) +* **✍️ Auteur principal :** [Dmitry Soshnikov](http://soshnikov.com), PhD +* **🔥 Éditrice :** [Jen Looper](https://twitter.com/jenlooper), PhD +* **🎨 Illustratrice de sketchnotes :** [Tomomi Imura](https://twitter.com/girlie_mac) +* **✅ Créatrice de quiz :** [Lateefah Bello](https://github.com/CinnamonXI), [MLSA](https://studentambassadors.microsoft.com/) +* **🙏 Contributeurs principaux :** [Evgenii Pishchik](https://github.com/Pe4enIks) ## Autres programmes Notre équipe produit d'autres programmes ! Découvrez : -* [Science des données pour les débutants](https://aka.ms/ds4beginners) -* [**Version 2.0** IA Générative pour les Débutants](https://aka.ms/genai-beginners) -* [**NOUVEAU** Cybersécurité pour les Débutants](https://github.com/microsoft/Security-101??WT.mc_id=academic-96948-sayoung) -* [Développement Web pour les Débutants](https://aka.ms/webdev-beginners) -* [IoT pour les Débutants](https://aka.ms/iot-beginners) -* [Apprentissage Automatique pour les Débutants](https://aka.ms/ml4beginners) -* [Développement XR pour les Débutants](https://aka.ms/xr-dev-for-beginners) -* [Maîtriser GitHub Copilot pour la Programmation Assistée par IA](https://aka.ms/GitHubCopilotAI) +- [IA générative pour débutants](https://aka.ms/genai-beginners) +- [IA générative pour débutants .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [IA générative avec JavaScript](https://github.com/microsoft/generative-ai-with-javascript) +- [IA générative avec Java](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [IA pour débutants](https://aka.ms/ai-beginners) +- [Science des données pour débutants](https://aka.ms/datascience-beginners) +- [Apprentissage automatique pour débutants](https://aka.ms/ml-beginners) +- [Cybersécurité pour débutants](https://github.com/microsoft/Security-101) +- [Développement web pour débutants](https://aka.ms/webdev-beginners) +- [IoT pour débutants](https://aka.ms/iot-beginners) +- [Développement XR pour débutants](https://github.com/microsoft/xr-development-for-beginners) +- [Maîtriser GitHub Copilot pour une utilisation agentique](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [Maîtriser GitHub Copilot pour les développeurs C#/.NET](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [Choisissez votre propre aventure avec Copilot](https://github.com/microsoft/CopilotAdventures) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/SECURITY.md b/translations/fr/SECURITY.md index 3c8025ee..3252ad6f 100644 --- a/translations/fr/SECURITY.md +++ b/translations/fr/SECURITY.md @@ -1,32 +1,41 @@ + ## Sécurité -Microsoft prend très au sérieux la sécurité de nos produits et services logiciels, ce qui inclut tous les dépôts de code source gérés par nos organisations GitHub, notamment [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), et [nos organisations GitHub](https://opensource.microsoft.com/). +Microsoft prend très au sérieux la sécurité de ses produits logiciels et services, y compris tous les dépôts de code source gérés via nos organisations GitHub, qui incluent [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin) et [nos organisations GitHub](https://opensource.microsoft.com/). -Si vous pensez avoir trouvé une vulnérabilité de sécurité dans un dépôt appartenant à Microsoft qui répond à [la définition d'une vulnérabilité de sécurité de Microsoft](https://aka.ms/opensource/security/definition), veuillez nous en faire part comme décrit ci-dessous. +Si vous pensez avoir découvert une vulnérabilité de sécurité dans un dépôt appartenant à Microsoft qui correspond à [la définition d'une vulnérabilité de sécurité de Microsoft](https://aka.ms/opensource/security/definition), veuillez nous en informer comme décrit ci-dessous. -## Signalement des problèmes de sécurité +## Signaler des problèmes de sécurité -**Veuillez ne pas signaler les vulnérabilités de sécurité via les problèmes publics de GitHub.** +**Veuillez ne pas signaler de vulnérabilités de sécurité via des issues publiques sur GitHub.** -Au lieu de cela, veuillez les signaler au Centre de réponse aux incidents de sécurité de Microsoft (MSRC) à [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). +Signalez-les plutôt au Microsoft Security Response Center (MSRC) à l'adresse [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). -Si vous préférez soumettre sans vous connecter, envoyez un e-mail à [secure@microsoft.com](mailto:secure@microsoft.com). Si possible, cryptez votre message avec notre clé PGP ; veuillez la télécharger depuis la [page de clé PGP du Centre de réponse aux incidents de sécurité de Microsoft](https://aka.ms/opensource/security/pgpkey). +Si vous préférez soumettre sans vous connecter, envoyez un email à [secure@microsoft.com](mailto:secure@microsoft.com). Si possible, chiffrez votre message avec notre clé PGP ; vous pouvez la télécharger depuis la [page de la clé PGP du Microsoft Security Response Center](https://aka.ms/opensource/security/pgpkey). -Vous devriez recevoir une réponse dans les 24 heures. Si, pour une raison quelconque, vous ne le faites pas, veuillez faire un suivi par e-mail pour vous assurer que nous avons bien reçu votre message original. Des informations supplémentaires peuvent être trouvées sur [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). +Vous devriez recevoir une réponse sous 24 heures. Si, pour une raison quelconque, vous ne recevez pas de réponse, veuillez faire un suivi par email pour vous assurer que nous avons bien reçu votre message initial. Des informations supplémentaires sont disponibles sur [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). -Veuillez inclure les informations demandées ci-dessous (autant que vous pouvez fournir) pour nous aider à mieux comprendre la nature et l'étendue du problème potentiel : +Veuillez inclure les informations demandées ci-dessous (dans la mesure du possible) pour nous aider à mieux comprendre la nature et l'étendue du problème potentiel : - * Type de problème (par exemple, débordement de tampon, injection SQL, script inter-sites, etc.) + * Type de problème (par exemple, dépassement de tampon, injection SQL, script intersite, etc.) * Chemins complets des fichiers source liés à la manifestation du problème - * L'emplacement du code source affecté (tag/branche/commit ou URL directe) + * Emplacement du code source affecté (tag/branche/commit ou URL directe) * Toute configuration spéciale requise pour reproduire le problème - * Instructions étape par étape pour reproduire le problème - * Preuve de concept ou code d'exploitation (si possible) + * Instructions détaillées pour reproduire le problème + * Code de preuve de concept ou d'exploitation (si possible) * Impact du problème, y compris comment un attaquant pourrait exploiter le problème -Ces informations nous aideront à traiter votre rapport plus rapidement. +Ces informations nous aideront à prioriser votre rapport plus rapidement. -Si vous signalez pour un programme de récompense de bogue, des rapports plus complets peuvent contribuer à une récompense plus élevée. Veuillez visiter notre page sur le [Programme de récompense de bogue Microsoft](https://aka.ms/opensource/security/bounty) pour plus de détails sur nos programmes actifs. +Si vous signalez dans le cadre d'un programme de récompense pour bugs, des rapports plus complets peuvent contribuer à une récompense plus élevée. Veuillez consulter notre page [Programme de récompense pour bugs Microsoft](https://aka.ms/opensource/security/bounty) pour plus de détails sur nos programmes actifs. ## Langues préférées @@ -34,7 +43,7 @@ Nous préférons que toutes les communications soient en anglais. ## Politique -Microsoft suit le principe de [Divulgation coordonnée des vulnérabilités](https://aka.ms/opensource/security/cvd). +Microsoft suit le principe de la [Divulgation Coordonnée des Vulnérabilités](https://aka.ms/opensource/security/cvd). **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/etc/CODE_OF_CONDUCT.md b/translations/fr/etc/CODE_OF_CONDUCT.md index 4bb85e28..6423ff85 100644 --- a/translations/fr/etc/CODE_OF_CONDUCT.md +++ b/translations/fr/etc/CODE_OF_CONDUCT.md @@ -1,12 +1,21 @@ -# Code de conduite open source de Microsoft + +# Code de conduite Open Source de Microsoft -Ce projet a adopté le [Code de conduite open source de Microsoft](https://opensource.microsoft.com/codeofconduct/). +Ce projet a adopté le [Code de conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/). Ressources : -- [Code de conduite open source de Microsoft](https://opensource.microsoft.com/codeofconduct/) -- [FAQ sur le code de conduite de Microsoft](https://opensource.microsoft.com/codeofconduct/faq/) -- Contactez [opencode@microsoft.com](mailto:opencode@microsoft.com) pour toute question ou préoccupation. +- [Code de conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/) +- [FAQ sur le Code de conduite de Microsoft](https://opensource.microsoft.com/codeofconduct/faq/) +- Contactez [opencode@microsoft.com](mailto:opencode@microsoft.com) pour toute question ou préoccupation **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/etc/CONTRIBUTING.md b/translations/fr/etc/CONTRIBUTING.md index ed596d08..31fc1b37 100644 --- a/translations/fr/etc/CONTRIBUTING.md +++ b/translations/fr/etc/CONTRIBUTING.md @@ -1,20 +1,30 @@ + # Contribuer -Ce projet accueille les contributions et les suggestions. La plupart des contributions nécessitent que vous acceptiez un Accord de Licence de Contributeur (CLA) déclarant que vous avez le droit de, et que vous accordez effectivement, les droits d'utiliser votre contribution. Pour plus de détails, visitez https://cla.microsoft.com. +Ce projet accueille volontiers les contributions et suggestions. La plupart des contributions nécessitent que vous acceptiez un Accord de Licence de Contributeur (CLA) déclarant que vous avez le droit, et que vous accordez effectivement, les droits nécessaires pour utiliser votre contribution. Pour plus de détails, visitez https://cla.microsoft.com. -Lorsque vous soumettez une demande de tirage, un bot CLA déterminera automatiquement si vous devez fournir un CLA et décorera la PR en conséquence (par exemple, étiquette, commentaire). Suivez simplement les instructions fournies par le bot. Vous n'aurez besoin de le faire qu'une seule fois pour tous les dépôts utilisant notre CLA. +Lorsque vous soumettez une pull request, un CLA-bot déterminera automatiquement si vous devez fournir un CLA et annotera la PR en conséquence (par exemple, étiquette, commentaire). Suivez simplement les instructions fournies par le bot. Vous n'aurez à faire cela qu'une seule fois pour tous les dépôts utilisant notre CLA. -Ce projet a adopté le [Code de Conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/). Pour plus d'informations, consultez la [FAQ sur le Code de Conduite](https://opensource.microsoft.com/codeofconduct/faq/) ou contactez [opencode@microsoft.com](mailto:opencode@microsoft.com) pour toute question ou commentaire supplémentaire. +Ce projet a adopté le [Code de Conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/). +Pour plus d'informations, consultez la [FAQ sur le Code de Conduite](https://opensource.microsoft.com/codeofconduct/faq/) ou contactez [opencode@microsoft.com](mailto:opencode@microsoft.com) pour toute question ou commentaire supplémentaire. -# À la recherche de Contributions +# Recherche de Contributions -Nous recherchons actuellement activement des contributions sur les sujets suivants : +Nous recherchons activement des contributions sur les sujets suivants : -- [ ] Rédiger une section sur l'apprentissage par renforcement profond -- [ ] Améliorer la section + le notebook sur la Détection d'Objets -- [ ] PyTorch Lightning (pour [cette section](https://github.com/microsoft/AI-For-Beginners/blob/main/3-NeuralNetworks/05-Frameworks/README.md)) -- [ ] Rédiger une section + des exemples sur la Reconnaissance d'Entités Nommées -- [ ] Créer des exemples pour entraîner nos propres embeddings pour [cette section](https://github.com/microsoft/AI-For-Beginners/tree/main/5-NLP/15-LanguageModeling) +- [ ] Rédiger une section sur l'apprentissage par renforcement profond +- [ ] Améliorer la section + le notebook sur la détection d'objets +- [ ] PyTorch Lightning (pour [cette section](https://github.com/microsoft/AI-For-Beginners/blob/main/3-NeuralNetworks/05-Frameworks/README.md)) +- [ ] Rédiger une section + des exemples sur la reconnaissance d'entités nommées +- [ ] Créer des exemples pour entraîner nos propres embeddings pour [cette section](https://github.com/microsoft/AI-For-Beginners/tree/main/5-NLP/15-LanguageModeling) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/etc/Mindmap.md b/translations/fr/etc/Mindmap.md index 3aac1f19..b0fa252b 100644 --- a/translations/fr/etc/Mindmap.md +++ b/translations/fr/etc/Mindmap.md @@ -1,24 +1,33 @@ + # IA ## [Introduction à l'IA](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/1-Intro/README.md) - Définition de l'IA - Histoire de l'IA - Approches de l'IA - - De haut en bas / Symbolique - - De bas en haut / Neurale + - Top-down/Symbolique + - Bottom-up/Neuronale - Évolutionnaire - - IA synergiques / émergentes + - Synergétique / IA Émergente - [Microsoft AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-cacaste) ## [IA Symbolique](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/README.md) - - Représentation des connaissances + - Représentation des Connaissances - [Systèmes Experts](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) - [Ontologies](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) - - Web sémantique + - Web Sémantique -## [Réseaux Neuraux](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/README.md) +## [Réseaux de Neurones](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/README.md) - [Perceptron](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/README.md) - - [Réseaux Multicouches](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/README.md) + - [Réseaux Multi-Couches](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/README.md) - [Introduction aux Frameworks](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/README.md) - [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) - [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.md) @@ -30,47 +39,47 @@ - [Vision par Ordinateur avec PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) - [Vision par Ordinateur avec TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste) - [Introduction à la Vision par Ordinateur. OpenCV](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/README.md) - - [Réseaux de Convolution](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/README.md) + - [Réseaux Convolutionnels](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/README.md) - [Architectures CNN](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) - [Apprentissage par Transfert](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/README.md) - - [Astuces de Formation](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) - - [Autoencodeurs et VAEs](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/README.md) + - [Astuces pour l'Entraînement](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) + - [Autoencodeurs et VAE](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/README.md) - [Réseaux Antagonistes Génératifs](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/README.md) - [Transfert de Style](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) - [Détection d'Objets](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/README.md) - [Segmentation](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/README.md) - + ## [Traitement du Langage Naturel](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/README.md) - Sur MS Learn - - [Fondamentaux de l'IA : Explorer le TNL](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-cacaste) - - [TNL avec PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) - - [TNL avec TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) -- [Représentation du texte](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/README.md) - - Sac de mots + - [Fondamentaux de l'IA : Explorer le Traitement du Langage Naturel](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-cacaste) + - [NLP avec PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) + - [NLP avec TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) + - [Représentation du Texte](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/README.md) + - Sac de Mots - TF/IDF - - [Incorporations sémantiques](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/README.md) + - [Incorporations Sémantiques](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/README.md) - Word2Vec - GloVE - - [Modélisation du langage](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling) - - [Réseaux de neurones récurrents](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/README.md) + - [Modélisation du Langage](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling) + - [Réseaux de Neurones Récurrents](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/README.md) - LSTM - GRU - - [Réseaux génératifs récurrents](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/README.md) + - [Réseaux Récurrents Génératifs](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/README.md) - [Transformers et BERT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/README.md) - - [Reconnaissance d'entités nommées](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/19-NER/README.md) - - [Génération de texte et GPT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/20-LanguageModels/README.md) -## Autres techniques - - [Algorithmes génétiques](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/README.md) - - [Apprentissage par renforcement profond](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/README.md) - - [Systèmes multi-agents](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/23-MultiagentSystems/README.md) + - [Reconnaissance d'Entités Nommées](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/19-NER/README.md) + - [Génération de Texte et GPT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/20-LanguageModels/README.md) +## Autres Techniques + - [Algorithmes Génétiques](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/README.md) + - [Apprentissage par Renforcement Profond](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/README.md) + - [Systèmes Multi-Agents](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/23-MultiagentSystems/README.md) ## [Éthique de l'IA](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/7-Ethics/README.md) - - [MS Learn sur l'IA responsable](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) -## Extras - - [Réseaux multimodaux](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/README.md) + - [MS Learn sur l'IA Responsable](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) +## Suppléments + - [Réseaux Multimodaux](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/README.md) - [CLIP](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) - DALL-E - VQ-GAN **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/etc/SUPPORT.md b/translations/fr/etc/SUPPORT.md index 515c6dbc..f2adb9c2 100644 --- a/translations/fr/etc/SUPPORT.md +++ b/translations/fr/etc/SUPPORT.md @@ -1,14 +1,23 @@ + # Support ## Comment signaler des problèmes et obtenir de l'aide -Ce projet utilise les problèmes GitHub pour suivre les bogues et les demandes de fonctionnalités. Veuillez rechercher les problèmes existants avant de soumettre de nouveaux problèmes afin d'éviter les doublons. Pour les nouveaux problèmes, soumettez votre bogue ou votre demande de fonctionnalité en tant que nouveau problème. +Ce projet utilise GitHub Issues pour suivre les bugs et les demandes de fonctionnalités. Veuillez rechercher les problèmes existants avant d'en créer de nouveaux afin d'éviter les doublons. Pour signaler un nouveau problème, soumettez votre bug ou votre demande de fonctionnalité en tant que nouvel Issue. Pour obtenir de l'aide et poser des questions sur l'utilisation de ce projet, veuillez utiliser les forums de discussion. ## Politique de support de Microsoft -Le support pour ce projet est limité aux ressources énumérées ci-dessus. +Le support pour ce projet se limite aux ressources mentionnées ci-dessus. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/etc/TRANSLATIONS.md b/translations/fr/etc/TRANSLATIONS.md index 27342ba5..32ddbc69 100644 --- a/translations/fr/etc/TRANSLATIONS.md +++ b/translations/fr/etc/TRANSLATIONS.md @@ -1,36 +1,45 @@ -# Contribuez en traduisant des leçons + +# Contribuer en traduisant les leçons -Nous accueillons les traductions des leçons de ce programme ! +Nous accueillons avec plaisir les traductions des leçons de ce programme ! ## Directives -Il y a des dossiers dans chaque dossier de leçon et dans le dossier d'introduction de la leçon qui contiennent les fichiers markdown traduits. +Il y a des dossiers dans chaque dossier de leçon et dossier d'introduction de leçon qui contiennent les fichiers markdown traduits. -> Remarque : veuillez ne pas traduire le code dans les fichiers d'exemple de code ; les seules choses à traduire sont le README, les devoirs et les quiz. Merci ! +> Note, veuillez ne pas traduire le code dans les fichiers d'exemples de code ; les seuls éléments à traduire sont README, les devoirs et les quiz. Merci ! Les fichiers traduits doivent suivre cette convention de nommage : **README._[language]_.md** -où _[language]_ est une abréviation de deux lettres pour la langue selon la norme ISO 639-1 (par exemple, `README.es.md` pour l'espagnol et `README.nl.md` pour le néerlandais). +où _[language]_ est une abréviation de langue à deux lettres suivant la norme ISO 639-1 (par exemple, `README.es.md` pour l'espagnol et `README.nl.md` pour le néerlandais). **assignment._[language]_.md** -Tout comme pour les README, veuillez également traduire les devoirs. +Comme pour les README, veuillez également traduire les devoirs. **Quiz** -1. Ajoutez votre traduction à l'application de quiz en ajoutant un fichier ici : https://github.com/microsoft/AI-For-Beginners/tree/main/etc/quiz-app/src/assets/translations, avec la convention de nommage appropriée (en.json, fr.json). **Veuillez cependant ne pas localiser les mots 'true' ou 'false'. Merci !** +1. Ajoutez votre traduction à l'application de quiz en ajoutant un fichier ici : https://github.com/microsoft/AI-For-Beginners/tree/main/etc/quiz-app/src/assets/translations, en respectant la convention de nommage (en.json, fr.json). **Veuillez ne pas localiser les mots 'true' ou 'false'. Merci !** 2. Ajoutez votre code de langue au menu déroulant dans le fichier App.vue de l'application de quiz. -3. Modifiez le fichier [index.js des traductions de l'application de quiz](https://github.com/microsoft/AI-For-Beginners/blob/main/etc/quiz-app/src/assets/translations/index.js) pour ajouter votre langue. +3. Modifiez le [fichier index.js des traductions](https://github.com/microsoft/AI-For-Beginners/blob/main/etc/quiz-app/src/assets/translations/index.js) de l'application de quiz pour ajouter votre langue. -4. Enfin, modifiez TOUS les liens de quiz dans vos fichiers README.md traduits pour pointer directement vers votre quiz traduit : https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1 devient https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1?loc=id +4. Enfin, modifiez TOUS les liens des quiz dans vos fichiers README.md traduits pour qu'ils pointent directement vers votre quiz traduit : https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1 devient https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1?loc=id **MERCI** -Nous apprécions vraiment vos efforts ! +Nous apprécions sincèrement vos efforts ! **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'atteindre une précision, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/etc/quiz-app/README.md b/translations/fr/etc/quiz-app/README.md index 329e5922..0264b0b6 100644 --- a/translations/fr/etc/quiz-app/README.md +++ b/translations/fr/etc/quiz-app/README.md @@ -1,18 +1,27 @@ + # Quiz -Ces quiz sont les quiz pré et post-conférence pour le programme d'IA à https://aka.ms/ai-beginners +Ces quiz sont les quiz pré- et post-cours pour le programme d'IA disponible sur https://aka.ms/ai-beginners ## Ajouter un ensemble de quiz traduit -Ajoutez une traduction de quiz en créant des structures de quiz correspondantes dans les dossiers `assets/translations`. Les quiz canoniques se trouvent dans `assets/translations/en`. Les quiz sont répartis en plusieurs groupes par leçon. Assurez-vous d'aligner la numérotation avec la section de quiz appropriée. Il y a un total de 40 quiz dans ce programme, le compte commençant à 0. +Ajoutez une traduction de quiz en créant des structures de quiz correspondantes dans les dossiers `assets/translations`. Les quiz de référence se trouvent dans `assets/translations/en`. Les quiz sont divisés en plusieurs groupes par leçon. Assurez-vous d'aligner la numérotation avec la section de quiz appropriée. Il y a un total de 40 quiz dans ce programme, avec une numérotation commençant à 0. -Après avoir modifié les traductions, éditez le fichier index.js dans le dossier de traduction pour importer tous les fichiers selon les conventions de `en`. +Après avoir modifié les traductions, éditez le fichier index.js dans le dossier de traduction pour importer tous les fichiers en suivant les conventions de `en`. Modifiez le fichier `index.js` dans `assets/translations` pour importer les nouveaux fichiers traduits. -Ensuite, modifiez le menu déroulant dans `App.vue` dans cette application pour ajouter votre langue. Faites correspondre l'abréviation localisée au nom du dossier pour votre langue. +Ensuite, modifiez le menu déroulant dans `App.vue` de cette application pour ajouter votre langue. Faites correspondre l'abréviation localisée au nom du dossier de votre langue. -Enfin, modifiez tous les liens de quiz dans les leçons traduites, s'ils existent, pour inclure cette localisation en tant que paramètre de requête : `?loc=fr` par exemple. +Enfin, modifiez tous les liens des quiz dans les leçons traduites, si elles existent, pour inclure cette localisation comme paramètre de requête : `?loc=fr` par exemple. ## Configuration du projet @@ -32,7 +41,7 @@ npm run serve npm run build ``` -### Vérifie et corrige les fichiers +### Analyse et correction des fichiers ``` npm run lint @@ -46,51 +55,52 @@ Crédits : Merci à la version originale de cette application de quiz : https:// ## Déploiement sur Azure -Voici un guide étape par étape pour vous aider à commencer : +Voici un guide étape par étape pour vous aider à démarrer : -1. Forkez un dépôt GitHub -Assurez-vous que le code de votre application web statique est dans votre dépôt GitHub. Forkez ce dépôt. +1. Forker un dépôt GitHub +Assurez-vous que le code de votre application web statique se trouve dans votre dépôt GitHub. Forkez ce dépôt. -2. Créez une application web statique Azure -- Créez un [compte Azure](http://azure.microsoft.com) -- Allez sur le [portail Azure](https://portal.azure.com) -- Cliquez sur « Créer une ressource » et recherchez « Application web statique ». -- Cliquez sur « Créer ». +2. Créer une application web statique Azure +- Créez un [compte Azure](http://azure.microsoft.com) +- Accédez au [portail Azure](https://portal.azure.com) +- Cliquez sur "Créer une ressource" et recherchez "Application Web Statique". +- Cliquez sur "Créer". -3. Configurez l'application web statique -- Bases : Abonnement : Sélectionnez votre abonnement Azure. -- Groupe de ressources : Créez un nouveau groupe de ressources ou utilisez un groupe existant. -- Nom : Fournissez un nom pour votre application web statique. -- Région : Choisissez la région la plus proche de vos utilisateurs. +3. Configurer l'application web statique +- **Informations de base** : + - Abonnement : Sélectionnez votre abonnement Azure. + - Groupe de ressources : Créez un nouveau groupe de ressources ou utilisez-en un existant. + - Nom : Donnez un nom à votre application web statique. + - Région : Choisissez la région la plus proche de vos utilisateurs. -- #### Détails du déploiement : -- Source : Sélectionnez « GitHub ». -- Compte GitHub : Autorisez Azure à accéder à votre compte GitHub. -- Organisation : Sélectionnez votre organisation GitHub. -- Dépôt : Choisissez le dépôt contenant votre application web statique. -- Branche : Sélectionnez la branche à partir de laquelle vous souhaitez déployer. +- **Détails du déploiement** : + - Source : Sélectionnez "GitHub". + - Compte GitHub : Autorisez Azure à accéder à votre compte GitHub. + - Organisation : Sélectionnez votre organisation GitHub. + - Dépôt : Choisissez le dépôt contenant votre application web statique. + - Branche : Sélectionnez la branche à partir de laquelle vous souhaitez déployer. -- #### Détails de la construction : -- Préréglages de construction : Choisissez le framework avec lequel votre application est construite (par exemple, React, Angular, Vue, etc.). -- Emplacement de l'application : Spécifiez le dossier contenant le code de votre application (par exemple, / s'il est à la racine). -- Emplacement de l'API : Si vous avez une API, spécifiez son emplacement (facultatif). -- Emplacement de sortie : Spécifiez le dossier où la sortie de la construction est générée (par exemple, build ou dist). +- **Détails de la construction** : + - Préréglages de construction : Choisissez le framework avec lequel votre application est construite (par ex., React, Angular, Vue, etc.). + - Emplacement de l'application : Spécifiez le dossier contenant le code de votre application (par ex., / si c'est à la racine). + - Emplacement de l'API : Si vous avez une API, spécifiez son emplacement (optionnel). + - Emplacement de sortie : Spécifiez le dossier où la sortie de la construction est générée (par ex., build ou dist). -4. Examinez et créez -Examinez vos paramètres et cliquez sur « Créer ». Azure configurera les ressources nécessaires et créera un flux de travail GitHub Actions dans votre dépôt. +4. Examiner et créer +Examinez vos paramètres et cliquez sur "Créer". Azure configurera les ressources nécessaires et créera un workflow GitHub Actions dans votre dépôt. -5. Flux de travail GitHub Actions -Azure créera automatiquement un fichier de flux de travail GitHub Actions dans votre dépôt (.github/workflows/azure-static-web-apps-.yml). Ce flux de travail gérera le processus de construction et de déploiement. +5. Workflow GitHub Actions +Azure créera automatiquement un fichier de workflow GitHub Actions dans votre dépôt (.github/workflows/azure-static-web-apps-.yml). Ce workflow gérera le processus de construction et de déploiement. -6. Surveillez le déploiement -Allez dans l'onglet « Actions » de votre dépôt GitHub. -Vous devriez voir un flux de travail en cours d'exécution. Ce flux de travail construira et déploiera votre application web statique sur Azure. -Une fois le flux de travail terminé, votre application sera en ligne sur l'URL Azure fournie. +6. Surveiller le déploiement +Accédez à l'onglet "Actions" dans votre dépôt GitHub. +Vous devriez voir un workflow en cours d'exécution. Ce workflow construira et déploiera votre application web statique sur Azure. +Une fois le workflow terminé, votre application sera en ligne à l'URL fournie par Azure. -### Exemple de fichier de flux de travail +### Exemple de fichier de workflow -Voici un exemple de ce à quoi le fichier de flux de travail GitHub Actions pourrait ressembler : -name: Azure Static Web Apps CI/CD +Voici un exemple de ce à quoi pourrait ressembler le fichier de workflow GitHub Actions : +name: Azure Static Web Apps CI/CD ``` on: push: @@ -119,9 +129,9 @@ jobs: output_location: "dist" #Built app content directory - optional ``` -### Ressources supplémentaires -- [Documentation des applications web statiques Azure](https://learn.microsoft.com/azure/static-web-apps/getting-started) -- [Documentation de GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) +### Ressources supplémentaires +- [Documentation des applications web statiques Azure](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [Documentation GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/0-course-setup/for-teachers.md b/translations/fr/lessons/0-course-setup/for-teachers.md index 8b4677e5..d367dff4 100644 --- a/translations/fr/lessons/0-course-setup/for-teachers.md +++ b/translations/fr/lessons/0-course-setup/for-teachers.md @@ -1,26 +1,35 @@ -# Pour les éducateurs + +# Pour les enseignants Souhaitez-vous utiliser ce programme dans votre classe ? N'hésitez pas ! -En fait, vous pouvez l'utiliser directement sur GitHub en utilisant GitHub Classroom. +En fait, vous pouvez l'utiliser directement sur GitHub en passant par GitHub Classroom. -Pour ce faire, faites un fork de ce repo. Vous devrez créer un repo pour chaque leçon, donc vous devrez extraire chaque dossier dans un repo séparé. De cette façon, [GitHub Classroom](https://classroom.github.com/classrooms) pourra récupérer chaque leçon séparément. +Pour cela, faites un fork de ce dépôt. Vous devrez créer un dépôt pour chaque leçon, donc il faudra extraire chaque dossier dans un dépôt séparé. De cette manière, [GitHub Classroom](https://classroom.github.com/classrooms) pourra gérer chaque leçon individuellement. Ces [instructions complètes](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) vous donneront une idée de la façon de configurer votre classe. -## Utiliser le repo tel quel +## Utiliser le dépôt tel quel -Si vous souhaitez utiliser ce repo tel qu'il est actuellement, sans utiliser GitHub Classroom, cela peut également se faire. Vous devrez communiquer avec vos étudiants sur la leçon à travailler ensemble. +Si vous souhaitez utiliser ce dépôt tel qu'il est, sans passer par GitHub Classroom, c'est également possible. Vous devrez simplement communiquer avec vos étudiants pour leur indiquer quelle leçon suivre ensemble. -Dans un format en ligne (Zoom, Teams, ou autre), vous pourriez former des salles de discussion pour les quiz, et encadrer les étudiants pour les aider à se préparer à apprendre. Ensuite, invitez les étudiants à participer aux quiz et à soumettre leurs réponses en tant qu'« issues » à un certain moment. Vous pourriez faire de même avec les devoirs, si vous souhaitez que les étudiants travaillent ensemble de manière ouverte. +Dans un format en ligne (Zoom, Teams ou autre), vous pourriez créer des salles de discussion pour les quiz et encadrer les étudiants afin de les préparer à apprendre. Ensuite, invitez les étudiants à participer aux quiz et à soumettre leurs réponses sous forme de 'issues' à un moment donné. Vous pourriez faire de même avec les devoirs, si vous souhaitez que les étudiants travaillent de manière collaborative et ouverte. -Si vous préférez un format plus privé, demandez à vos étudiants de forker le programme, leçon par leçon, vers leurs propres repos GitHub en tant que repos privés, et de vous donner accès. Ils pourront alors compléter les quiz et les devoirs de manière privée et vous les soumettre via des issues sur votre repo de classe. +Si vous préférez un format plus privé, demandez à vos étudiants de forker le programme, leçon par leçon, dans leurs propres dépôts GitHub privés, et donnez-vous accès. Ils pourront alors compléter les quiz et les devoirs de manière privée et vous les soumettre via des issues sur votre dépôt de classe. Il existe de nombreuses façons de faire fonctionner cela dans un format de classe en ligne. Faites-nous savoir ce qui fonctionne le mieux pour vous ! -## Veuillez nous donner votre avis +## Donnez-nous votre avis -Nous voulons que ce programme fonctionne pour vous et vos étudiants. Merci de nous faire part de vos retours sur les forums de discussion ! +Nous voulons que ce programme fonctionne pour vous et vos étudiants. Merci de nous faire part de vos retours dans les forums de discussion ! **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/0-course-setup/how-to-run.md b/translations/fr/lessons/0-course-setup/how-to-run.md index 648715a4..be6fdf51 100644 --- a/translations/fr/lessons/0-course-setup/how-to-run.md +++ b/translations/fr/lessons/0-course-setup/how-to-run.md @@ -1,10 +1,19 @@ + # Comment exécuter le code Ce programme contient de nombreux exemples exécutables et laboratoires que vous souhaiterez exécuter. Pour ce faire, vous devez pouvoir exécuter du code Python dans des Jupyter Notebooks fournis dans le cadre de ce programme. Vous avez plusieurs options pour exécuter le code : ## Exécuter localement sur votre ordinateur -Pour exécuter le code localement sur votre ordinateur, vous devez avoir une version de Python installée. Je recommande personnellement d'installer **[miniconda](https://conda.io/en/latest/miniconda.html)** - c'est une installation plutôt légère qui prend en charge le gestionnaire de paquets `conda` pour différents **environnements virtuels** Python. +Pour exécuter le code localement sur votre ordinateur, vous devez avoir une version de Python installée. Je recommande personnellement d'installer **[miniconda](https://conda.io/en/latest/miniconda.html)** - une installation légère qui prend en charge le gestionnaire de paquets `conda` pour différents **environnements virtuels** Python. Après avoir installé miniconda, vous devez cloner le dépôt et créer un environnement virtuel à utiliser pour ce cours : @@ -17,15 +26,15 @@ conda activate ai4beg ### Utiliser Visual Studio Code avec l'extension Python -Probablement la meilleure façon d'utiliser le programme est de l'ouvrir dans [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) avec l'[extension Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste). +La meilleure façon d'utiliser ce programme est probablement de l'ouvrir dans [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) avec l'[extension Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste). > **Note** : Une fois que vous avez cloné et ouvert le répertoire dans VS Code, il vous suggérera automatiquement d'installer les extensions Python. Vous devrez également installer miniconda comme décrit ci-dessus. -> **Note** : Si VS Code vous suggère de réouvrir le dépôt dans un conteneur, vous devez refuser cela pour utiliser l'installation Python locale. +> **Note** : Si VS Code vous propose de rouvrir le dépôt dans un conteneur, vous devez refuser pour utiliser l'installation Python locale. ### Utiliser Jupyter dans le navigateur -Vous pouvez également utiliser l'environnement Jupyter directement depuis le navigateur sur votre propre ordinateur. En fait, à la fois Jupyter classique et Jupyter Hub offrent un environnement de développement assez pratique avec autocomplétion, mise en surbrillance du code, etc. +Vous pouvez également utiliser l'environnement Jupyter directement depuis le navigateur sur votre propre ordinateur. En fait, Jupyter classique et Jupyter Hub offrent un environnement de développement assez pratique avec autocomplétion, surlignage de code, etc. Pour démarrer Jupyter localement, allez dans le répertoire du cours et exécutez : @@ -36,32 +45,32 @@ ou ```bash jupyterhub ``` -Vous pouvez ensuite naviguer vers n'importe quel dossier `.ipynb` files, open them and start working. +Vous pouvez ensuite naviguer vers n'importe quel fichier `.ipynb`, l'ouvrir et commencer à travailler. -### Running in container +### Exécuter dans un conteneur -One alternative to Python installation would be to run the code in container. Since our repository contains special `.devcontainer` qui explique comment construire un conteneur pour ce dépôt. VS Code vous proposera de réouvrir le code dans un conteneur. Cela nécessitera l'installation de Docker, et sera également plus complexe, donc nous recommandons cela aux utilisateurs plus expérimentés. +Une alternative à l'installation de Python serait d'exécuter le code dans un conteneur. Étant donné que notre dépôt contient un dossier spécial `.devcontainer` qui indique comment construire un conteneur pour ce dépôt, VS Code vous proposera de rouvrir le code dans un conteneur. Cela nécessitera l'installation de Docker et sera également plus complexe, donc nous recommandons cette option aux utilisateurs plus expérimentés. -## Exécution dans le Cloud +## Exécuter dans le cloud -Si vous ne souhaitez pas installer Python localement, et que vous avez accès à des ressources cloud - une bonne alternative serait d'exécuter le code dans le cloud. Il existe plusieurs façons de le faire : +Si vous ne souhaitez pas installer Python localement et que vous avez accès à des ressources cloud, une bonne alternative serait d'exécuter le code dans le cloud. Il existe plusieurs façons de le faire : -* Utiliser **[GitHub Codespaces](https://github.com/features/codespaces)**, qui est un environnement virtuel créé pour vous sur GitHub, accessible via l'interface du navigateur VS Code. Si vous avez accès à Codespaces, vous pouvez simplement cliquer sur le bouton **Code** dans le dépôt, démarrer un codespace et commencer à exécuter rapidement. -* Utiliser **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. [Binder](https://mybinder.org) est une ressource de calcul gratuite fournie dans le cloud pour des personnes comme vous afin de tester du code sur GitHub. Il y a un bouton sur la page d'accueil pour ouvrir le dépôt dans Binder - cela devrait rapidement vous amener sur le site de binder, qui construira le conteneur sous-jacent et démarrera l'interface web Jupyter pour vous sans problème. +* Utiliser **[GitHub Codespaces](https://github.com/features/codespaces)**, qui est un environnement virtuel créé pour vous sur GitHub, accessible via l'interface navigateur de VS Code. Si vous avez accès à Codespaces, vous pouvez simplement cliquer sur le bouton **Code** dans le dépôt, démarrer un codespace et commencer à travailler rapidement. +* Utiliser **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. [Binder](https://mybinder.org) fournit des ressources informatiques gratuites dans le cloud pour permettre aux utilisateurs de tester du code sur GitHub. Il y a un bouton sur la page d'accueil pour ouvrir le dépôt dans Binder - cela vous amènera rapidement au site Binder, qui construira le conteneur sous-jacent et démarrera l'interface web Jupyter pour vous de manière transparente. -> **Note** : Pour prévenir les abus, Binder a accès à certaines ressources web bloquées. Cela peut empêcher certaines parties du code de fonctionner, notamment celles qui récupèrent des modèles et/ou des ensembles de données depuis Internet public. Vous devrez peut-être trouver des solutions de contournement. De plus, les ressources de calcul fournies par Binder sont assez basiques, donc l'entraînement sera lent, surtout dans les leçons plus complexes ultérieures. +> **Note** : Pour éviter les abus, Binder bloque l'accès à certaines ressources web. Cela peut empêcher certains codes qui récupèrent des modèles et/ou des ensembles de données depuis Internet de fonctionner. Vous devrez peut-être trouver des solutions alternatives. De plus, les ressources informatiques fournies par Binder sont assez basiques, donc l'entraînement sera lent, en particulier dans les leçons plus complexes. -## Exécution dans le Cloud avec GPU +## Exécuter dans le cloud avec GPU -Certaines des leçons ultérieures de ce programme bénéficieraient grandement du support GPU, car sinon l'entraînement sera douloureusement lent. Il existe quelques options que vous pouvez suivre, surtout si vous avez accès au cloud soit par [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste), soit par votre institution : +Certaines des leçons plus avancées de ce programme bénéficieraient grandement du support GPU, car sinon l'entraînement serait extrêmement lent. Voici quelques options, surtout si vous avez accès au cloud via [Azure pour les étudiants](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) ou via votre institution : -* Créer une [Machine Virtuelle de Science des Données](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) et s'y connecter via Jupyter. Vous pouvez alors cloner le dépôt directement sur la machine et commencer à apprendre. Les VM de la série NC ont un support GPU. +* Créez une [Machine Virtuelle Data Science](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) et connectez-vous à celle-ci via Jupyter. Vous pouvez ensuite cloner le dépôt directement sur la machine et commencer à apprendre. Les machines virtuelles de la série NC disposent du support GPU. -> **Note** : Certaines souscriptions, y compris Azure for Students, ne fournissent pas de support GPU par défaut. Vous devrez peut-être demander des cœurs GPU supplémentaires via une demande de support technique. +> **Note** : Certaines abonnements, y compris Azure pour les étudiants, ne fournissent pas de support GPU par défaut. Vous devrez peut-être demander des cœurs GPU supplémentaires via une demande de support technique. -* Créer un [Espace de Travail de Machine Learning Azure](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) et ensuite utiliser la fonctionnalité Notebook là-bas. [Cette vidéo](https://azure-for-academics.github.io/quickstart/azureml-papers/) montre comment cloner un dépôt dans un notebook Azure ML et commencer à l'utiliser. +* Créez un [Espace de travail Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) et utilisez ensuite la fonctionnalité Notebook. [Cette vidéo](https://azure-for-academics.github.io/quickstart/azureml-papers/) montre comment cloner un dépôt dans un notebook Azure ML et commencer à l'utiliser. -Vous pouvez également utiliser Google Colab, qui propose un certain support GPU gratuit, et y télécharger des Jupyter Notebooks pour les exécuter un par un. +Vous pouvez également utiliser Google Colab, qui offre un support GPU gratuit, et y télécharger des Jupyter Notebooks pour les exécuter un par un. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/0-course-setup/setup.md b/translations/fr/lessons/0-course-setup/setup.md index f703e48f..4c98c1f9 100644 --- a/translations/fr/lessons/0-course-setup/setup.md +++ b/translations/fr/lessons/0-course-setup/setup.md @@ -1,45 +1,54 @@ -# Introduction à ce Curriculum + +# Commencer avec ce programme -## Êtes-vous un étudiant ? +## Êtes-vous étudiant ? Commencez avec les ressources suivantes : -* [Page du Hub étudiant](https://docs.microsoft.com/learn/student-hub?WT.mc_id=academic-77998-cacaste) Sur cette page, vous trouverez des ressources pour débutants, des packs étudiants, et même des moyens d'obtenir un bon de certification gratuit. C'est une page que vous voudrez ajouter à vos favoris et consulter de temps en temps, car nous changeons le contenu au moins une fois par mois. -* [Ambassadeurs étudiants de Microsoft](https://studentambassadors.microsoft.com?WT.mc_id=academic-77998-cacaste) Rejoignez une communauté mondiale d'ambassadeurs étudiants, cela pourrait être votre porte d'entrée chez Microsoft. +* [Page Hub étudiant](https://docs.microsoft.com/learn/student-hub?WT.mc_id=academic-77998-cacaste) Sur cette page, vous trouverez des ressources pour débutants, des packs étudiants, et même des moyens d'obtenir un bon de réduction pour une certification gratuite. C'est une page à mettre en favori et à consulter régulièrement, car nous mettons à jour le contenu au moins une fois par mois. +* [Ambassadeurs Microsoft Student Learn](https://studentambassadors.microsoft.com?WT.mc_id=academic-77998-cacaste) Rejoignez une communauté mondiale d'ambassadeurs étudiants, cela pourrait être votre porte d'entrée chez Microsoft. -**Étudiants**, il existe plusieurs façons d'utiliser le curriculum. Tout d'abord, vous pouvez simplement lire le texte et parcourir le code directement sur GitHub. Si vous souhaitez exécuter le code dans l'un des notebooks - [lisez nos instructions](./etc/how-to-run.md), et trouvez plus de conseils sur la façon de le faire [dans cet article de blog](https://soshnikov.com/education/how-to-execute-notebooks-from-github/). +**Étudiants**, il y a plusieurs façons d'utiliser ce programme. Tout d'abord, vous pouvez simplement lire le texte et examiner le code directement sur GitHub. Si vous souhaitez exécuter le code dans l'un des notebooks - [lisez nos instructions](./etc/how-to-run.md), et trouvez plus de conseils sur la façon de procéder [dans cet article de blog](https://soshnikov.com/education/how-to-execute-notebooks-from-github/). -> **Remarque** : [Instructions sur la façon d'exécuter le code dans ce curriculum](/how-to-run.md) +> **Note** : [Instructions pour exécuter le code de ce programme](./how-to-run.md) -## Auto-apprentissage +## Étude autonome -Cependant, si vous souhaitez suivre le cours en tant que projet d'auto-apprentissage, nous vous suggérons de forker l'ensemble du dépôt sur votre propre compte GitHub et de compléter les exercices par vous-même ou en groupe : +Cependant, si vous souhaitez suivre le cours comme un projet d'étude autonome, nous vous suggérons de forker l'intégralité du dépôt sur votre propre compte GitHub et de réaliser les exercices seul ou en groupe : -* Commencez par un quiz pré-conférence. -* Lisez le texte d'introduction à la conférence. -* Si la conférence contient des notebooks supplémentaires, parcourez-les, en lisant et en exécutant le code. Si des notebooks TensorFlow et PyTorch sont fournis, vous pouvez vous concentrer sur l'un d'eux - choisissez votre framework préféré. -* Les notebooks contiennent souvent certains des défis qui nécessitent de modifier un peu le code pour expérimenter. -* Passez le quiz post-conférence. -* S'il y a un laboratoire associé au module - complétez l'assignation. -* Visitez le [Forum de discussion](https://github.com/microsoft/AI-For-Beginners/discussions) pour "apprendre à haute voix". +* Commencez par un quiz pré-lecture. +* Lisez le texte d'introduction de la leçon. +* Si la leçon contient des notebooks supplémentaires, parcourez-les, lisez et exécutez le code. Si des notebooks pour TensorFlow et PyTorch sont fournis, vous pouvez vous concentrer sur l'un d'eux - choisissez votre framework préféré. +* Les notebooks contiennent souvent des défis qui nécessitent de modifier un peu le code pour expérimenter. +* Faites le quiz post-lecture. +* S'il y a un laboratoire attaché au module - réalisez l'exercice. +* Visitez le [forum de discussion](https://github.com/microsoft/AI-For-Beginners/discussions) pour "apprendre à voix haute". -> Pour un apprentissage supplémentaire, nous recommandons de suivre ces modules et parcours d'apprentissage de [Microsoft Learn](https://docs.microsoft.com/en-us/users/dmitrysoshnikov-9132/collections/31zgizg2p418yo/?WT.mc_id=academic-77998-cacaste). +> Pour approfondir vos connaissances, nous recommandons de suivre ces modules et parcours d'apprentissage [Microsoft Learn](https://docs.microsoft.com/en-us/users/dmitrysoshnikov-9132/collections/31zgizg2p418yo/?WT.mc_id=academic-77998-cacaste). -**Enseignants**, nous avons [inclus quelques suggestions](/for-teachers.md) sur la façon d'utiliser ce curriculum. +**Enseignants**, nous avons [inclus quelques suggestions](/for-teachers.md) sur la façon d'utiliser ce programme. --- ## Pédagogie -Nous avons choisi deux principes pédagogiques lors de la création de ce curriculum : garantir qu'il soit pratique **basé sur des projets** et qu'il inclue **des quiz fréquents**. +Nous avons choisi deux principes pédagogiques lors de la création de ce programme : garantir qu'il soit **basé sur des projets pratiques** et qu'il inclue des **quiz fréquents**. -En veillant à ce que le contenu soit aligné avec des projets, le processus devient plus engageant pour les étudiants et la rétention des concepts sera augmentée. De plus, un quiz à faible enjeu avant un cours fixe l'intention de l'étudiant d'apprendre un sujet, tandis qu'un second quiz après le cours assure une rétention supplémentaire. Ce curriculum a été conçu pour être flexible et amusant et peut être suivi en entier ou en partie. Les projets commencent petits et deviennent de plus en plus complexes à la fin du cycle de 12 semaines. +En alignant le contenu sur des projets, le processus devient plus engageant pour les étudiants et la rétention des concepts est améliorée. De plus, un quiz à faible enjeu avant un cours fixe l'intention de l'étudiant d'apprendre un sujet, tandis qu'un second quiz après le cours renforce davantage la rétention. Ce programme a été conçu pour être flexible et amusant et peut être suivi en totalité ou en partie. Les projets commencent petits et deviennent de plus en plus complexes à la fin du cycle de 12 semaines. -> **Une note sur les quiz** : Tous les quiz sont contenus [dans cette application](https://red-field-0a6ddfd03.1.azurestaticapps.net/), pour un total de 50 quiz de trois questions chacun. Ils sont liés depuis les leçons, mais l'application de quiz peut être exécutée localement ; suivez les instructions dans le dossier `etc/quiz-app`. +> **Une note sur les quiz** : Tous les quiz sont contenus [dans cette application](https://red-field-0a6ddfd03.1.azurestaticapps.net/), pour un total de 50 quiz de trois questions chacun. Ils sont liés dans les leçons, mais l'application de quiz peut être exécutée localement ; suivez les instructions dans le dossier `etc/quiz-app`. ## Accès hors ligne -Vous pouvez exécuter cette documentation hors ligne en utilisant [Docsify](https://docsify.js.org/#/). Forkez ce dépôt, [installez Docsify](https://docsify.js.org/#/quickstart) sur votre machine locale, puis dans le dossier `etc/docsify` de ce dépôt, tapez `docsify serve`. Le site sera servi sur le port 3000 sur votre localhost : `localhost:3000`. Un pdf du curriculum est disponible [à ce lien](../../../../../../etc/pdf/readme.pdf). +Vous pouvez exécuter cette documentation hors ligne en utilisant [Docsify](https://docsify.js.org/#/). Forkez ce dépôt, [installez Docsify](https://docsify.js.org/#/quickstart) sur votre machine locale, puis dans le dossier racine de ce dépôt, tapez `docsify serve`. Le site web sera servi sur le port 3000 de votre localhost : `localhost:3000`. Un PDF du programme est disponible [à ce lien](../../../../../../../../../etc/pdf/readme.pdf). **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/1-Intro/README.md b/translations/fr/lessons/1-Intro/README.md index 95666962..e5dd6ad4 100644 --- a/translations/fr/lessons/1-Intro/README.md +++ b/translations/fr/lessons/1-Intro/README.md @@ -1,33 +1,140 @@ + +# Introduction à l'IA + +![Résumé du contenu de l'introduction à l'IA sous forme de dessin](../../../../translated_images/ai-intro.bf28d1ac4235881c096f0ffdb320ba4102940eafcca4e9d7a55a03914361f8f3.fr.png) + +> Sketchnote par [Tomomi Imura](https://twitter.com/girlie_mac) + +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/101) + +**L'intelligence artificielle** est une discipline scientifique fascinante qui étudie comment rendre les ordinateurs capables de comportements intelligents, c'est-à-dire de réaliser des tâches que les humains maîtrisent bien. + +À l'origine, les ordinateurs ont été inventés par [Charles Babbage](https://en.wikipedia.org/wiki/Charles_Babbage) pour effectuer des calculs sur des nombres en suivant une procédure bien définie - un algorithme. Les ordinateurs modernes, bien que beaucoup plus avancés que le modèle initial proposé au XIXe siècle, suivent toujours le même principe de calculs contrôlés. Ainsi, il est possible de programmer un ordinateur pour accomplir une tâche si l'on connaît la séquence exacte d'étapes nécessaires pour atteindre l'objectif. + +![Photo d'une personne](../../../../translated_images/dsh_age.d212a30d4e54fb5f68b94a624aad64bc086124bcbbec9561ae5bd5da661e22d8.fr.png) + +> Photo par [Vickie Soshnikova](http://twitter.com/vickievalerie) + +> ✅ Déterminer l'âge d'une personne à partir de sa photo est une tâche qui ne peut pas être programmée explicitement, car nous ne savons pas comment nous arrivons à un chiffre dans notre tête lorsque nous le faisons. + +--- + +Cependant, certaines tâches ne peuvent pas être résolues de manière explicite. Prenons l'exemple de la détermination de l'âge d'une personne à partir de sa photo. Nous apprenons à le faire en observant de nombreux exemples de personnes d'âges différents, mais nous ne pouvons pas expliquer précisément comment nous y parvenons, ni programmer un ordinateur pour le faire. C'est précisément ce type de tâche qui intéresse l'**intelligence artificielle** (IA). + +✅ Réfléchissez à certaines tâches que vous pourriez déléguer à un ordinateur et qui bénéficieraient de l'IA. Pensez aux domaines de la finance, de la médecine et des arts - comment ces domaines profitent-ils aujourd'hui de l'IA ? + +## IA faible vs IA forte + +IA faible | IA forte +---------------------------------------|------------------------------------- +L'IA faible désigne des systèmes d'IA conçus et entraînés pour une tâche spécifique ou un ensemble limité de tâches.|L'IA forte, ou Intelligence Artificielle Générale (AGI), désigne des systèmes d'IA dotés d'une intelligence et d'une compréhension au niveau humain. +Ces systèmes d'IA ne sont pas généralement intelligents ; ils excellent dans l'exécution d'une tâche prédéfinie mais manquent de véritable compréhension ou conscience.|Ces systèmes d'IA ont la capacité d'exécuter n'importe quelle tâche intellectuelle qu'un être humain peut accomplir, de s'adapter à différents domaines et de posséder une forme de conscience ou de conscience de soi. +Exemples d'IA faible : assistants virtuels comme Siri ou Alexa, algorithmes de recommandation utilisés par les services de streaming, et chatbots conçus pour des tâches spécifiques de service client.|L'atteinte de l'IA forte est un objectif à long terme de la recherche en IA et nécessiterait le développement de systèmes d'IA capables de raisonner, d'apprendre, de comprendre et de s'adapter à une large gamme de tâches et de contextes. +L'IA faible est hautement spécialisée et ne possède pas de capacités cognitives humaines ou de capacités générales de résolution de problèmes au-delà de son domaine limité.|L'IA forte est actuellement un concept théorique, et aucun système d'IA n'a atteint ce niveau d'intelligence générale. + +Pour plus d'informations, consultez **[Artificial General Intelligence](https://en.wikipedia.org/wiki/Artificial_general_intelligence)** (AGI). + +## La définition de l'intelligence et le test de Turing + +L'un des problèmes liés au terme **[Intelligence](https://en.wikipedia.org/wiki/Intelligence)** est qu'il n'existe pas de définition claire de ce terme. On peut soutenir que l'intelligence est liée à la **pensée abstraite** ou à la **conscience de soi**, mais nous ne pouvons pas la définir correctement. + +![Photo d'un chat](../../../../translated_images/photo-cat.8c8e8fb760ffe45725c5b9f6b0d954e9bf114475c01c55adf0303982851b7eae.fr.jpg) + +> [Photo](https://unsplash.com/photos/75715CVEJhI) par [Amber Kipp](https://unsplash.com/@sadmax) sur Unsplash + +Pour voir l'ambiguïté du terme *intelligence*, essayez de répondre à la question : "Un chat est-il intelligent ?". Différentes personnes ont tendance à donner des réponses différentes à cette question, car il n'existe pas de test universellement accepté pour prouver que l'affirmation est vraie ou non. Et si vous pensez qu'il y en a un - essayez de faire passer un test de QI à votre chat... + +✅ Prenez une minute pour réfléchir à votre propre définition de l'intelligence. Un corbeau capable de résoudre un labyrinthe pour accéder à de la nourriture est-il intelligent ? Un enfant est-il intelligent ? + +--- + +Lorsqu'on parle d'AGI, il est nécessaire de disposer d'un moyen de déterminer si nous avons créé un système véritablement intelligent. [Alan Turing](https://en.wikipedia.org/wiki/Alan_Turing) a proposé une méthode appelée **[Test de Turing](https://en.wikipedia.org/wiki/Turing_test)**, qui sert également de définition de l'intelligence. Le test compare un système donné à quelque chose d'intrinsèquement intelligent - un être humain réel, et comme toute comparaison automatique peut être contournée par un programme informatique, nous utilisons un interrogateur humain. Ainsi, si un être humain est incapable de distinguer entre une personne réelle et un système informatique dans un dialogue textuel, le système est considéré comme intelligent. + +> Un chatbot appelé [Eugene Goostman](https://en.wikipedia.org/wiki/Eugene_Goostman), développé à Saint-Pétersbourg, s'est approché de la réussite du test de Turing en 2014 en utilisant une astuce de personnalité ingénieuse. Il annonçait d'emblée qu'il était un garçon ukrainien de 13 ans, ce qui expliquait le manque de connaissances et certaines incohérences dans le texte. Le bot a convaincu 30 % des juges qu'il était humain après un dialogue de 5 minutes, une métrique que Turing pensait qu'une machine pourrait atteindre d'ici 2000. Cependant, il est important de comprendre que cela ne signifie pas que nous avons créé un système intelligent, ni qu'un système informatique a trompé l'interrogateur humain - ce n'est pas le système qui a trompé les humains, mais plutôt les créateurs du bot ! + +✅ Avez-vous déjà été trompé par un chatbot en pensant que vous parliez à un humain ? Comment vous a-t-il convaincu ? + +## Différentes approches de l'IA + +Si nous voulons qu'un ordinateur se comporte comme un humain, nous devons d'une manière ou d'une autre modéliser notre façon de penser à l'intérieur de l'ordinateur. Par conséquent, nous devons essayer de comprendre ce qui rend un être humain intelligent. + +> Pour pouvoir programmer l'intelligence dans une machine, nous devons comprendre comment fonctionnent nos propres processus de prise de décision. Si vous faites un peu d'introspection, vous réaliserez qu'il existe des processus qui se produisent de manière subconsciente – par exemple, nous pouvons distinguer un chat d'un chien sans y réfléchir - tandis que d'autres impliquent un raisonnement. + +Il existe deux approches possibles à ce problème : + +Approche descendante (raisonnement symbolique) | Approche ascendante (réseaux neuronaux) +---------------------------------------|------------------------------------- +Une approche descendante modélise la manière dont une personne raisonne pour résoudre un problème. Elle consiste à extraire des **connaissances** d'un être humain et à les représenter sous une forme lisible par un ordinateur. Nous devons également développer une méthode pour modéliser le **raisonnement** à l'intérieur d'un ordinateur. | Une approche ascendante modélise la structure du cerveau humain, composée d'un grand nombre d'unités simples appelées **neurones**. Chaque neurone agit comme une moyenne pondérée de ses entrées, et nous pouvons entraîner un réseau de neurones à résoudre des problèmes utiles en fournissant des **données d'entraînement**. + +Il existe également d'autres approches possibles de l'intelligence : + +* Une approche **émergente**, **synergétique** ou **multi-agents** repose sur le fait qu'un comportement intelligent complexe peut être obtenu par l'interaction d'un grand nombre d'agents simples. Selon la [cybernétique évolutive](https://en.wikipedia.org/wiki/Global_brain#Evolutionary_cybernetics), l'intelligence peut *émerger* d'un comportement plus simple et réactif dans le processus de *transition de méta-système*. + +* Une approche **évolutionnaire**, ou **algorithme génétique**, est un processus d'optimisation basé sur les principes de l'évolution. + +Nous examinerons ces approches plus tard dans le cours, mais pour l'instant, nous nous concentrerons sur deux directions principales : descendante et ascendante. + +### L'approche descendante + +Dans une **approche descendante**, nous essayons de modéliser notre raisonnement. Parce que nous pouvons suivre nos pensées lorsque nous raisonnons, nous pouvons essayer de formaliser ce processus et de le programmer dans l'ordinateur. Cela s'appelle le **raisonnement symbolique**. + +Les gens ont tendance à avoir des règles dans leur tête qui guident leurs processus de prise de décision. Par exemple, lorsqu'un médecin diagnostique un patient, il ou elle peut réaliser qu'une personne a de la fièvre, et donc qu'il pourrait y avoir une inflammation dans le corps. En appliquant un grand ensemble de règles à un problème spécifique, un médecin peut être en mesure de poser un diagnostic final. + +Cette approche repose fortement sur la **représentation des connaissances** et le **raisonnement**. Extraire des connaissances d'un expert humain peut être la partie la plus difficile, car un médecin, dans de nombreux cas, ne saurait pas exactement pourquoi il ou elle arrive à un diagnostic particulier. Parfois, la solution surgit simplement dans son esprit sans réflexion explicite. Certaines tâches, comme déterminer l'âge d'une personne à partir d'une photo, ne peuvent pas du tout être réduites à la manipulation de connaissances. + +### L'approche ascendante + +Alternativement, nous pouvons essayer de modéliser les éléments les plus simples de notre cerveau – un neurone. Nous pouvons construire un **réseau neuronal artificiel** dans un ordinateur, puis essayer de lui apprendre à résoudre des problèmes en lui donnant des exemples. Ce processus est similaire à la façon dont un nouveau-né apprend à connaître son environnement en faisant des observations. + +✅ Faites quelques recherches sur la façon dont les bébés apprennent. Quels sont les éléments de base du cerveau d'un bébé ? + +> | Et le ML ? | | +> |--------------|-----------| +> | Une partie de l'intelligence artificielle basée sur l'apprentissage par ordinateur pour résoudre un problème à partir de données est appelée **Machine Learning**. Nous n'aborderons pas l'apprentissage automatique classique dans ce cours - nous vous renvoyons à un programme distinct [Machine Learning for Beginners](http://aka.ms/ml-beginners). | ![ML pour les débutants](../../../../translated_images/ml-for-beginners.9e4fed176fd5817d7d1f7d358302515186579cbf09b2a6c5bd8092b345da7f22.fr.png) | + +## Brève histoire de l'IA + +L'intelligence artificielle a commencé en tant que domaine au milieu du XXe siècle. Initialement, le raisonnement symbolique était l'approche dominante, et cela a conduit à un certain nombre de succès importants, tels que les systèmes experts – des programmes informatiques capables d'agir comme un expert dans certains domaines problématiques limités. Cependant, il est vite devenu évident que cette approche ne s'adaptait pas bien. Extraire les connaissances d'un expert, les représenter dans un ordinateur et maintenir cette base de connaissances précise s'est avéré être une tâche très complexe et trop coûteuse pour être pratique dans de nombreux cas. Cela a conduit à ce qu'on appelle l'[hiver de l'IA](https://en.wikipedia.org/wiki/AI_winter) dans les années 1970. + > Image par [Dmitry Soshnikov](http://soshnikov.com) -Au fil du temps, les ressources informatiques sont devenues moins chères et davantage de données sont devenues disponibles, ce qui a permis aux approches par réseaux de neurones de montrer d'excellentes performances en concurrence avec les êtres humains dans de nombreux domaines, tels que la vision par ordinateur ou la compréhension de la parole. Au cours de la dernière décennie, le terme Intelligence Artificielle a été principalement utilisé comme synonyme de Réseaux de Neurones, car la plupart des succès de l'IA dont nous entendons parler en dépendent. +Avec le temps, les ressources informatiques sont devenues moins chères, et davantage de données sont devenues disponibles, ce qui a permis aux approches basées sur les réseaux neuronaux de démontrer de grandes performances en rivalisant avec les êtres humains dans de nombreux domaines, tels que la vision par ordinateur ou la compréhension de la parole. Au cours de la dernière décennie, le terme intelligence artificielle a été principalement utilisé comme synonyme de réseaux neuronaux, car la plupart des succès de l'IA dont nous entendons parler sont basés sur eux. -Nous pouvons observer comment les approches ont évolué, par exemple, dans la création d'un programme d'échecs : +Nous pouvons observer comment les approches ont évolué, par exemple, dans la création d'un programme informatique jouant aux échecs : -* Les premiers programmes d'échecs étaient basés sur la recherche – un programme essayait explicitement d'estimer les coups possibles d'un adversaire pour un certain nombre de coups suivants et sélectionnait un coup optimal basé sur la position optimale qui pouvait être atteinte en quelques coups. Cela a conduit au développement de l'algorithme de recherche dit [alpha-beta pruning](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning). -* Les stratégies de recherche fonctionnent bien vers la fin de la partie, où l'espace de recherche est limité par un petit nombre de coups possibles. Cependant, au début de la partie, l'espace de recherche est énorme, et l'algorithme peut être amélioré en apprenant des parties existantes entre joueurs humains. Les expériences ultérieures ont utilisé le raisonnement basé sur les cas, où le programme cherchait des cas dans la base de connaissances très similaires à la position actuelle dans le jeu. -* Les programmes modernes qui gagnent contre des joueurs humains sont basés sur des réseaux de neurones et sur l'[apprentissage par renforcement](https://en.wikipedia.org/wiki/Reinforcement_learning), où les programmes apprennent à jouer uniquement en jouant longtemps contre eux-mêmes et en apprenant de leurs propres erreurs – tout comme le font les êtres humains en apprenant à jouer aux échecs. Cependant, un programme informatique peut jouer beaucoup plus de parties en beaucoup moins de temps, et peut donc apprendre beaucoup plus rapidement. +* Les premiers programmes d'échecs étaient basés sur la recherche – un programme essayait explicitement d'estimer les coups possibles d'un adversaire pour un certain nombre de coups à venir, et sélectionnait un coup optimal en fonction de la position optimale pouvant être atteinte en quelques coups. Cela a conduit au développement de l'algorithme de recherche appelé [alpha-beta pruning](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning). +* Les stratégies de recherche fonctionnent bien vers la fin du jeu, où l'espace de recherche est limité par un petit nombre de coups possibles. Cependant, au début du jeu, l'espace de recherche est immense, et l'algorithme peut être amélioré en apprenant à partir de matchs existants entre joueurs humains. Des expériences ultérieures ont utilisé ce qu'on appelle le [raisonnement basé sur les cas](https://en.wikipedia.org/wiki/Case-based_reasoning), où le programme recherchait des cas dans la base de connaissances très similaires à la position actuelle dans le jeu. +* Les programmes modernes qui surpassent les joueurs humains sont basés sur des réseaux neuronaux et l'[apprentissage par renforcement](https://en.wikipedia.org/wiki/Reinforcement_learning), où les programmes apprennent à jouer uniquement en jouant longtemps contre eux-mêmes et en apprenant de leurs propres erreurs – un peu comme les humains lorsqu'ils apprennent à jouer aux échecs. Cependant, un programme informatique peut jouer beaucoup plus de parties en beaucoup moins de temps, et donc apprendre beaucoup plus rapidement. -✅ Faites un peu de recherche sur d'autres jeux auxquels l'IA a joué. +✅ Faites quelques recherches sur d'autres jeux auxquels l'IA a joué. -De même, nous pouvons voir comment l'approche pour créer des "programmes parlants" (qui pourraient passer le test de Turing) a évolué : +De même, nous pouvons voir comment l'approche pour créer des "programmes parlants" (qui pourraient réussir le test de Turing) a évolué : -* Les premiers programmes de ce type, tels que [Eliza](https://en.wikipedia.org/wiki/ELIZA), étaient basés sur des règles grammaticales très simples et la reformulation de la phrase d'entrée en une question. -* Les assistants modernes, tels que Cortana, Siri ou Google Assistant, sont tous des systèmes hybrides qui utilisent des réseaux de neurones pour convertir la parole en texte et reconnaître notre intention, puis emploient un raisonnement ou des algorithmes explicites pour effectuer les actions requises. -* À l'avenir, nous pouvons nous attendre à un modèle entièrement basé sur des neurones capable de gérer le dialogue par lui-même. Les récents réseaux de neurones GPT et [Turing-NLG](https://turing.microsoft.com/) montrent un grand succès à cet égard. +* Les premiers programmes de ce type, comme [Eliza](https://en.wikipedia.org/wiki/ELIZA), étaient basés sur des règles grammaticales très simples et la reformulation de la phrase d'entrée en une question. +* Les assistants modernes, tels que Cortana, Siri ou Google Assistant, sont tous des systèmes hybrides qui utilisent des réseaux neuronaux pour convertir la parole en texte et reconnaître notre intention, puis emploient un raisonnement ou des algorithmes explicites pour effectuer les actions requises. +* À l'avenir, nous pourrions nous attendre à un modèle entièrement basé sur les réseaux neuronaux pour gérer le dialogue par lui-même. Les récents réseaux neuronaux de la famille GPT et [Turing-NLG](https://turing.microsoft.com/) montrent de grands succès dans ce domaine. > Image par Dmitry Soshnikov, [photo](https://unsplash.com/photos/r8LmVbUKgns) par [Marina Abrosimova](https://unsplash.com/@abrosimova_marina_foto), Unsplash ## Recherche récente en IA -L'énorme croissance récente de la recherche sur les réseaux de neurones a commencé vers 2010, lorsque de grands ensembles de données publics ont commencé à devenir disponibles. Une vaste collection d'images appelée [ImageNet](https://en.wikipedia.org/wiki/ImageNet), qui contient environ 14 millions d'images annotées, a donné naissance au [Défi de Reconnaissance Visuelle à Grande Échelle ImageNet](https://image-net.org/challenges/LSVRC/). +La croissance massive de la recherche sur les réseaux neuronaux a commencé vers 2010, lorsque de grands ensembles de données publics ont commencé à être disponibles. Une vaste collection d'images appelée [ImageNet](https://en.wikipedia.org/wiki/ImageNet), qui contient environ 14 millions d'images annotées, a donné naissance au [ImageNet Large Scale Visual Recognition Challenge](https://image-net.org/challenges/LSVRC/). ![Précision ILSVRC](../../../../lessons/1-Intro/images/ilsvrc.gif) > Image par [Dmitry Soshnikov](http://soshnikov.com) -En 2012, les [réseaux de neurones convolutionnels](../4-ComputerVision/07-ConvNets/README.md) ont été utilisés pour la première fois dans la classification d'images, ce qui a entraîné une réduction significative des erreurs de classification (passant de presque 30 % à 16,4 %). En 2015, l'architecture ResNet de Microsoft Research a [atteint une précision au niveau humain](https://doi.org/10.1109/ICCV.2015.123). -Depuis lors, les réseaux de neurones ont démontré un comportement très réussi dans de nombreuses tâches : +En 2012, les [réseaux neuronaux convolutifs](../4-ComputerVision/07-ConvNets/README.md) ont été utilisés pour la première fois dans la classification d'images, ce qui a entraîné une baisse significative des erreurs de classification (de presque 30 % à 16,4 %). En 2015, l'architecture ResNet de Microsoft Research a [atteint une précision au niveau humain](https://doi.org/10.1109/ICCV.2015.123). + +Depuis lors, les réseaux neuronaux ont démontré un comportement très performant dans de nombreuses tâches : --- @@ -36,21 +143,21 @@ Année | Parité humaine atteinte 2015 | [Classification d'images](https://doi.org/10.1109/ICCV.2015.123) 2016 | [Reconnaissance vocale conversationnelle](https://arxiv.org/abs/1610.05256) 2018 | [Traduction automatique](https://arxiv.org/abs/1803.05567) (Chinois vers Anglais) -2020 | [Légendes d'images](https://arxiv.org/abs/2009.13682) +2020 | [Génération de légendes d'images](https://arxiv.org/abs/2009.13682) -Au cours des dernières années, nous avons été témoins de grands succès avec de grands modèles de langage, tels que BERT et GPT-3. Cela est principalement dû au fait qu'il existe beaucoup de données textuelles générales disponibles qui nous permettent de former des modèles pour capturer la structure et le sens des textes, de les préformer sur des collections de textes générales, puis de spécialiser ces modèles pour des tâches plus spécifiques. Nous en apprendrons davantage sur le [traitement du langage naturel](../5-NLP/README.md) plus tard dans ce cours. +Au cours des dernières années, nous avons assisté à de grands succès avec les modèles de langage de grande taille, tels que BERT et GPT-3. Cela s'est produit principalement grâce à la disponibilité d'une grande quantité de données textuelles générales, permettant de former des modèles capables de capturer la structure et le sens des textes, de les pré-entraîner sur des collections de textes généraux, puis de spécialiser ces modèles pour des tâches plus spécifiques. Nous en apprendrons davantage sur le [traitement du langage naturel](../5-NLP/README.md) plus tard dans ce cours. ## 🚀 Défi -Faites un tour d'internet pour déterminer où, selon vous, l'IA est utilisée de manière la plus efficace. Est-ce dans une application de cartographie, un service de reconnaissance vocale ou un jeu vidéo ? Renseignez-vous sur la manière dont le système a été construit. +Faites un tour sur internet pour déterminer, selon vous, où l'IA est utilisée de manière la plus efficace. Est-ce dans une application de cartographie, un service de reconnaissance vocale ou un jeu vidéo ? Recherchez comment le système a été conçu. -## [Quiz post-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/201) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/201) -## Revue et auto-apprentissage +## Révision et étude personnelle -Revoyez l'histoire de l'IA et du ML en lisant [cette leçon](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/2-history-of-ML). Prenez un élément du sketchnote en haut de cette leçon ou de celle-ci et recherchez-le plus en profondeur pour comprendre le contexte culturel qui informe son évolution. +Passez en revue l'histoire de l'IA et de l'apprentissage automatique en lisant [cette leçon](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/2-history-of-ML). Prenez un élément du sketchnote en haut de cette leçon ou de celle-ci et approfondissez vos recherches pour comprendre le contexte culturel qui a influencé son évolution. **Devoir** : [Game Jam](assignment.md) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/1-Intro/assignment.md b/translations/fr/lessons/1-Intro/assignment.md index d1c0f41f..5ffaa4c1 100644 --- a/translations/fr/lessons/1-Intro/assignment.md +++ b/translations/fr/lessons/1-Intro/assignment.md @@ -1,6 +1,15 @@ + # Game Jam -Les jeux sont un domaine qui a été fortement influencé par les développements en IA et en ML. Dans cette tâche, rédigez un court document sur un jeu que vous aimez et qui a été influencé par l'évolution de l'IA. Il doit s'agir d'un jeu suffisamment ancien pour avoir été influencé par plusieurs types de systèmes de traitement informatique. Un bon exemple est les échecs ou le go, mais jetez également un œil aux jeux vidéo comme Pong ou Pac-Man. Rédigez un essai qui discute du passé, du présent et de l'avenir de l'IA dans le jeu. +Les jeux sont un domaine qui a été fortement influencé par les avancées en IA et en apprentissage automatique. Dans cet exercice, rédigez un court essai sur un jeu que vous aimez et qui a été influencé par l'évolution de l'IA. Il devrait s'agir d'un jeu suffisamment ancien pour avoir été influencé par plusieurs types de systèmes de traitement informatique. Un bon exemple est les échecs ou le Go, mais examinez également des jeux vidéo comme Pong ou Pac-Man. Rédigez un essai qui discute du passé, du présent et de l'avenir de l'IA dans ce jeu. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/2-Symbolic/README.md b/translations/fr/lessons/2-Symbolic/README.md index d8fdc513..6fcec938 100644 --- a/translations/fr/lessons/2-Symbolic/README.md +++ b/translations/fr/lessons/2-Symbolic/README.md @@ -1,56 +1,63 @@ -# Représentation des Connaissances et Systèmes Experts + +# Représentation des connaissances et systèmes experts -![Résumé du contenu de l'IA Symbolique](../../../../translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.fr.png) +![Résumé du contenu de l'IA symbolique](../../../../translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.fr.png) > Sketchnote par [Tomomi Imura](https://twitter.com/girlie_mac) -La quête de l'intelligence artificielle repose sur une recherche de connaissances, afin de donner un sens au monde de manière similaire à celle des humains. Mais comment peut-on y parvenir ? +La quête de l'intelligence artificielle repose sur une recherche de connaissances, pour comprendre le monde de manière similaire aux humains. Mais comment peut-on s'y prendre pour y parvenir ? -## [Quiz pré-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/102) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/102) -Dans les débuts de l'IA, l'approche descendante pour créer des systèmes intelligents (discutée dans la leçon précédente) était populaire. L'idée était d'extraire les connaissances des personnes dans une forme lisible par machine, puis de les utiliser pour résoudre automatiquement des problèmes. Cette approche reposait sur deux grandes idées : +Aux débuts de l'IA, l'approche descendante pour créer des systèmes intelligents (discutée dans la leçon précédente) était populaire. L'idée était d'extraire les connaissances des humains dans un format lisible par une machine, puis de les utiliser pour résoudre automatiquement des problèmes. Cette approche reposait sur deux grandes idées : -* Représentation des Connaissances +* Représentation des connaissances * Raisonnement -## Représentation des Connaissances +## Représentation des connaissances -Un des concepts importants dans l'IA Symbolique est la **connaissance**. Il est essentiel de différencier la connaissance de *l'information* ou *des données*. Par exemple, on peut dire que les livres contiennent des connaissances, car on peut étudier des livres et devenir un expert. Cependant, ce que contiennent les livres est en réalité appelé *données*, et en lisant des livres et en intégrant ces données dans notre modèle du monde, nous convertissons ces données en connaissances. +Un des concepts importants de l'IA symbolique est la **connaissance**. Il est essentiel de différencier la connaissance de l'*information* ou des *données*. Par exemple, on peut dire que les livres contiennent des connaissances, car on peut les étudier et devenir expert. Cependant, ce que les livres contiennent est en réalité appelé *données*, et en lisant les livres et en intégrant ces données dans notre modèle du monde, nous transformons ces données en connaissances. -> ✅ **La connaissance** est quelque chose qui est contenu dans notre tête et représente notre compréhension du monde. Elle est obtenue par un processus d'**apprentissage** actif, qui intègre des morceaux d'information que nous recevons dans notre modèle actif du monde. +> ✅ **La connaissance** est quelque chose qui se trouve dans notre tête et représente notre compréhension du monde. Elle est obtenue par un processus actif d'**apprentissage**, qui intègre les informations reçues dans notre modèle actif du monde. -Le plus souvent, nous ne définissons pas strictement la connaissance, mais nous l'alignons avec d'autres concepts connexes en utilisant la [Pyramide DIKW](https://en.wikipedia.org/wiki/DIKW_pyramid). Elle contient les concepts suivants : +Le plus souvent, nous ne définissons pas strictement la connaissance, mais nous l'alignons avec d'autres concepts connexes en utilisant la [pyramide DIKW](https://fr.wikipedia.org/wiki/Pyramide_DIKW). Elle contient les concepts suivants : -* **Données** : quelque chose représenté sur des supports physiques, tels que du texte écrit ou des mots prononcés. Les données existent indépendamment des êtres humains et peuvent être transmises entre les personnes. -* **Information** : la manière dont nous interprétons les données dans notre tête. Par exemple, lorsque nous entendons le mot *ordinateur*, nous avons une certaine compréhension de ce que c'est. -* **Connaissance** : information intégrée dans notre modèle du monde. Par exemple, une fois que nous apprenons ce qu'est un ordinateur, nous commençons à avoir des idées sur son fonctionnement, son coût et ses usages. Ce réseau de concepts interconnectés forme notre connaissance. -* **Sagesse** : un niveau supplémentaire de notre compréhension du monde, représentant *la méta-connaissance*, c'est-à-dire une notion sur comment et quand la connaissance doit être utilisée. +* **Données** : quelque chose représenté sur un support physique, comme un texte écrit ou des mots prononcés. Les données existent indépendamment des êtres humains et peuvent être transmises entre eux. +* **Information** : la manière dont nous interprétons les données dans notre esprit. Par exemple, lorsque nous entendons le mot *ordinateur*, nous avons une certaine compréhension de ce que c'est. +* **Connaissance** : l'information intégrée dans notre modèle du monde. Par exemple, une fois que nous apprenons ce qu'est un ordinateur, nous commençons à avoir des idées sur son fonctionnement, son coût et ses usages. Ce réseau de concepts interconnectés forme notre connaissance. +* **Sagesse** : un niveau supplémentaire de compréhension du monde, représentant une *méta-connaissance*, c'est-à-dire une notion sur la manière et le moment d'utiliser les connaissances. - +*Image [de Wikipédia](https://commons.wikimedia.org/w/index.php?curid=37705247), par Longlivetheux - Travail personnel, CC BY-SA 4.0* -*Image [de Wikipedia](https://commons.wikimedia.org/w/index.php?curid=37705247), par Longlivetheux - Travail personnel, CC BY-SA 4.0* +Ainsi, le problème de la **représentation des connaissances** consiste à trouver un moyen efficace de représenter les connaissances dans un ordinateur sous forme de données, afin de les rendre utilisables automatiquement. Cela peut être vu comme un spectre : -Ainsi, le problème de la **représentation des connaissances** consiste à trouver un moyen efficace de représenter la connaissance à l'intérieur d'un ordinateur sous forme de données, pour la rendre automatiquement utilisable. Cela peut être vu comme un spectre : - -![Spectre de représentation des connaissances](../../../../translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.fr.png) +![Spectre de la représentation des connaissances](../../../../translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.fr.png) > Image par [Dmitry Soshnikov](http://soshnikov.com) -* À gauche, il y a des types très simples de représentations de connaissances qui peuvent être utilisés efficacement par les ordinateurs. Le plus simple est algorithmique, lorsque la connaissance est représentée par un programme informatique. Cependant, ce n'est pas le meilleur moyen de représenter la connaissance, car ce n'est pas flexible. La connaissance dans notre tête est souvent non-algorithmique. -* À droite, il y a des représentations telles que le texte naturel. C'est la plus puissante, mais ne peut pas être utilisée pour un raisonnement automatique. +* À gauche, il y a des types très simples de représentations des connaissances qui peuvent être efficacement utilisés par les ordinateurs. Le plus simple est l'algorithmique, où les connaissances sont représentées par un programme informatique. Cependant, ce n'est pas la meilleure façon de représenter les connaissances, car ce n'est pas flexible. Les connaissances dans notre tête sont souvent non algorithmiques. +* À droite, il y a des représentations comme le texte naturel. C'est la plus puissante, mais elle ne peut pas être utilisée pour un raisonnement automatique. -> ✅ Réfléchissez un instant à la façon dont vous représentez la connaissance dans votre tête et la convertissez en notes. Y a-t-il un format particulier qui fonctionne bien pour vous afin d'aider à la rétention ? +> ✅ Réfléchissez un instant à la manière dont vous représentez les connaissances dans votre tête et les convertissez en notes. Y a-t-il un format particulier qui fonctionne bien pour vous et facilite la rétention ? -## Classification des Représentations de Connaissances Informatiques +## Classification des représentations des connaissances informatiques Nous pouvons classer les différentes méthodes de représentation des connaissances informatiques dans les catégories suivantes : -* **Représentations en réseau** : basées sur le fait que nous avons un réseau de concepts interconnectés dans notre tête. Nous pouvons essayer de reproduire les mêmes réseaux sous forme de graphe à l'intérieur d'un ordinateur - un soi-disant **réseau sémantique**. +* **Représentations en réseau** : elles se basent sur le fait que nous avons un réseau de concepts interconnectés dans notre tête. Nous pouvons essayer de reproduire ces réseaux sous forme de graphe dans un ordinateur - un **réseau sémantique**. -1. **Triplets Objet-Attribut-Valeur** ou **paires attribut-valeur**. Étant donné qu'un graphe peut être représenté à l'intérieur d'un ordinateur sous forme de liste de nœuds et d'arêtes, nous pouvons représenter un réseau sémantique par une liste de triplets, contenant des objets, des attributs et des valeurs. Par exemple, nous construisons les triplets suivants concernant les langages de programmation : +1. **Triplets Objet-Attribut-Valeur** ou **paires attribut-valeur**. Puisqu'un graphe peut être représenté dans un ordinateur comme une liste de nœuds et d'arêtes, nous pouvons représenter un réseau sémantique par une liste de triplets contenant des objets, des attributs et des valeurs. Par exemple, nous construisons les triplets suivants sur les langages de programmation : Objet | Attribut | Valeur --------|-----------|------ +------|----------|------- Python | est | Langage-Non-Typé Python | inventé-par | Guido van Rossum Python | syntaxe-bloc | indentation @@ -58,50 +65,50 @@ Langage-Non-Typé | n'a pas | définitions de types > ✅ Réfléchissez à la manière dont les triplets peuvent être utilisés pour représenter d'autres types de connaissances. -2. **Représentations hiérarchiques** : soulignent le fait que nous créons souvent une hiérarchie d'objets dans notre tête. Par exemple, nous savons qu'un canari est un oiseau, et tous les oiseaux ont des ailes. Nous avons également une idée de la couleur d'un canari et de sa vitesse de vol. +2. **Représentations hiérarchiques** : elles mettent en avant le fait que nous créons souvent une hiérarchie d'objets dans notre tête. Par exemple, nous savons qu'un canari est un oiseau, et que tous les oiseaux ont des ailes. Nous avons aussi une idée de la couleur habituelle d'un canari et de sa vitesse de vol. - - **Représentation de cadre** : basée sur la représentation de chaque objet ou classe d'objets sous forme de **cadre** contenant des **emplacements**. Les emplacements ont des valeurs par défaut possibles, des restrictions de valeur ou des procédures stockées qui peuvent être appelées pour obtenir la valeur d'un emplacement. Tous les cadres forment une hiérarchie similaire à une hiérarchie d'objets dans les langages de programmation orientés objet. - - **Scénarios** : un type spécial de cadres qui représentent des situations complexes pouvant se dérouler dans le temps. + - **Représentation par cadre** : elle repose sur la représentation de chaque objet ou classe d'objets sous forme de **cadre** contenant des **slots**. Les slots ont des valeurs par défaut possibles, des restrictions de valeurs ou des procédures stockées qui peuvent être appelées pour obtenir la valeur d'un slot. Tous les cadres forment une hiérarchie similaire à une hiérarchie d'objets dans les langages de programmation orientés objet. + - **Scénarios** : ce sont des cadres spéciaux qui représentent des situations complexes pouvant se dérouler dans le temps. **Python** -Emplacement | Valeur | Valeur par défaut | Intervalle | ------|-------|---------------|----------| +Slot | Valeur | Valeur par défaut | Intervalle | +-----|--------|-------------------|------------| Nom | Python | | | Est-Un | Langage-Non-Typé | | | -Cas de Variable | | CamelCase | | -Longueur du Programme | | | 5-5000 lignes | -Syntaxe de Bloc | Indentation | | | +Casse des variables | | CamelCase | | +Longueur du programme | | | 5-5000 lignes | +Syntaxe de bloc | Indentation | | | -3. **Représentations procédurales** : basées sur la représentation des connaissances par une liste d'actions qui peuvent être exécutées lorsqu'une certaine condition se produit. - - Les règles de production sont des déclarations si-alors qui nous permettent de tirer des conclusions. Par exemple, un médecin peut avoir une règle disant que **SI** un patient a de la fièvre élevée **OU** un taux élevé de protéine C-réactive dans les analyses sanguines **ALORS** il a une inflammation. Une fois que nous rencontrons l'une des conditions, nous pouvons conclure qu'il y a inflammation, puis l'utiliser dans un raisonnement ultérieur. - - Les algorithmes peuvent être considérés comme une autre forme de représentation procédurale, bien qu'ils soient presque jamais utilisés directement dans les systèmes basés sur les connaissances. +3. **Représentations procédurales** : elles reposent sur la représentation des connaissances par une liste d'actions pouvant être exécutées lorsqu'une certaine condition se produit. + - Les règles de production sont des déclarations si-alors qui permettent de tirer des conclusions. Par exemple, un médecin peut avoir une règle disant que **SI** un patient a une forte fièvre **OU** un taux élevé de protéine C-réactive dans une analyse de sang **ALORS** il a une inflammation. Une fois que nous rencontrons une des conditions, nous pouvons conclure à une inflammation, puis l'utiliser dans un raisonnement ultérieur. + - Les algorithmes peuvent être considérés comme une autre forme de représentation procédurale, bien qu'ils ne soient presque jamais utilisés directement dans les systèmes basés sur les connaissances. -4. **Logique** : proposée à l'origine par Aristote comme moyen de représenter la connaissance humaine universelle. - - La logique des prédicats, en tant que théorie mathématique, est trop riche pour être calculable, donc un sous-ensemble est normalement utilisé, tel que les clauses de Horn utilisées en Prolog. - - La logique descriptive est une famille de systèmes logiques utilisés pour représenter et raisonner sur des hiérarchies d'objets dans des représentations de connaissances distribuées telles que le *web sémantique*. +4. **Logique** : initialement proposée par Aristote comme un moyen de représenter les connaissances humaines universelles. + - La logique des prédicats, en tant que théorie mathématique, est trop riche pour être calculable. Par conséquent, un sous-ensemble est généralement utilisé, comme les clauses de Horn utilisées dans Prolog. + - La logique descriptive est une famille de systèmes logiques utilisés pour représenter et raisonner sur des hiérarchies d'objets et des représentations de connaissances distribuées comme le *web sémantique*. -## Systèmes Experts +## Systèmes experts -Un des premiers succès de l'IA symbolique a été les **systèmes experts** - des systèmes informatiques conçus pour agir en tant qu'experts dans un domaine problématique limité. Ils étaient basés sur une **base de connaissances** extraite d'un ou plusieurs experts humains, et contenaient un **moteur d'inférence** qui effectuait un certain raisonnement. +Un des premiers succès de l'IA symbolique a été les **systèmes experts** - des systèmes informatiques conçus pour agir comme un expert dans un domaine problématique limité. Ils étaient basés sur une **base de connaissances** extraite d'un ou plusieurs experts humains, et contenaient un **moteur d'inférence** qui effectuait un raisonnement à partir de celle-ci. -![Architecture Humaine](../../../../translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.fr.png) | ![Système Basé sur les Connaissances](../../../../translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.fr.png) +![Architecture humaine](../../../../translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.fr.png) | ![Système basé sur les connaissances](../../../../translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.fr.png) ---------------------------------------------|------------------------------------------------ -Structure simplifiée d'un système neural humain | Architecture d'un système basé sur les connaissances +Structure simplifiée du système neural humain | Architecture d'un système basé sur les connaissances Les systèmes experts sont construits comme le système de raisonnement humain, qui contient une **mémoire à court terme** et une **mémoire à long terme**. De même, dans les systèmes basés sur les connaissances, nous distinguons les composants suivants : -* **Mémoire de problème** : contient les connaissances sur le problème actuellement résolu, c'est-à-dire la température ou la pression artérielle d'un patient, s'il a une inflammation ou non, etc. Cette connaissance est également appelée **connaissance statique**, car elle contient un instantané de ce que nous savons actuellement sur le problème - l'état du *problème*. -* **Base de connaissances** : représente la connaissance à long terme sur un domaine problématique. Elle est extraite manuellement d'experts humains et ne change pas d'une consultation à l'autre. Parce qu'elle nous permet de naviguer d'un état de problème à un autre, elle est également appelée **connaissance dynamique**. -* **Moteur d'inférence** : orchestre tout le processus de recherche dans l'espace des états de problème, posant des questions à l'utilisateur si nécessaire. Il est également responsable de la recherche des bonnes règles à appliquer à chaque état. +* **Mémoire du problème** : contient les connaissances sur le problème en cours de résolution, par exemple la température ou la pression artérielle d'un patient, s'il a une inflammation ou non, etc. Ces connaissances sont également appelées **connaissances statiques**, car elles contiennent un instantané de ce que nous savons actuellement sur le problème - l'état du problème. +* **Base de connaissances** : représente les connaissances à long terme sur un domaine problématique. Elle est extraite manuellement des experts humains et ne change pas d'une consultation à l'autre. Comme elle permet de naviguer d'un état du problème à un autre, elle est également appelée **connaissances dynamiques**. +* **Moteur d'inférence** : orchestre tout le processus de recherche dans l'espace des états du problème, pose des questions à l'utilisateur si nécessaire. Il est également responsable de trouver les bonnes règles à appliquer à chaque état. -Prenons un exemple avec le système expert suivant pour déterminer un animal basé sur ses caractéristiques physiques : +À titre d'exemple, considérons le système expert suivant pour déterminer un animal en fonction de ses caractéristiques physiques : ![Arbre AND-OR](../../../../translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.fr.png) > Image par [Dmitry Soshnikov](http://soshnikov.com) -Ce diagramme est appelé un **arbre AND-OR**, et il s'agit d'une représentation graphique d'un ensemble de règles de production. Dessiner un arbre est utile au début de l'extraction des connaissances de l'expert. Pour représenter les connaissances à l'intérieur de l'ordinateur, il est plus pratique d'utiliser des règles : +Ce diagramme est appelé un **arbre AND-OR**, et il s'agit d'une représentation graphique d'un ensemble de règles de production. Dessiner un arbre est utile au début de l'extraction des connaissances de l'expert. Pour représenter les connaissances dans l'ordinateur, il est plus pratique d'utiliser des règles : ``` IF the animal eats meat @@ -112,59 +119,57 @@ OR (animal has sharp teeth THEN the animal is a carnivore ``` -Vous pouvez remarquer que chaque condition du côté gauche de la règle et l'action sont essentiellement des triplets objet-attribut-valeur (OAV). **La mémoire de travail** contient l'ensemble des triplets OAV qui correspondent au problème actuellement résolu. Un **moteur de règles** recherche les règles pour lesquelles une condition est satisfaite et les applique, ajoutant un autre triplet à la mémoire de travail. +Vous pouvez remarquer que chaque condition sur le côté gauche de la règle et l'action sont essentiellement des triplets objet-attribut-valeur (OAV). La **mémoire de travail** contient l'ensemble des triplets OAV correspondant au problème en cours de résolution. Un **moteur de règles** recherche les règles dont la condition est satisfaite et les applique, ajoutant un autre triplet à la mémoire de travail. -> ✅ Écrivez votre propre arbre AND-OR sur un sujet qui vous plaît ! +> ✅ Dessinez votre propre arbre AND-OR sur un sujet qui vous intéresse ! -### Inférence Avancée vs. Inférence Rétrograde +### Inférence avant vs. arrière -Le processus décrit ci-dessus est appelé **inférence avancée**. Il commence avec certaines données initiales sur le problème disponibles dans la mémoire de travail, puis exécute la boucle de raisonnement suivante : +Le processus décrit ci-dessus est appelé **inférence avant**. Il commence avec des données initiales sur le problème disponibles dans la mémoire de travail, puis exécute la boucle de raisonnement suivante : -1. Si l'attribut cible est présent dans la mémoire de travail - arrêtez et donnez le résultat -2. Recherchez toutes les règles dont la condition est actuellement satisfaite - obtenez l'**ensemble de conflits** des règles. -3. Effectuez la **résolution de conflits** - sélectionnez une règle qui sera exécutée à cette étape. Il pourrait y avoir différentes stratégies de résolution de conflits : - - Sélectionnez la première règle applicable dans la base de connaissances - - Sélectionnez une règle aléatoire - - Sélectionnez une règle *plus spécifique*, c'est-à-dire celle répondant à la plupart des conditions dans le "côté gauche" (LHS) -4. Appliquez la règle sélectionnée et insérez un nouveau morceau de connaissance dans l'état du problème +1. Si l'attribut cible est présent dans la mémoire de travail - arrêtez et donnez le résultat. +2. Recherchez toutes les règles dont la condition est actuellement satisfaite - obtenez l'**ensemble de conflit** des règles. +3. Effectuez une **résolution de conflit** - sélectionnez une règle qui sera exécutée à cette étape. Il peut y avoir différentes stratégies de résolution de conflit : + - Sélectionnez la première règle applicable dans la base de connaissances. + - Sélectionnez une règle au hasard. + - Sélectionnez une règle *plus spécifique*, c'est-à-dire celle qui satisfait le plus de conditions dans le côté gauche (LHS). +4. Appliquez la règle sélectionnée et insérez une nouvelle connaissance dans l'état du problème. 5. Répétez à partir de l'étape 1. -Cependant, dans certains cas, nous pourrions vouloir commencer avec une connaissance vide sur le problème et poser des questions qui nous aideront à arriver à une conclusion. Par exemple, lors d'un diagnostic médical, nous ne réalisons généralement pas toutes les analyses médicales à l'avance avant de commencer à diagnostiquer le patient. Nous préférons effectuer des analyses lorsqu'une décision doit être prise. +Cependant, dans certains cas, nous pourrions vouloir commencer avec une connaissance vide du problème et poser des questions qui nous aideront à arriver à une conclusion. Par exemple, lors d'un diagnostic médical, nous ne réalisons généralement pas toutes les analyses médicales à l'avance avant de commencer à diagnostiquer le patient. Nous préférons effectuer des analyses lorsqu'une décision doit être prise. -Ce processus peut être modélisé en utilisant **l'inférence rétrograde**. Il est guidé par l'**objectif** - la valeur de l'attribut que nous cherchons à trouver : +Ce processus peut être modélisé en utilisant l'**inférence arrière**. Elle est guidée par le **but** - la valeur de l'attribut que nous cherchons à trouver : -1. Sélectionnez toutes les règles qui peuvent nous donner la valeur d'un objectif (c'est-à-dire avec l'objectif sur le RHS ("côté droit")) - un ensemble de conflits -1. S'il n'y a pas de règles pour cet attribut, ou s'il y a une règle disant que nous devons demander la valeur à l'utilisateur - demandez-la, sinon : -1. Utilisez la stratégie de résolution de conflits pour sélectionner une règle que nous utiliserons comme *hypothèse* - nous allons essayer de la prouver -1. Répétez le processus de manière récurrente pour tous les attributs dans le LHS de la règle, essayant de les prouver comme objectifs +1. Sélectionnez toutes les règles qui peuvent nous donner la valeur d'un but (c'est-à-dire avec le but sur le côté droit (RHS)) - un ensemble de conflit. +1. S'il n'y a pas de règles pour cet attribut, ou s'il existe une règle disant que nous devrions demander la valeur à l'utilisateur - demandez-la, sinon : +1. Utilisez une stratégie de résolution de conflit pour sélectionner une règle que nous utiliserons comme *hypothèse* - nous essaierons de la prouver. +1. Répétez de manière récurrente le processus pour tous les attributs dans le LHS de la règle, en essayant de les prouver comme des buts. 1. Si à un moment donné le processus échoue - utilisez une autre règle à l'étape 3. -> ✅ Dans quelles situations l'inférence avancée est-elle plus appropriée ? Qu'en est-il de l'inférence rétrograde ? +> ✅ Dans quelles situations l'inférence avant est-elle plus appropriée ? Et l'inférence arrière ? -### Mise en œuvre des Systèmes Experts +### Implémentation des systèmes experts -Les systèmes experts peuvent être mis en œuvre en utilisant différents outils : +Les systèmes experts peuvent être implémentés en utilisant différents outils : -* Les programmer directement dans un langage de programmation de haut niveau. Ce n'est pas la meilleure idée, car l'avantage principal d'un système basé sur les connaissances est que la connaissance est séparée de l'inférence, et qu'un expert du domaine problématique devrait potentiellement être capable d'écrire des règles sans comprendre les détails du processus d'inférence. -* Utiliser une **interface de systèmes experts**, c'est-à-dire un système spécifiquement conçu pour être peuplé de connaissances en utilisant un langage de représentation des connaissances. +* Les programmer directement dans un langage de programmation de haut niveau. Ce n'est pas la meilleure idée, car l'avantage principal d'un système basé sur les connaissances est que les connaissances sont séparées de l'inférence, et qu'un expert du domaine problématique devrait potentiellement pouvoir écrire des règles sans comprendre les détails du processus d'inférence. +* Utiliser un **shell de système expert**, c'est-à-dire un système spécifiquement conçu pour être alimenté par des connaissances en utilisant un langage de représentation des connaissances. -## ✍️ Exercice : Inférence Animale +## ✍️ Exercice : Inférence animale -Consultez [Animals.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) pour un exemple de mise en œuvre d'un système expert d'inférence avancée et rétrograde. +Consultez [Animals.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) pour un exemple d'implémentation d'un système expert avec inférence avant et arrière. +> **Remarque** : Cet exemple est assez simple et donne seulement une idée de l'apparence d'un système expert. Une fois que vous commencez à créer un tel système, vous ne remarquerez un comportement *intelligent* qu'après avoir atteint un certain nombre de règles, environ 200 ou plus. À un moment donné, les règles deviennent trop complexes pour toutes les garder en tête, et c'est à ce moment-là que vous pourriez commencer à vous demander pourquoi le système prend certaines décisions. Cependant, une caractéristique importante des systèmes basés sur la connaissance est que vous pouvez toujours *expliquer* exactement comment chacune des décisions a été prise. +## Ontologies et le Web sémantique -> **Remarque** : Cet exemple est assez simple et ne donne qu'une idée de ce à quoi ressemble un système expert. Une fois que vous commencez à créer un tel système, vous ne remarquerez un comportement *intelligent* que lorsque vous atteindrez un certain nombre de règles, autour de 200+. À un moment donné, les règles deviennent trop complexes pour que vous puissiez toutes les garder en tête, et à ce stade, vous pourriez commencer à vous demander pourquoi un système prend certaines décisions. Cependant, la caractéristique importante des systèmes basés sur les connaissances est que vous pouvez toujours *expliquer* exactement comment l'une des décisions a été prise. +À la fin du 20ᵉ siècle, une initiative a vu le jour pour utiliser la représentation des connaissances afin d'annoter les ressources Internet, permettant ainsi de trouver des ressources correspondant à des requêtes très spécifiques. Ce mouvement a été appelé **Web sémantique**, et il repose sur plusieurs concepts : -## Ontologies et le Web Sémantique - -À la fin du 20ème siècle, il y avait une initiative pour utiliser la représentation des connaissances pour annoter les ressources Internet, afin qu'il soit possible de trouver des ressources correspondant à des requêtes très spécifiques. Ce mouvement a été appelé **Web Sémantique**, et il reposait sur plusieurs concepts : - -- Une représentation des connaissances spéciale basée sur les **[logiques de description](https://en.wikipedia.org/wiki/Description_logic)** (DL). Elle est similaire à la représentation de connaissances de cadre, car elle construit une hiérarchie d'objets avec des propriétés, mais elle a une sémantique logique formelle et une inférence. Il existe toute une famille de DL qui équilibrent expressivité et complexité algorithmique de l'inférence. -- Représentation des connaissances distribuées, où tous les concepts sont représentés par un identifiant URI global, ce qui permet de créer des hiérarchies de connaissances qui s'étendent sur Internet. +- Une représentation des connaissances particulière basée sur les **[logiques de description](https://en.wikipedia.org/wiki/Description_logic)** (DL). Elle est similaire à la représentation des connaissances par cadres, car elle construit une hiérarchie d'objets avec des propriétés, mais elle possède une sémantique logique formelle et des capacités d'inférence. Il existe toute une famille de DLs qui équilibrent expressivité et complexité algorithmique de l'inférence. +- Une représentation des connaissances distribuée, où tous les concepts sont représentés par un identifiant URI global, rendant possible la création de hiérarchies de connaissances couvrant l'ensemble d'Internet. - Une famille de langages basés sur XML pour la description des connaissances : RDF (Resource Description Framework), RDFS (RDF Schema), OWL (Ontology Web Language). -Un concept central dans le Web Sémantique est celui de **l'Ontologie**. Il fait référence à une spécification explicite d'un domaine problématique utilisant une certaine représentation formelle des connaissances. L'ontologie la plus simple peut être juste une hiérarchie d'objets dans un domaine problématique, mais des ontologies plus complexes incluront des règles qui peuvent être utilisées pour l'inférence. +Un concept central du Web sémantique est celui d'**ontologie**. Cela fait référence à une spécification explicite d'un domaine problématique en utilisant une représentation formelle des connaissances. L'ontologie la plus simple peut être une simple hiérarchie d'objets dans un domaine donné, mais des ontologies plus complexes incluront des règles pouvant être utilisées pour l'inférence. -Dans le web sémantique, toutes les représentations sont basées sur des triplets. Chaque objet et chaque relation sont identifiés de manière unique par l'URI. Par exemple, si nous voulons indiquer le fait que ce curriculum IA a été développé par Dmitry Soshnikov le 1er janvier 2022 - voici les triplets que nous pouvons utiliser : +Dans le Web sémantique, toutes les représentations sont basées sur des triplets. Chaque objet et chaque relation sont identifiés de manière unique par un URI. Par exemple, si nous voulons indiquer que ce programme d'IA a été développé par Dmitry Soshnikov le 1er janvier 2022, voici les triplets que nous pouvons utiliser : @@ -173,7 +178,7 @@ http://github.com/microsoft/ai-for-beginners http://www.example.com/terms/creati http://github.com/microsoft/ai-for-beginners http://purl.org/dc/elements/1.1/creator http://soshnikov.com ``` -> ✅ Ici `http://www.example.com/terms/creation-date` and `http://purl.org/dc/elements/1.1/creator` sont des URI bien connues et universellement acceptées pour exprimer les concepts de *créateur* et de *date de création*. +> ✅ Ici, `http://www.example.com/terms/creation-date` et `http://purl.org/dc/elements/1.1/creator` sont des URIs bien connus et universellement acceptés pour exprimer les concepts de *créateur* et de *date de création*. Dans un cas plus complexe, si nous voulons définir une liste de créateurs, nous pouvons utiliser certaines structures de données définies dans RDF. @@ -181,9 +186,9 @@ Dans un cas plus complexe, si nous voulons définir une liste de créateurs, nou > Diagrammes ci-dessus par [Dmitry Soshnikov](http://soshnikov.com) -Les progrès dans la construction du Web Sémantique ont été quelque peu ralentis par le succès des moteurs de recherche et des techniques de traitement du langage naturel, qui permettent d'extraire des données structurées à partir de textes. Cependant, dans certains domaines, il y a encore des efforts significatifs pour maintenir des ontologies et des bases de connaissances. Quelques projets notables : +Le développement du Web sémantique a été quelque peu freiné par le succès des moteurs de recherche et des techniques de traitement du langage naturel, qui permettent d'extraire des données structurées à partir de textes. Cependant, dans certains domaines, des efforts significatifs sont encore déployés pour maintenir des ontologies et des bases de connaissances. Voici quelques projets notables : -* [WikiData](https://wikidata.org/) est une collection de bases de connaissances lisibles par machine associées à Wikipedia. La plupart des données sont extraites des *InfoBoxes* de Wikipedia, des morceaux de contenu structuré à l'intérieur des pages Wikipedia. Vous pouvez [interroger](https://query.wikidata.org/) wikidata en SPARQL, un langage de requête spécial pour le Web Sémantique. Voici une requête d'exemple qui affiche les couleurs d'yeux les plus populaires chez les humains : +* [WikiData](https://wikidata.org/) est une collection de bases de connaissances lisibles par machine associées à Wikipédia. La plupart des données sont extraites des *InfoBoxes* de Wikipédia, des morceaux de contenu structuré présents dans les pages Wikipédia. Vous pouvez [interroger](https://query.wikidata.org/) WikiData en SPARQL, un langage de requête spécifique au Web sémantique. Voici un exemple de requête affichant les couleurs d'yeux les plus populaires chez les humains : ```sparql #defaultView:BubbleChart @@ -197,9 +202,47 @@ WHERE GROUP BY ?eyeColorLabel ``` -* [DBpedia](https://www.dbpedia.org/) est un autre effort similaire à WikiData. +* [DBpedia](https://www.dbpedia.org/) est un autre projet similaire à WikiData. -> ✅ Si vous souhaitez expérimenter la création de vos propres ontologies, ou ouvrir des ontologies existantes, il existe un +> ✅ Si vous souhaitez expérimenter avec la création de vos propres ontologies ou explorer des ontologies existantes, il existe un excellent éditeur visuel d'ontologies appelé [Protégé](https://protege.stanford.edu/). Téléchargez-le ou utilisez-le en ligne. + + + +*Éditeur Web Protégé ouvert avec l'ontologie de la famille Romanov. Capture d'écran par Dmitry Soshnikov* + +## ✍️ Exercice : Une ontologie familiale + +Consultez [FamilyOntology.ipynb](https://github.com/Ezana135/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) pour un exemple d'utilisation des techniques du Web sémantique afin de raisonner sur les relations familiales. Nous prendrons un arbre généalogique représenté au format GEDCOM courant et une ontologie des relations familiales pour construire un graphe de toutes les relations familiales pour un ensemble donné d'individus. + +## Microsoft Concept Graph + +Dans la plupart des cas, les ontologies sont soigneusement créées à la main. Cependant, il est également possible de **miner** des ontologies à partir de données non structurées, par exemple à partir de textes en langage naturel. + +Une tentative en ce sens a été réalisée par Microsoft Research, et a donné lieu au [Microsoft Concept Graph](https://blogs.microsoft.com/ai/microsoft-researchers-release-graph-that-helps-machines-conceptualize/?WT.mc_id=academic-77998-cacaste). + +Il s'agit d'une vaste collection d'entités regroupées à l'aide de la relation d'héritage `is-a`. Cela permet de répondre à des questions comme "Qu'est-ce que Microsoft ?" - la réponse étant quelque chose comme "une entreprise avec une probabilité de 0,87, et une marque avec une probabilité de 0,75". + +Le Graph est disponible soit via une API REST, soit sous forme d'un grand fichier texte téléchargeable listant toutes les paires d'entités. + +## ✍️ Exercice : Un graphe de concepts + +Essayez le notebook [MSConceptGraph.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) pour voir comment nous pouvons utiliser le Microsoft Concept Graph pour regrouper des articles d'actualité en plusieurs catégories. + +## Conclusion + +De nos jours, l'IA est souvent considérée comme un synonyme de *Machine Learning* ou de *réseaux neuronaux*. Cependant, un être humain fait également preuve de raisonnement explicite, ce qui est quelque chose que les réseaux neuronaux ne gèrent pas encore. Dans les projets du monde réel, le raisonnement explicite est toujours utilisé pour effectuer des tâches nécessitant des explications ou la capacité de modifier le comportement du système de manière contrôlée. + +## 🚀 Défi + +Dans le notebook Family Ontology associé à cette leçon, il y a une opportunité d'expérimenter avec d'autres relations familiales. Essayez de découvrir de nouvelles connexions entre les personnes de l'arbre généalogique. + +## [Quiz post-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/202) + +## Révision et auto-apprentissage + +Faites des recherches sur Internet pour découvrir des domaines où les humains ont tenté de quantifier et de codifier les connaissances. Jetez un œil à la taxonomie de Bloom, et remontez dans l'histoire pour apprendre comment les humains ont essayé de comprendre leur monde. Explorez le travail de Linné pour créer une taxonomie des organismes, et observez la manière dont Dmitri Mendeleïev a créé un système pour décrire et regrouper les éléments chimiques. Quels autres exemples intéressants pouvez-vous trouver ? + +**Devoir** : [Construire une ontologie](assignment.md) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/2-Symbolic/assignment.md b/translations/fr/lessons/2-Symbolic/assignment.md index 38e3883b..d83ce15e 100644 --- a/translations/fr/lessons/2-Symbolic/assignment.md +++ b/translations/fr/lessons/2-Symbolic/assignment.md @@ -1,6 +1,15 @@ + # Construire une Ontologie -Construire une base de connaissances consiste à catégoriser un modèle représentant des faits sur un sujet. Choisissez un sujet - comme une personne, un lieu ou une chose - puis construisez un modèle de ce sujet. Utilisez certaines des techniques et des stratégies de construction de modèles décrites dans cette leçon. Un exemple serait de créer une ontologie d'un salon avec des meubles, des lumières, etc. En quoi le salon diffère-t-il de la cuisine ? De la salle de bain ? Comment savez-vous que c'est un salon et non une salle à manger ? Utilisez [Protégé](https://protege.stanford.edu/) pour construire votre ontologie. +Construire une base de connaissances consiste à catégoriser un modèle représentant des faits sur un sujet. Choisissez un sujet - comme une personne, un lieu ou un objet - puis construisez un modèle de ce sujet. Utilisez certaines des techniques et stratégies de construction de modèles décrites dans cette leçon. Un exemple serait de créer une ontologie d'un salon avec des meubles, des lumières, etc. En quoi le salon diffère-t-il de la cuisine ? De la salle de bain ? Comment savez-vous que c'est un salon et non une salle à manger ? Utilisez [Protégé](https://protege.stanford.edu/) pour construire votre ontologie. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/3-NeuralNetworks/03-Perceptron/README.md b/translations/fr/lessons/3-NeuralNetworks/03-Perceptron/README.md index 8bf9a6b4..6615a896 100644 --- a/translations/fr/lessons/3-NeuralNetworks/03-Perceptron/README.md +++ b/translations/fr/lessons/3-NeuralNetworks/03-Perceptron/README.md @@ -1,48 +1,57 @@ -# Introduction aux Réseaux de Neurones : Perceptron + +# Introduction aux réseaux neuronaux : Perceptron -## [Quiz pré-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/103) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/103) -L'une des premières tentatives d'implémenter quelque chose de similaire à un réseau de neurones moderne a été réalisée par Frank Rosenblatt du Cornell Aeronautical Laboratory en 1957. C'était une implémentation matérielle appelée "Mark-1", conçue pour reconnaître des figures géométriques primitives, telles que des triangles, des carrés et des cercles. +L'une des premières tentatives pour mettre en œuvre quelque chose de similaire à un réseau neuronal moderne a été réalisée par Frank Rosenblatt du Cornell Aeronautical Laboratory en 1957. Il s'agissait d'une implémentation matérielle appelée "Mark-1", conçue pour reconnaître des figures géométriques primitives, telles que des triangles, des carrés et des cercles. | | | |--------------|-----------| |Frank Rosenblatt | Le Perceptron Mark 1| -> Images [de Wikipedia](https://en.wikipedia.org/wiki/Perceptron) +> Images [de Wikipédia](https://en.wikipedia.org/wiki/Perceptron) -Une image d'entrée était représentée par un réseau de photocellules de 20x20, donc le réseau de neurones avait 400 entrées et une sortie binaire. Un réseau simple contenait un neurone, également appelé **unité de logique à seuil**. Les poids du réseau de neurones agissaient comme des potentiomètres nécessitant un réglage manuel pendant la phase d'entraînement. +Une image d'entrée était représentée par une matrice de 20x20 photorésistances, de sorte que le réseau neuronal avait 400 entrées et une sortie binaire. Un réseau simple contenait un seul neurone, également appelé une **unité logique seuil**. Les poids du réseau neuronal fonctionnaient comme des potentiomètres nécessitant un ajustement manuel pendant la phase d'entraînement. > ✅ Un potentiomètre est un dispositif qui permet à l'utilisateur d'ajuster la résistance d'un circuit. -> Le New York Times écrivait à l'époque à propos du perceptron : *l'embryon d'un ordinateur électronique que [la Marine] espère capable de marcher, parler, voir, écrire, se reproduire et être conscient de son existence.* +> Le New York Times écrivait à propos du perceptron à l'époque : *l'embryon d'un ordinateur électronique que [la Marine] espère capable de marcher, parler, voir, écrire, se reproduire et être conscient de son existence.* ## Modèle de Perceptron -Supposons que nous ayons N caractéristiques dans notre modèle, auquel cas le vecteur d'entrée serait un vecteur de taille N. Un perceptron est un modèle de **classification binaire**, c'est-à-dire qu'il peut distinguer entre deux classes de données d'entrée. Nous allons supposer que pour chaque vecteur d'entrée x, la sortie de notre perceptron serait soit +1 soit -1, selon la classe. La sortie sera calculée en utilisant la formule : +Supposons que nous ayons N caractéristiques dans notre modèle, auquel cas le vecteur d'entrée serait un vecteur de taille N. Un perceptron est un modèle de **classification binaire**, c'est-à-dire qu'il peut distinguer entre deux classes de données d'entrée. Nous supposerons que pour chaque vecteur d'entrée x, la sortie de notre perceptron sera soit +1, soit -1, selon la classe. La sortie sera calculée à l'aide de la formule : y(x) = f(wTx) -où f est une fonction d'activation par seuil. +où f est une fonction d'activation en escalier. ## Entraînement du Perceptron -Pour entraîner un perceptron, nous devons trouver un vecteur de poids w qui classe la plupart des valeurs correctement, c'est-à-dire qui entraîne la plus petite **erreur**. Cette erreur E est définie par le **critère du perceptron** de la manière suivante : +Pour entraîner un perceptron, nous devons trouver un vecteur de poids w qui classe correctement la plupart des valeurs, c'est-à-dire qui minimise l'**erreur**. Cette erreur E est définie par le **critère du perceptron** de la manière suivante : E(w) = -∑wTxiti où : -* la somme est effectuée sur les points de données d'entraînement i qui entraînent une classification incorrecte -* xi est les données d'entrée, et ti est soit -1 soit +1 pour les exemples négatifs et positifs respectivement. +* la somme est effectuée sur les points de données d'entraînement i qui entraînent une mauvaise classification, +* xi est la donnée d'entrée, et ti est soit -1, soit +1 pour les exemples négatifs et positifs respectivement. Ce critère est considéré comme une fonction des poids w, et nous devons le minimiser. Souvent, une méthode appelée **descente de gradient** est utilisée, dans laquelle nous commençons avec des poids initiaux w(0), puis à chaque étape, nous mettons à jour les poids selon la formule : w(t+1) = w(t) - η∇E(w) -Ici, η est le soi-disant **taux d'apprentissage**, et ∇E(w) désigne le **gradient** de E. Après avoir calculé le gradient, nous obtenons +Ici, η est le **taux d'apprentissage**, et ∇E(w) désigne le **gradient** de E. Après avoir calculé le gradient, nous obtenons : w(t+1) = w(t) + ∑ηxiti @@ -70,27 +79,26 @@ def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): ## Conclusion -Dans cette leçon, vous avez appris ce qu'est un perceptron, qui est un modèle de classification binaire, et comment l'entraîner en utilisant un vecteur de poids. +Dans cette leçon, vous avez appris ce qu'est un perceptron, un modèle de classification binaire, et comment l'entraîner en utilisant un vecteur de poids. ## 🚀 Défi Si vous souhaitez essayer de construire votre propre perceptron, essayez [ce laboratoire sur Microsoft Learn](https://docs.microsoft.com/en-us/azure/machine-learning/component-reference/two-class-averaged-perceptron?WT.mc_id=academic-77998-cacaste) qui utilise le [concepteur Azure ML](https://docs.microsoft.com/en-us/azure/machine-learning/concept-designer?WT.mc_id=academic-77998-cacaste). -## [Quiz post-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/203) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/203) -## Révision & Auto-apprentissage +## Révision et auto-apprentissage -Pour voir comment nous pouvons utiliser le perceptron pour résoudre un problème théorique ainsi que des problèmes réels, et pour continuer à apprendre - allez au cahier [Perceptron](../../../../../lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb). +Pour voir comment nous pouvons utiliser un perceptron pour résoudre un problème simple ainsi que des problèmes réels, et pour continuer à apprendre, rendez-vous sur le notebook [Perceptron](../../../../../lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb). -Voici un article intéressant [sur les perceptrons](https://towardsdatascience.com/what-is-a-perceptron-basics-of-neural-networks-c4cfea20c590 -) également. +Voici également un [article intéressant sur les perceptrons](https://towardsdatascience.com/what-is-a-perceptron-basics-of-neural-networks-c4cfea20c590). ## [Devoir](lab/README.md) -Dans cette leçon, nous avons implémenté un perceptron pour une tâche de classification binaire, et nous l'avons utilisé pour classifier deux chiffres manuscrits. Dans ce laboratoire, vous êtes invité à résoudre complètement le problème de classification des chiffres, c'est-à-dire à déterminer quel chiffre est le plus susceptible de correspondre à une image donnée. +Dans cette leçon, nous avons implémenté un perceptron pour une tâche de classification binaire, et nous l'avons utilisé pour classifier entre deux chiffres manuscrits. Dans ce laboratoire, vous êtes invité à résoudre entièrement le problème de classification des chiffres, c'est-à-dire déterminer quel chiffre correspond le plus probablement à une image donnée. * [Instructions](lab/README.md) -* [Cahier](../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) +* [Notebook](../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md b/translations/fr/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md index c691d5c2..59cf4a6e 100644 --- a/translations/fr/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md +++ b/translations/fr/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md @@ -1,22 +1,31 @@ -# Classification Multi-Classe avec Perceptron + +# Classification multi-classes avec Perceptron -Devoir du [Curriculum AI pour Débutants](https://github.com/microsoft/ai-for-beginners). +Travail pratique issu du [Curriculum AI pour Débutants](https://github.com/microsoft/ai-for-beginners). ## Tâche -En utilisant le code que nous avons développé dans cette leçon pour la classification binaire des chiffres manuscrits MNIST, créez un classificateur multi-classe capable de reconnaître n'importe quel chiffre. Calculez la précision de classification sur les ensembles de données d'entraînement et de test, et imprimez la matrice de confusion. +En utilisant le code que nous avons développé dans cette leçon pour la classification binaire des chiffres manuscrits MNIST, créez un classificateur multi-classes capable de reconnaître n'importe quel chiffre. Calculez la précision de la classification sur les ensembles de données d'entraînement et de test, et affichez la matrice de confusion. -## Indices +## Conseils -1. Pour chaque chiffre, créez un ensemble de données pour le classificateur binaire "ce chiffre contre tous les autres chiffres" -1. Entraînez 10 perceptrons différents pour la classification binaire (un pour chaque chiffre) -1. Définissez une fonction qui classera un chiffre d'entrée +1. Pour chaque chiffre, créez un ensemble de données pour un classificateur binaire de "ce chiffre contre tous les autres". +1. Entraînez 10 perceptrons différents pour la classification binaire (un pour chaque chiffre). +1. Définissez une fonction qui classera un chiffre donné en entrée. -> **Indice** : Si nous combinons les poids des 10 perceptrons en une seule matrice, nous devrions être capables d'appliquer les 10 perceptrons aux chiffres d'entrée par une multiplication de matrices. Le chiffre le plus probable peut ensuite être trouvé simplement en appliquant l'opération `argmax` sur la sortie. +> **Conseil** : Si nous combinons les poids des 10 perceptrons dans une seule matrice, nous devrions pouvoir appliquer les 10 perceptrons aux chiffres en entrée par une seule multiplication matricielle. Le chiffre le plus probable peut ensuite être déterminé simplement en appliquant l'opération `argmax` sur le résultat. -## Notebook de Début +## Notebook de départ -Commencez le laboratoire en ouvrant [PerceptronMultiClass.ipynb](../../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) +Commencez le travail pratique en ouvrant [PerceptronMultiClass.ipynb](../../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/3-NeuralNetworks/04-OwnFramework/README.md b/translations/fr/lessons/3-NeuralNetworks/04-OwnFramework/README.md index 348a9b16..f0b63f31 100644 --- a/translations/fr/lessons/3-NeuralNetworks/04-OwnFramework/README.md +++ b/translations/fr/lessons/3-NeuralNetworks/04-OwnFramework/README.md @@ -1,89 +1,98 @@ -# Introduction aux Réseaux de Neurones. Perceptron Multi-Couches + +# Introduction aux réseaux neuronaux. Perceptron multicouche -Dans la section précédente, vous avez appris le modèle de réseau de neurones le plus simple - le perceptron à une couche, un modèle de classification linéaire à deux classes. +Dans la section précédente, vous avez découvert le modèle de réseau neuronal le plus simple : le perceptron à une couche, un modèle de classification linéaire à deux classes. -Dans cette section, nous allons étendre ce modèle dans un cadre plus flexible, nous permettant de : +Dans cette section, nous allons étendre ce modèle à un cadre plus flexible, nous permettant de : * effectuer une **classification multi-classes** en plus de la classification à deux classes * résoudre des **problèmes de régression** en plus de la classification * séparer des classes qui ne sont pas linéairement séparables -Nous allons également développer notre propre cadre modulaire en Python qui nous permettra de construire différentes architectures de réseaux de neurones. +Nous développerons également notre propre cadre modulaire en Python, qui nous permettra de construire différentes architectures de réseaux neuronaux. -## [Quiz pré-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/104) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/104) -## Formalisation de l'Apprentissage Automatique +## Formalisation de l'apprentissage automatique -Commençons par formaliser le problème de l'apprentissage automatique. Supposons que nous avons un ensemble de données d'entraînement **X** avec des étiquettes **Y**, et nous devons construire un modèle *f* qui fera les prédictions les plus précises. La qualité des prédictions est mesurée par la **fonction de perte** ℒ. Les fonctions de perte suivantes sont souvent utilisées : +Commençons par formaliser le problème de l'apprentissage automatique. Supposons que nous disposons d'un ensemble de données d'entraînement **X** avec des étiquettes **Y**, et que nous devons construire un modèle *f* qui fera des prédictions les plus précises possibles. La qualité des prédictions est mesurée par une **fonction de perte** ℒ. Les fonctions de perte suivantes sont souvent utilisées : -* Pour le problème de régression, lorsque nous devons prédire un nombre, nous pouvons utiliser l'**erreur absolue** ∑i|f(x(i))-y(i)|, ou l'**erreur quadratique** ∑i(f(x(i))-y(i))2 -* Pour la classification, nous utilisons la **perte 0-1** (qui est essentiellement la même que l'**exactitude** du modèle), ou la **perte logistique**. +* Pour un problème de régression, lorsque nous devons prédire un nombre, nous pouvons utiliser **l'erreur absolue** ∑i|f(x(i))-y(i)|, ou **l'erreur quadratique** ∑i(f(x(i))-y(i))2 +* Pour la classification, nous utilisons la **perte 0-1** (qui est essentiellement la même chose que **l'exactitude** du modèle), ou la **perte logistique**. -Pour le perceptron à une couche, la fonction *f* était définie comme une fonction linéaire *f(x)=wx+b* (ici *w* est la matrice de poids, *x* est le vecteur des caractéristiques d'entrée, et *b* est le vecteur de biais). Pour différentes architectures de réseaux de neurones, cette fonction peut prendre une forme plus complexe. +Pour un perceptron à une couche, la fonction *f* était définie comme une fonction linéaire *f(x)=wx+b* (ici *w* est la matrice de poids, *x* est le vecteur des caractéristiques d'entrée, et *b* est le vecteur de biais). Pour différentes architectures de réseaux neuronaux, cette fonction peut prendre une forme plus complexe. -> Dans le cas de la classification, il est souvent souhaitable d'obtenir des probabilités des classes correspondantes comme sortie du réseau. Pour convertir des nombres arbitraires en probabilités (par exemple, pour normaliser la sortie), nous utilisons souvent la fonction **softmax** σ, et la fonction *f* devient *f(x)=σ(wx+b)* +> Dans le cas de la classification, il est souvent souhaitable d'obtenir des probabilités des classes correspondantes en sortie du réseau. Pour convertir des nombres arbitraires en probabilités (par exemple, pour normaliser la sortie), nous utilisons souvent la fonction **softmax** σ, et la fonction *f* devient *f(x)=σ(wx+b)*. -Dans la définition de *f* ci-dessus, *w* et *b* sont appelés **paramètres** θ=⟨*w,b*⟩. Étant donné l'ensemble de données ⟨**X**,**Y**⟩, nous pouvons calculer une erreur globale sur l'ensemble de données entier en fonction des paramètres θ. +Dans la définition de *f* ci-dessus, *w* et *b* sont appelés **paramètres** θ=⟨*w,b*⟩. Étant donné l'ensemble de données ⟨**X**,**Y**⟩, nous pouvons calculer une erreur globale sur l'ensemble des données en fonction des paramètres θ. -> ✅ **L'objectif de l'entraînement du réseau de neurones est de minimiser l'erreur en faisant varier les paramètres θ** +> ✅ **L'objectif de l'entraînement d'un réseau neuronal est de minimiser l'erreur en faisant varier les paramètres θ** -## Optimisation par Descente de Gradient +## Optimisation par descente de gradient -Il existe une méthode bien connue d'optimisation de fonction appelée **descente de gradient**. L'idée est que nous pouvons calculer une dérivée (dans le cas multidimensionnel appelée **gradient**) de la fonction de perte par rapport aux paramètres, et faire varier les paramètres de manière à ce que l'erreur diminue. Cela peut être formalisé comme suit : +Il existe une méthode bien connue d'optimisation de fonction appelée **descente de gradient**. L'idée est que nous pouvons calculer une dérivée (dans le cas multidimensionnel appelée **gradient**) de la fonction de perte par rapport aux paramètres, et faire varier les paramètres de manière à réduire l'erreur. Cela peut être formalisé comme suit : -* Initialiser les paramètres par des valeurs aléatoires w(0), b(0) +* Initialiser les paramètres avec des valeurs aléatoires w(0), b(0) * Répéter l'étape suivante plusieurs fois : - w(i+1) = w(i)-η∂ℒ/∂w - b(i+1) = b(i)-η∂ℒ/∂b -Lors de l'entraînement, les étapes d'optimisation sont censées être calculées en tenant compte de l'ensemble de données entier (rappelez-vous que la perte est calculée comme une somme à travers tous les échantillons d'entraînement). Cependant, dans la vie réelle, nous prenons de petites portions de l'ensemble de données appelées **minibatchs**, et calculons les gradients en fonction d'un sous-ensemble de données. Comme le sous-ensemble est pris aléatoirement à chaque fois, cette méthode est appelée **descente de gradient stochastique** (SGD). +Pendant l'entraînement, les étapes d'optimisation sont censées être calculées en tenant compte de l'ensemble des données (rappelez-vous que la perte est calculée comme une somme sur tous les échantillons d'entraînement). Cependant, dans la pratique, nous prenons de petites portions de l'ensemble de données appelées **minibatches**, et calculons les gradients sur un sous-ensemble de données. Comme le sous-ensemble est choisi aléatoirement à chaque fois, cette méthode est appelée **descente de gradient stochastique** (SGD). -## Perceptrons Multi-Couches et Rétropropagation +## Perceptrons multicouches et rétropropagation -Le réseau à une couche, comme nous l'avons vu ci-dessus, est capable de classifier des classes linéairement séparables. Pour construire un modèle plus riche, nous pouvons combiner plusieurs couches du réseau. Mathématiquement, cela signifierait que la fonction *f* aurait une forme plus complexe et serait calculée en plusieurs étapes : +Un réseau à une couche, comme nous l'avons vu ci-dessus, est capable de classer des classes linéairement séparables. Pour construire un modèle plus riche, nous pouvons combiner plusieurs couches du réseau. Mathématiquement, cela signifie que la fonction *f* aurait une forme plus complexe et serait calculée en plusieurs étapes : * z1=w1x+b1 * z2=w2α(z1)+b2 * f = σ(z2) -Ici, α est une **fonction d'activation non linéaire**, σ est une fonction softmax, et les paramètres θ=<*w1,b1,w2,b2*. +Ici, α est une **fonction d'activation non linéaire**, σ est une fonction softmax, et les paramètres θ=<*w1,b1,w2,b2*>. -L'algorithme de descente de gradient resterait le même, mais il serait plus difficile de calculer les gradients. Étant donné la règle de différentiation en chaîne, nous pouvons calculer les dérivées comme suit : +L'algorithme de descente de gradient resterait le même, mais il serait plus difficile de calculer les gradients. En utilisant la règle de différenciation en chaîne, nous pouvons calculer les dérivées comme suit : * ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2) * ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1) -> ✅ La règle de différentiation en chaîne est utilisée pour calculer les dérivées de la fonction de perte par rapport aux paramètres. +> ✅ La règle de différenciation en chaîne est utilisée pour calculer les dérivées de la fonction de perte par rapport aux paramètres. -Notez que la partie la plus à gauche de toutes ces expressions est la même, et nous pouvons donc calculer efficacement les dérivées en partant de la fonction de perte et en allant "en arrière" à travers le graphe de calcul. Ainsi, la méthode d'entraînement d'un perceptron multi-couches est appelée **rétropropagation**, ou 'backprop'. +Notez que la partie la plus à gauche de toutes ces expressions est la même, et nous pouvons donc calculer efficacement les dérivées en commençant par la fonction de perte et en remontant "en arrière" à travers le graphe computationnel. Ainsi, la méthode d'entraînement d'un perceptron multicouche est appelée **rétropropagation**, ou 'backprop'. -graphe de calcul +compute graph > TODO : citation de l'image -> ✅ Nous couvrirons la rétropropagation en détail dans notre exemple de notebook. +> ✅ Nous couvrirons la rétropropagation en beaucoup plus de détails dans notre exemple de notebook. ## Conclusion -Dans cette leçon, nous avons construit notre propre bibliothèque de réseaux de neurones, et nous l'avons utilisée pour une tâche de classification simple en deux dimensions. +Dans cette leçon, nous avons construit notre propre bibliothèque de réseaux neuronaux, et nous l'avons utilisée pour une tâche de classification simple en deux dimensions. ## 🚀 Défi -Dans le notebook accompagnant, vous allez implémenter votre propre cadre pour construire et entraîner des perceptrons multi-couches. Vous pourrez voir en détail comment fonctionnent les réseaux de neurones modernes. +Dans le notebook associé, vous allez implémenter votre propre cadre pour construire et entraîner des perceptrons multicouches. Vous pourrez voir en détail comment fonctionnent les réseaux neuronaux modernes. -Procédez au notebook [OwnFramework](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) et travaillez à travers. +Passez au notebook [OwnFramework](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) et travaillez dessus. -## [Quiz post-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/204) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/204) -## Revue & Auto-étude +## Révision et auto-apprentissage -La rétropropagation est un algorithme courant utilisé en IA et en apprentissage automatique, il vaut la peine d'être étudié [plus en détail](https://wikipedia.org/wiki/Backpropagation) +La rétropropagation est un algorithme courant utilisé en IA et en apprentissage automatique, qui mérite d'être étudié [plus en détail](https://wikipedia.org/wiki/Backpropagation). ## [Devoir](lab/README.md) -Dans ce laboratoire, vous êtes invité à utiliser le cadre que vous avez construit dans cette leçon pour résoudre la classification de chiffres manuscrits MNIST. +Dans ce laboratoire, vous êtes invité à utiliser le cadre que vous avez construit dans cette leçon pour résoudre la classification des chiffres manuscrits MNIST. * [Instructions](lab/README.md) * [Notebook](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md b/translations/fr/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md index 6046d6ff..5289ca4e 100644 --- a/translations/fr/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md +++ b/translations/fr/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md @@ -1,23 +1,32 @@ + # Classification MNIST avec notre propre framework -Devoir de laboratoire du [Curriculum AI pour débutants](https://github.com/microsoft/ai-for-beginners). +Travail pratique issu du [Curriculum AI pour les débutants](https://github.com/microsoft/ai-for-beginners). ## Tâche -Résoudre le problème de classification des chiffres manuscrits MNIST en utilisant un perceptron à 1, 2 et 3 couches. Utilisez le framework de réseau de neurones que nous avons développé dans le cours. +Résolvez le problème de classification des chiffres manuscrits MNIST en utilisant un perceptron à 1, 2 et 3 couches. Utilisez le framework de réseau neuronal que nous avons développé dans la leçon. -## Ouverture du Notebook +## Notebook de départ -Commencez le laboratoire en ouvrant [MyFW_MNIST.ipynb](../../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb) +Commencez le travail pratique en ouvrant [MyFW_MNIST.ipynb](../../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb) ## Questions -À l'issue de ce laboratoire, essayez de répondre aux questions suivantes : +À l'issue de ce travail pratique, essayez de répondre aux questions suivantes : -- La fonction d'activation inter-couches affecte-t-elle les performances du réseau ? +- La fonction d'activation entre les couches influence-t-elle les performances du réseau ? - Avons-nous besoin d'un réseau à 2 ou 3 couches pour cette tâche ? -- Avez-vous rencontré des problèmes lors de l'entraînement du réseau ? Surtout à mesure que le nombre de couches augmentait. -- Comment les poids du réseau se comportent-ils pendant l'entraînement ? Vous pouvez tracer la valeur absolue maximale des poids par rapport aux époques pour comprendre la relation. +- Avez-vous rencontré des problèmes lors de l'entraînement du réseau ? En particulier lorsque le nombre de couches augmente. +- Comment se comportent les poids du réseau pendant l'entraînement ? Vous pouvez tracer la valeur absolue maximale des poids en fonction des époques pour comprendre la relation. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'atteindre l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/3-NeuralNetworks/05-Frameworks/README.md b/translations/fr/lessons/3-NeuralNetworks/05-Frameworks/README.md index d9ee59a1..9d9c4136 100644 --- a/translations/fr/lessons/3-NeuralNetworks/05-Frameworks/README.md +++ b/translations/fr/lessons/3-NeuralNetworks/05-Frameworks/README.md @@ -1,105 +1,114 @@ -# Cadres de Réseaux de Neurones + +# Frameworks de Réseaux de Neurones -Comme nous l'avons déjà appris, pour pouvoir entraîner des réseaux de neurones de manière efficace, nous devons faire deux choses : +Comme nous l'avons déjà appris, pour entraîner efficacement des réseaux de neurones, nous devons faire deux choses : -* Opérer sur des tenseurs, par exemple, multiplier, additionner et calculer certaines fonctions telles que sigmoid ou softmax -* Calculer les gradients de toutes les expressions, afin d'effectuer une optimisation par descente de gradient +* Travailler sur des tenseurs, par exemple pour multiplier, additionner et calculer certaines fonctions comme sigmoid ou softmax. +* Calculer les gradients de toutes les expressions, afin d'effectuer l'optimisation par descente de gradient. -## [Quiz pré-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/105) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/105) -Bien que la bibliothèque `numpy` puisse faire la première partie, nous avons besoin d'un mécanisme pour calculer les gradients. Dans [notre cadre](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) que nous avons développé dans la section précédente, nous devions programmer manuellement toutes les fonctions dérivées à l'intérieur de la méthode `backward`, qui effectue la rétropropagation. Idéalement, un cadre devrait nous donner la possibilité de calculer les gradients de *n'importe quelle expression* que nous pouvons définir. +Bien que la bibliothèque `numpy` puisse gérer la première partie, nous avons besoin d'un mécanisme pour calculer les gradients. Dans [notre framework](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) que nous avons développé dans la section précédente, nous avons dû programmer manuellement toutes les fonctions dérivées dans la méthode `backward`, qui effectue la rétropropagation. Idéalement, un framework devrait nous permettre de calculer les gradients de *n'importe quelle expression* que nous pouvons définir. -Une autre chose importante est de pouvoir effectuer des calculs sur GPU, ou sur toute autre unité de calcul spécialisée, comme [TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit). L'entraînement des réseaux de neurones profonds nécessite *beaucoup* de calculs, et pouvoir paralléliser ces calculs sur des GPU est très important. +Un autre point important est de pouvoir effectuer des calculs sur GPU, ou sur d'autres unités de calcul spécialisées, comme les [TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit). L'entraînement des réseaux de neurones profonds nécessite *beaucoup* de calculs, et il est crucial de pouvoir paralléliser ces calculs sur des GPUs. -> ✅ Le terme 'paralléliser' signifie distribuer les calculs sur plusieurs appareils. +> ✅ Le terme "paralléliser" signifie distribuer les calculs sur plusieurs dispositifs. -Actuellement, les deux cadres de réseaux de neurones les plus populaires sont : [TensorFlow](http://TensorFlow.org) et [PyTorch](https://pytorch.org/). Les deux fournissent une API de bas niveau pour travailler avec des tenseurs à la fois sur CPU et GPU. En plus de l'API de bas niveau, il existe également une API de niveau supérieur, appelée [Keras](https://keras.io/) et [PyTorch Lightning](https://pytorchlightning.ai/) respectivement. +Actuellement, les deux frameworks de réseaux de neurones les plus populaires sont : [TensorFlow](http://TensorFlow.org) et [PyTorch](https://pytorch.org/). Les deux offrent une API de bas niveau pour travailler avec des tenseurs sur CPU et GPU. En plus de l'API de bas niveau, il existe également une API de haut niveau, appelée [Keras](https://keras.io/) et [PyTorch Lightning](https://pytorchlightning.ai/) respectivement. -API de Bas Niveau | [TensorFlow](http://TensorFlow.org) | [PyTorch](https://pytorch.org/) -------------------|-------------------------------------|-------------------------------- -API de Niveau Supérieur| [Keras](https://keras.io/) | [PyTorch Lightning](https://pytorchlightning.ai/) +API de bas niveau | [TensorFlow](http://TensorFlow.org) | [PyTorch](https://pytorch.org/) +-------------------|-------------------------------------|-------------------------------- +API de haut niveau | [Keras](https://keras.io/) | [PyTorch Lightning](https://pytorchlightning.ai/) -**Les API de bas niveau** dans les deux cadres vous permettent de construire ce que l'on appelle des **graphes computationnels**. Ce graphe définit comment calculer la sortie (généralement la fonction de perte) avec des paramètres d'entrée donnés, et peut être poussé pour le calcul sur GPU, si disponible. Il existe des fonctions pour différencier ce graphe computationnel et calculer les gradients, qui peuvent ensuite être utilisés pour optimiser les paramètres du modèle. +Les **APIs de bas niveau** dans les deux frameworks permettent de construire ce qu'on appelle des **graphes computationnels**. Ce graphe définit comment calculer la sortie (généralement la fonction de perte) avec des paramètres d'entrée donnés, et peut être envoyé pour calcul sur GPU, si disponible. Il existe des fonctions pour différencier ce graphe computationnel et calculer les gradients, qui peuvent ensuite être utilisés pour optimiser les paramètres du modèle. -**Les API de niveau supérieur** considèrent en grande partie les réseaux de neurones comme une **séquence de couches**, et facilitent la construction de la plupart des réseaux de neurones. L'entraînement du modèle nécessite généralement de préparer les données, puis d'appeler une fonction `fit` pour effectuer le travail. +Les **APIs de haut niveau** considèrent les réseaux de neurones comme une **séquence de couches**, ce qui rend la construction de la plupart des réseaux de neurones beaucoup plus simple. L'entraînement du modèle nécessite généralement de préparer les données, puis d'appeler une fonction `fit` pour effectuer le travail. -L'API de niveau supérieur vous permet de construire des réseaux de neurones typiques très rapidement sans vous soucier de nombreux détails. En même temps, l'API de bas niveau offre beaucoup plus de contrôle sur le processus d'entraînement, et c'est pourquoi elles sont souvent utilisées dans la recherche, lorsque vous travaillez avec de nouvelles architectures de réseaux de neurones. +L'API de haut niveau permet de construire des réseaux de neurones typiques très rapidement sans se soucier de nombreux détails. En revanche, l'API de bas niveau offre beaucoup plus de contrôle sur le processus d'entraînement, et est donc largement utilisée en recherche, lorsqu'on travaille sur de nouvelles architectures de réseaux de neurones. -Il est également important de comprendre que vous pouvez utiliser les deux API ensemble, par exemple, vous pouvez développer votre propre architecture de couche de réseau en utilisant l'API de bas niveau, puis l'utiliser à l'intérieur d'un réseau plus large construit et entraîné avec l'API de niveau supérieur. Ou vous pouvez définir un réseau en utilisant l'API de niveau supérieur comme une séquence de couches, puis utiliser votre propre boucle d'entraînement de bas niveau pour effectuer l'optimisation. Les deux API utilisent les mêmes concepts sous-jacents de base, et elles sont conçues pour bien fonctionner ensemble. +Il est également important de comprendre que vous pouvez utiliser les deux APIs ensemble. Par exemple, vous pouvez développer votre propre architecture de couche de réseau avec l'API de bas niveau, puis l'utiliser dans un réseau plus large construit et entraîné avec l'API de haut niveau. Ou vous pouvez définir un réseau avec l'API de haut niveau comme une séquence de couches, puis utiliser votre propre boucle d'entraînement de bas niveau pour effectuer l'optimisation. Les deux APIs reposent sur les mêmes concepts fondamentaux et sont conçues pour bien fonctionner ensemble. ## Apprentissage -Dans ce cours, nous offrons la plupart du contenu à la fois pour PyTorch et TensorFlow. Vous pouvez choisir votre cadre préféré et ne passer qu'à travers les notebooks correspondants. Si vous n'êtes pas sûr du cadre à choisir, lisez quelques discussions sur Internet concernant **PyTorch vs. TensorFlow**. Vous pouvez également jeter un œil aux deux cadres pour mieux comprendre. +Dans ce cours, nous proposons la plupart des contenus à la fois pour PyTorch et TensorFlow. Vous pouvez choisir votre framework préféré et ne parcourir que les notebooks correspondants. Si vous ne savez pas quel framework choisir, lisez quelques discussions sur Internet concernant **PyTorch vs. TensorFlow**. Vous pouvez également examiner les deux frameworks pour mieux les comprendre. -Lorsque cela est possible, nous utiliserons des API de niveau supérieur pour plus de simplicité. Cependant, nous pensons qu'il est important de comprendre comment fonctionnent les réseaux de neurones depuis le début, donc au début, nous commençons par travailler avec l'API de bas niveau et les tenseurs. Cependant, si vous souhaitez avancer rapidement et ne pas passer trop de temps à apprendre ces détails, vous pouvez les ignorer et aller directement dans les notebooks de l'API de niveau supérieur. +Dans la mesure du possible, nous utiliserons les APIs de haut niveau pour simplifier. Cependant, nous pensons qu'il est important de comprendre comment fonctionnent les réseaux de neurones depuis la base. Ainsi, au début, nous travaillons avec l'API de bas niveau et les tenseurs. Cependant, si vous souhaitez avancer rapidement et ne pas passer trop de temps à apprendre ces détails, vous pouvez les ignorer et passer directement aux notebooks sur les APIs de haut niveau. -## ✍️ Exercices : Cadres +## ✍️ Exercices : Frameworks -Continuez votre apprentissage dans les notebooks suivants : +Poursuivez votre apprentissage dans les notebooks suivants : -API de Bas Niveau | [Notebook TensorFlow+Keras](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [PyTorch](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) -------------------|-------------------------------------|-------------------------------- -API de Niveau Supérieur| [Keras](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) | *PyTorch Lightning* +API de bas niveau | [Notebook TensorFlow+Keras](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [PyTorch](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) +-------------------|-------------------------------------|-------------------------------- +API de haut niveau | [Keras](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) | *PyTorch Lightning* -Après avoir maîtrisé les cadres, récapitulons la notion de surapprentissage. +Après avoir maîtrisé les frameworks, récapitulons la notion de surapprentissage. # Surapprentissage Le surapprentissage est un concept extrêmement important en apprentissage automatique, et il est crucial de bien le comprendre ! -Considérons le problème suivant d'approximation de 5 points (représentés par `x` sur les graphiques ci-dessous) : +Considérons le problème suivant d'approximation de 5 points (représentés par des `x` sur les graphiques ci-dessous) : ![linear](../../../../../translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.fr.jpg) | ![overfit](../../../../../translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.fr.jpg) -------------------------|-------------------------- **Modèle linéaire, 2 paramètres** | **Modèle non linéaire, 7 paramètres** -Erreur d'entraînement = 5.3 | Erreur de validation = 0 +Erreur d'entraînement = 5.3 | Erreur d'entraînement = 0 Erreur de validation = 5.1 | Erreur de validation = 20 -* À gauche, nous voyons une bonne approximation par une ligne droite. Parce que le nombre de paramètres est adéquat, le modèle saisit bien l'idée derrière la distribution des points. -* À droite, le modèle est trop puissant. Étant donné que nous n'avons que 5 points et que le modèle a 7 paramètres, il peut s'ajuster de manière à passer par tous les points, rendant l'erreur d'entraînement égale à 0. Cependant, cela empêche le modèle de comprendre le bon motif derrière les données, donc l'erreur de validation est très élevée. +* À gauche, nous voyons une bonne approximation par une ligne droite. Comme le nombre de paramètres est adéquat, le modèle comprend bien la distribution des points. +* À droite, le modèle est trop puissant. Comme nous n'avons que 5 points et que le modèle a 7 paramètres, il peut s'ajuster de manière à passer par tous les points, ce qui rend l'erreur d'entraînement égale à 0. Cependant, cela empêche le modèle de comprendre le bon schéma des données, ce qui entraîne une erreur de validation très élevée. -Il est très important de trouver un bon équilibre entre la richesse du modèle (nombre de paramètres) et le nombre d'échantillons d'entraînement. +Il est crucial de trouver un équilibre correct entre la richesse du modèle (nombre de paramètres) et le nombre d'échantillons d'entraînement. -## Pourquoi le surapprentissage se produit +## Pourquoi le surapprentissage se produit-il ? * Pas assez de données d'entraînement * Modèle trop puissant * Trop de bruit dans les données d'entrée -## Comment détecter le surapprentissage +## Comment détecter le surapprentissage ? -Comme vous pouvez le voir sur le graphique ci-dessus, le surapprentissage peut être détecté par une très faible erreur d'entraînement et une erreur de validation élevée. Normalement, pendant l'entraînement, nous verrons à la fois les erreurs d'entraînement et de validation commencer à diminuer, puis à un certain moment, l'erreur de validation pourrait cesser de diminuer et commencer à augmenter. Cela sera un signe de surapprentissage, et l'indicateur que nous devrions probablement arrêter l'entraînement à ce stade (ou au moins faire un instantané du modèle). +Comme vous pouvez le voir sur le graphique ci-dessus, le surapprentissage peut être détecté par une erreur d'entraînement très faible et une erreur de validation élevée. Normalement, pendant l'entraînement, nous voyons à la fois les erreurs d'entraînement et de validation diminuer, puis à un moment donné, l'erreur de validation peut cesser de diminuer et commencer à augmenter. Cela sera un signe de surapprentissage, et un indicateur qu'il faut probablement arrêter l'entraînement à ce moment-là (ou au moins faire une sauvegarde du modèle). ![overfitting](../../../../../translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.fr.png) -## Comment prévenir le surapprentissage +## Comment prévenir le surapprentissage ? Si vous constatez que le surapprentissage se produit, vous pouvez faire l'une des choses suivantes : * Augmenter la quantité de données d'entraînement - * Diminuer la complexité du modèle - * Utiliser une [technique de régularisation](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md), telle que [Dropout](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md#Dropout), que nous considérerons plus tard. + * Réduire la complexité du modèle + * Utiliser une [technique de régularisation](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md), comme le [Dropout](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md#Dropout), que nous examinerons plus tard. -## Surapprentissage et compromis biais-variance +## Surapprentissage et compromis Biais-Variance -Le surapprentissage est en fait un cas d'un problème plus générique en statistique appelé [compromis biais-variance](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff). Si nous considérons les sources possibles d'erreur dans notre modèle, nous pouvons voir deux types d'erreurs : +Le surapprentissage est en fait un cas d'un problème plus général en statistiques appelé [compromis Biais-Variance](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff). Si nous considérons les sources possibles d'erreur dans notre modèle, nous pouvons distinguer deux types d'erreurs : -* **Erreurs de biais** causées par le fait que notre algorithme n'est pas capable de capturer correctement la relation entre les données d'entraînement. Cela peut résulter du fait que notre modèle n'est pas assez puissant (**sous-apprentissage**). -* **Erreurs de variance**, qui sont causées par le modèle qui approxime le bruit dans les données d'entrée au lieu de la relation significative (**surapprentissage**). +* Les **erreurs de biais** sont causées par notre algorithme qui n'est pas capable de capturer correctement la relation entre les données d'entraînement. Cela peut résulter du fait que notre modèle n'est pas assez puissant (**sous-apprentissage**). +* Les **erreurs de variance**, qui sont causées par le modèle qui approxime le bruit dans les données d'entrée au lieu de la relation significative (**surapprentissage**). -Pendant l'entraînement, l'erreur de biais diminue (à mesure que notre modèle apprend à approximer les données), et l'erreur de variance augmente. Il est important d'arrêter l'entraînement - soit manuellement (lorsque nous détectons le surapprentissage), soit automatiquement (en introduisant une régularisation) - pour prévenir le surapprentissage. +Pendant l'entraînement, l'erreur de biais diminue (car notre modèle apprend à approximer les données), et l'erreur de variance augmente. Il est important d'arrêter l'entraînement - soit manuellement (lorsque nous détectons le surapprentissage) soit automatiquement (en introduisant une régularisation) - pour éviter le surapprentissage. ## Conclusion -Dans cette leçon, vous avez appris les différences entre les différentes API des deux cadres d'IA les plus populaires, TensorFlow et PyTorch. De plus, vous avez appris un sujet très important, le surapprentissage. +Dans cette leçon, vous avez appris les différences entre les diverses APIs des deux frameworks d'IA les plus populaires, TensorFlow et PyTorch. De plus, vous avez découvert un sujet très important : le surapprentissage. ## 🚀 Défi -Dans les notebooks accompagnants, vous trouverez des 'tâches' en bas ; parcourez les notebooks et complétez les tâches. +Dans les notebooks associés, vous trouverez des "tâches" en bas ; parcourez les notebooks et complétez les tâches. -## [Quiz post-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/205) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/205) -## Revue & Auto-apprentissage +## Révision & Auto-apprentissage Faites des recherches sur les sujets suivants : @@ -114,10 +123,10 @@ Posez-vous les questions suivantes : ## [Devoir](lab/README.md) -Dans ce laboratoire, vous êtes invité à résoudre deux problèmes de classification en utilisant des réseaux entièrement connectés à une et plusieurs couches en utilisant PyTorch ou TensorFlow. +Dans ce laboratoire, vous êtes invité à résoudre deux problèmes de classification en utilisant des réseaux entièrement connectés à une ou plusieurs couches avec PyTorch ou TensorFlow. * [Instructions](lab/README.md) * [Notebook](../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md b/translations/fr/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md index 68138600..d02135d6 100644 --- a/translations/fr/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md +++ b/translations/fr/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md @@ -1,19 +1,28 @@ + # Classification avec PyTorch/TensorFlow -Devoir de [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Devoir pratique tiré du [Curriculum AI for Beginners](https://github.com/microsoft/ai-for-beginners). ## Tâche -Résoudre deux problèmes de classification en utilisant des réseaux entièrement connectés à une ou plusieurs couches avec PyTorch ou TensorFlow : +Résolvez deux problèmes de classification en utilisant des réseaux entièrement connectés à une ou plusieurs couches avec PyTorch ou TensorFlow : -1. Problème de **[classification des iris](https://en.wikipedia.org/wiki/Iris_flower_data_set)** - un exemple de problème avec des données d'entrée tabulaires, qui peut être traité par l'apprentissage automatique classique. Votre objectif sera de classer les iris en 3 classes, basées sur 4 paramètres numériques. -2. Problème de classification des chiffres manuscrits **MNIST** que nous avons déjà vu. +1. Problème de **[classification des iris](https://en.wikipedia.org/wiki/Iris_flower_data_set)** - un exemple de problème avec des données tabulaires en entrée, qui peut être traité par l'apprentissage automatique classique. Votre objectif sera de classer les iris en 3 catégories, en vous basant sur 4 paramètres numériques. +2. Problème de classification des chiffres manuscrits **MNIST**, que nous avons déjà vu auparavant. -Essayez différentes architectures de réseau pour atteindre la meilleure précision possible. +Essayez différentes architectures de réseau pour obtenir la meilleure précision possible. -## Notebook de démarrage +## Notebook de départ -Commencez le laboratoire en ouvrant [LabFrameworks.ipynb](../../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb) +Commencez le devoir en ouvrant [LabFrameworks.ipynb](../../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/3-NeuralNetworks/README.md b/translations/fr/lessons/3-NeuralNetworks/README.md index 7c9edff4..9254abb7 100644 --- a/translations/fr/lessons/3-NeuralNetworks/README.md +++ b/translations/fr/lessons/3-NeuralNetworks/README.md @@ -1,51 +1,60 @@ -# Introduction aux Réseaux de Neurones + +# Introduction aux réseaux neuronaux -![Résumé du contenu d'introduction aux réseaux de neurones dans un doodle](../../../../translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.fr.png) +![Résumé du contenu d'introduction aux réseaux neuronaux sous forme de dessin](../../../../translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.fr.png) -Comme nous l'avons discuté dans l'introduction, l'une des façons d'atteindre l'intelligence est de former un **modèle informatique** ou un **cerveau artificiel**. Depuis le milieu du 20ème siècle, les chercheurs ont essayé différents modèles mathématiques, jusqu'à ce que, ces dernières années, cette direction se révèle être extrêmement réussie. Ces modèles mathématiques du cerveau sont appelés **réseaux de neurones**. +Comme nous l'avons vu dans l'introduction, l'une des façons d'atteindre l'intelligence est d'entraîner un **modèle informatique** ou un **cerveau artificiel**. Depuis le milieu du 20ᵉ siècle, les chercheurs ont expérimenté différents modèles mathématiques, jusqu'à ce que cette approche se révèle extrêmement fructueuse ces dernières années. Ces modèles mathématiques du cerveau sont appelés **réseaux neuronaux**. -> Parfois, les réseaux de neurones sont appelés *Réseaux de Neurones Artificiels*, RNA, afin d'indiquer que nous parlons de modèles, et non de véritables réseaux de neurones. +> Parfois, les réseaux neuronaux sont appelés *Réseaux Neuronaux Artificiels* (ANNs), pour indiquer qu'il s'agit de modèles et non de réseaux réels de neurones. -## Apprentissage Automatique +## Apprentissage automatique -Les Réseaux de Neurones font partie d'une discipline plus large appelée **Apprentissage Automatique**, dont l'objectif est d'utiliser des données pour former des modèles informatiques capables de résoudre des problèmes. L'apprentissage automatique constitue une grande partie de l'intelligence artificielle, cependant, nous ne couvrons pas l'apprentissage automatique classique dans ce programme. +Les réseaux neuronaux font partie d'une discipline plus large appelée **Apprentissage Automatique** (Machine Learning), dont l'objectif est d'utiliser des données pour entraîner des modèles informatiques capables de résoudre des problèmes. L'apprentissage automatique constitue une grande partie de l'intelligence artificielle, mais nous ne couvrons pas l'apprentissage automatique classique dans ce programme. -> Visitez notre programme séparé **[Apprentissage Automatique pour Débutants](http://github.com/microsoft/ml-for-beginners)** pour en savoir plus sur l'apprentissage automatique classique. +> Consultez notre programme distinct **[Apprentissage Automatique pour Débutants](http://github.com/microsoft/ml-for-beginners)** pour en savoir plus sur l'apprentissage automatique classique. -Dans l'apprentissage automatique, nous supposons que nous avons un ensemble de données d'exemples **X**, et des valeurs de sortie correspondantes **Y**. Les exemples sont souvent des vecteurs N-dimensionnels composés de **caractéristiques**, et les sorties sont appelées **étiquettes**. +En apprentissage automatique, nous supposons que nous disposons d'un ensemble de données d'exemples **X** et de valeurs de sortie correspondantes **Y**. Les exemples sont souvent des vecteurs N-dimensionnels composés de **caractéristiques**, et les sorties sont appelées **étiquettes**. -Nous allons considérer les deux problèmes d'apprentissage automatique les plus courants : +Nous examinerons les deux problèmes les plus courants en apprentissage automatique : -* **Classification**, où nous devons classer un objet d'entrée en deux classes ou plus. -* **Régression**, où nous devons prédire un nombre numérique pour chacun des échantillons d'entrée. +* **Classification**, où nous devons classer un objet d'entrée dans deux classes ou plus. +* **Régression**, où nous devons prédire une valeur numérique pour chaque échantillon d'entrée. -> Lorsque nous représentons les entrées et les sorties sous forme de tenseurs, l'ensemble de données d'entrée est une matrice de taille M×N, où M est le nombre d'échantillons et N est le nombre de caractéristiques. Les étiquettes de sortie Y forment un vecteur de taille M. +> Lorsqu'on représente les entrées et les sorties sous forme de tenseurs, l'ensemble de données d'entrée est une matrice de taille M×N, où M est le nombre d'échantillons et N est le nombre de caractéristiques. Les étiquettes de sortie **Y** sont un vecteur de taille M. -Dans ce programme, nous nous concentrerons uniquement sur les modèles de réseaux de neurones. +Dans ce programme, nous nous concentrerons uniquement sur les modèles de réseaux neuronaux. -## Un Modèle de Neurone +## Un modèle de neurone -De la biologie, nous savons que notre cerveau est constitué de cellules nerveuses, chacune ayant plusieurs "entrées" (axones) et une sortie (dendrite). Les axones et les dendrites peuvent conduire des signaux électriques, et les connexions entre les axones et les dendrites peuvent présenter différents degrés de conductivité (contrôlés par des neuromédiateurs). +En biologie, nous savons que notre cerveau est constitué de cellules neuronales, chacune ayant plusieurs "entrées" (axones) et une sortie (dendrite). Les axones et les dendrites peuvent conduire des signaux électriques, et les connexions entre axones et dendrites peuvent présenter différents degrés de conductivité (contrôlés par des neuromédiateurs). -![Modèle d'un Neurone](../../../../translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.fr.jpg) | ![Modèle d'un Neurone](../../../../translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.fr.png) +![Modèle d'un neurone](../../../../translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.fr.jpg) | ![Modèle d'un neurone](../../../../translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.fr.png) ----|---- -Neurone Réel *([Image](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg) de Wikipedia)* | Neurone Artificiel *(Image par l'Auteur)* +Neurone réel *([Image](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg) de Wikipédia)* | Neurone artificiel *(Image par l'auteur)* Ainsi, le modèle mathématique le plus simple d'un neurone contient plusieurs entrées X1, ..., XN et une sortie Y, ainsi qu'une série de poids W1, ..., WN. Une sortie est calculée comme suit : Y = f\left(\sum_{i=1}^N X_iW_i\right) -où f est une **fonction d'activation** non linéaire. +où **f** est une **fonction d'activation** non linéaire. -> Les premiers modèles de neurones ont été décrits dans l'article classique [A logical calculus of the ideas immanent in nervous activity](https://www.cs.cmu.edu/~./epxing/Class/10715/reading/McCulloch.and.Pitts.pdf) par Warren McCullock et Walter Pitts en 1943. Donald Hebb, dans son livre "[The Organization of Behavior: A Neuropsychological Theory](https://books.google.com/books?id=VNetYrB8EBoC)", a proposé la manière dont ces réseaux peuvent être entraînés. +> Les premiers modèles de neurones ont été décrits dans l'article classique [A logical calculus of the ideas immanent in nervous activity](https://www.cs.cmu.edu/~./epxing/Class/10715/reading/McCulloch.and.Pitts.pdf) par Warren McCullock et Walter Pitts en 1943. Donald Hebb, dans son livre "[The Organization of Behavior: A Neuropsychological Theory](https://books.google.com/books?id=VNetYrB8EBoC)", a proposé une méthode pour entraîner ces réseaux. -## Dans cette Section +## Dans cette section -Dans cette section, nous allons apprendre sur : -* [Perceptron](03-Perceptron/README.md), l'un des premiers modèles de réseaux de neurones pour la classification binaire -* [Réseaux multi-couches](04-OwnFramework/README.md) avec un carnet associé [comment construire notre propre framework](../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) -* [Frameworks de Réseaux de Neurones](05-Frameworks/README.md), avec ces carnets : [PyTorch](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) et [Keras/Tensorflow](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) -* [Sur-apprentissage](../../../../lessons/3-NeuralNetworks/05-Frameworks) +Dans cette section, nous apprendrons à propos de : +* [Perceptron](03-Perceptron/README.md), l'un des premiers modèles de réseaux neuronaux pour la classification binaire +* [Réseaux multicouches](04-OwnFramework/README.md) avec un notebook associé [comment construire notre propre framework](../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) +* [Frameworks de réseaux neuronaux](05-Frameworks/README.md), avec ces notebooks : [PyTorch](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) et [Keras/Tensorflow](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) +* [Surapprentissage](../../../../lessons/3-NeuralNetworks/05-Frameworks) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/06-IntroCV/README.md b/translations/fr/lessons/4-ComputerVision/06-IntroCV/README.md index be6b1438..321abfb9 100644 --- a/translations/fr/lessons/4-ComputerVision/06-IntroCV/README.md +++ b/translations/fr/lessons/4-ComputerVision/06-IntroCV/README.md @@ -1,31 +1,40 @@ + # Introduction à la Vision par Ordinateur -La [Vision par Ordinateur](https://wikipedia.org/wiki/Computer_vision) est une discipline dont l'objectif est de permettre aux ordinateurs d'acquérir une compréhension de haut niveau des images numériques. C'est une définition assez large, car *comprendre* peut signifier de nombreuses choses différentes, y compris trouver un objet sur une image (**détection d'objet**), comprendre ce qui se passe (**détection d'événements**), décrire une image en texte, ou reconstruire une scène en 3D. Il existe également des tâches spéciales liées aux images humaines : estimation de l'âge et des émotions, détection et identification de visages, et estimation de la pose en 3D, pour n'en nommer que quelques-unes. +[La vision par ordinateur](https://wikipedia.org/wiki/Computer_vision) est une discipline dont le but est de permettre aux ordinateurs de comprendre les images numériques à un niveau élevé. Cette définition est assez large, car *comprendre* peut signifier de nombreuses choses, notamment trouver un objet sur une image (**détection d'objet**), comprendre ce qui se passe (**détection d'événements**), décrire une image en texte ou reconstruire une scène en 3D. Il existe également des tâches spécifiques liées aux images humaines : estimation de l'âge et des émotions, détection et identification de visages, et estimation de la pose en 3D, pour n'en citer que quelques-unes. ## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/106) L'une des tâches les plus simples de la vision par ordinateur est **la classification d'images**. -La vision par ordinateur est souvent considérée comme une branche de l'IA. De nos jours, la plupart des tâches de vision par ordinateur sont résolues à l'aide de réseaux neuronaux. Nous allons en apprendre davantage sur le type spécial de réseaux neuronaux utilisés pour la vision par ordinateur, [les réseaux neuronaux convolutionnels](../07-ConvNets/README.md), tout au long de cette section. +La vision par ordinateur est souvent considérée comme une branche de l'IA. De nos jours, la plupart des tâches de vision par ordinateur sont résolues à l'aide de réseaux neuronaux. Nous en apprendrons davantage sur le type particulier de réseaux neuronaux utilisés pour la vision par ordinateur, les [réseaux neuronaux convolutifs](../07-ConvNets/README.md), tout au long de cette section. -Cependant, avant de passer l'image à un réseau neuronal, dans de nombreux cas, il est judicieux d'utiliser certaines techniques algorithmiques pour améliorer l'image. +Cependant, avant de transmettre une image à un réseau neuronal, il est souvent judicieux d'utiliser certaines techniques algorithmiques pour améliorer l'image. Il existe plusieurs bibliothèques Python disponibles pour le traitement d'images : -* **[imageio](https://imageio.readthedocs.io/en/stable/)** peut être utilisé pour lire/écrire différents formats d'image. Il prend également en charge ffmpeg, un outil utile pour convertir des images de trames vidéo. -* **[Pillow](https://pillow.readthedocs.io/en/stable/index.html)** (également connu sous le nom de PIL) est un peu plus puissant et prend également en charge certaines manipulations d'images telles que le morphing, les ajustements de palette, et plus encore. +* **[imageio](https://imageio.readthedocs.io/en/stable/)** peut être utilisé pour lire/écrire différents formats d'images. Il prend également en charge ffmpeg, un outil utile pour convertir des images vidéo en images. +* **[Pillow](https://pillow.readthedocs.io/en/stable/index.html)** (également connu sous le nom de PIL) est un peu plus puissant et prend également en charge certaines manipulations d'images telles que la morphologie, les ajustements de palette, et plus encore. * **[OpenCV](https://opencv.org/)** est une bibliothèque de traitement d'images puissante écrite en C++, qui est devenue la norme *de facto* pour le traitement d'images. Elle dispose d'une interface Python pratique. -* **[dlib](http://dlib.net/)** est une bibliothèque C++ qui implémente de nombreux algorithmes d'apprentissage automatique, y compris certains des algorithmes de vision par ordinateur. Elle dispose également d'une interface Python et peut être utilisée pour des tâches difficiles telles que la détection de visages et de points de repère faciaux. +* **[dlib](http://dlib.net/)** est une bibliothèque C++ qui implémente de nombreux algorithmes d'apprentissage automatique, y compris certains algorithmes de vision par ordinateur. Elle dispose également d'une interface Python et peut être utilisée pour des tâches complexes telles que la détection de visages et de points de repère faciaux. ## OpenCV -[OpenCV](https://opencv.org/) est considérée comme la norme *de facto* pour le traitement d'images. Elle contient de nombreux algorithmes utiles, implémentés en C++. Vous pouvez également appeler OpenCV depuis Python. +[OpenCV](https://opencv.org/) est considéré comme la norme *de facto* pour le traitement d'images. Il contient de nombreux algorithmes utiles, implémentés en C++. Vous pouvez également appeler OpenCV depuis Python. -Un bon endroit pour apprendre OpenCV est [ce cours Learn OpenCV](https://learnopencv.com/getting-started-with-opencv/). Dans notre programme, notre objectif n'est pas d'apprendre OpenCV, mais de vous montrer quelques exemples de quand cela peut être utilisé, et comment. +Un bon endroit pour apprendre OpenCV est [ce cours Learn OpenCV](https://learnopencv.com/getting-started-with-opencv/). Dans notre programme, notre objectif n'est pas d'apprendre OpenCV, mais de vous montrer quelques exemples où il peut être utilisé et comment. -### Chargement des Images +### Chargement des images -Les images en Python peuvent être représentées de manière pratique par des tableaux NumPy. Par exemple, les images en niveaux de gris de taille 320x200 pixels seraient stockées dans un tableau de 200x320, et les images couleur de la même dimension auraient une forme de 200x320x3 (pour 3 canaux de couleur). Pour charger une image, vous pouvez utiliser le code suivant : +Les images en Python peuvent être représentées de manière pratique par des tableaux NumPy. Par exemple, les images en niveaux de gris de taille 320x200 pixels seraient stockées dans un tableau 200x320, et les images en couleur de la même dimension auraient une forme de 200x320x3 (pour 3 canaux de couleur). Pour charger une image, vous pouvez utiliser le code suivant : ```python import cv2 @@ -35,78 +44,78 @@ im = cv2.imread('image.jpeg') plt.imshow(im) ``` -Traditionnellement, OpenCV utilise un encodage BGR (Bleu-Vert-Rouge) pour les images couleur, tandis que le reste des outils Python utilise le plus traditionnel RGB (Rouge-Vert-Bleu). Pour que l'image apparaisse correctement, vous devez la convertir en espace colorimétrique RGB, soit en échangeant les dimensions dans le tableau NumPy, soit en appelant une fonction OpenCV : +Traditionnellement, OpenCV utilise l'encodage BGR (Bleu-Vert-Rouge) pour les images en couleur, tandis que les autres outils Python utilisent l'encodage plus traditionnel RGB (Rouge-Vert-Bleu). Pour que l'image soit correcte, vous devez la convertir en espace de couleur RGB, soit en permutant les dimensions dans le tableau NumPy, soit en appelant une fonction OpenCV : ```python im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB) ``` -Les mêmes fonctions `cvtColor` function can be used to perform other color space transformations such as converting an image to grayscale or to the HSV (Hue-Saturation-Value) color space. +La même fonction `cvtColor` peut être utilisée pour effectuer d'autres transformations d'espace de couleur, comme convertir une image en niveaux de gris ou en espace de couleur HSV (Teinte-Saturation-Valeur). -You can also use OpenCV to load video frame-by-frame - an example is given in the exercise [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb). +Vous pouvez également utiliser OpenCV pour charger des vidéos image par image - un exemple est donné dans l'exercice [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb). -### Image Processing +### Traitement d'images -Before feeding an image to a neural network, you may want to apply several pre-processing steps. OpenCV can do many things, including: +Avant de transmettre une image à un réseau neuronal, vous pouvez vouloir appliquer plusieurs étapes de prétraitement. OpenCV peut faire de nombreuses choses, notamment : -* **Resizing** the image using `im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)` -* **Blurring** the image using `im = cv2.medianBlur(im,3)` or `im = cv2.GaussianBlur(im, (3,3), 0)` -* Changing the **brightness and contrast** of the image can be done by NumPy array manipulations, as described [in this Stackoverflow note](https://stackoverflow.com/questions/39308030/how-do-i-increase-the-contrast-of-an-image-in-python-opencv). -* Using [thresholding](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html) by calling `cv2.threshold`/`cv2.adaptiveThreshold`, qui sont souvent préférables à l'ajustement de la luminosité ou du contraste. -* Application de différentes [transformations](https://docs.opencv.org/4.5.5/da/d6e/tutorial_py_geometric_transformations.html) à l'image : - - **[Transformations affines](https://docs.opencv.org/4.5.5/d4/d61/tutorial_warp_affine.html)** peuvent être utiles si vous devez combiner rotation, redimensionnement et déformation de l'image et que vous connaissez la position source et destination de trois points dans l'image. Les transformations affines gardent les lignes parallèles. - - **[Transformations de perspective](https://medium.com/analytics-vidhya/opencv-perspective-transformation-9edffefb2143)** peuvent être utiles lorsque vous connaissez les positions source et destination de 4 points dans l'image. Par exemple, si vous prenez une photo d'un document rectangulaire avec un smartphone sous un certain angle, et que vous souhaitez obtenir une image rectangulaire du document lui-même. +* **Redimensionner** l'image en utilisant `im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)` +* **Flouter** l'image en utilisant `im = cv2.medianBlur(im,3)` ou `im = cv2.GaussianBlur(im, (3,3), 0)` +* Modifier la **luminosité et le contraste** de l'image peut être fait par des manipulations de tableaux NumPy, comme décrit [dans cette note Stackoverflow](https://stackoverflow.com/questions/39308030/how-do-i-increase-the-contrast-of-an-image-in-python-opencv). +* Utiliser le [seuil](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html) en appelant les fonctions `cv2.threshold`/`cv2.adaptiveThreshold`, ce qui est souvent préférable à l'ajustement de la luminosité ou du contraste. +* Appliquer différentes [transformations](https://docs.opencv.org/4.5.5/da/d6e/tutorial_py_geometric_transformations.html) à l'image : + - Les **[transformations affines](https://docs.opencv.org/4.5.5/d4/d61/tutorial_warp_affine.html)** peuvent être utiles si vous devez combiner rotation, redimensionnement et inclinaison de l'image et que vous connaissez l'emplacement source et destination de trois points dans l'image. Les transformations affines conservent les lignes parallèles parallèles. + - Les **[transformations de perspective](https://medium.com/analytics-vidhya/opencv-perspective-transformation-9edffefb2143)** peuvent être utiles lorsque vous connaissez les positions source et destination de 4 points dans l'image. Par exemple, si vous prenez une photo d'un document rectangulaire via une caméra de smartphone sous un certain angle, et que vous souhaitez obtenir une image rectangulaire du document lui-même. * Comprendre le mouvement à l'intérieur de l'image en utilisant **[le flux optique](https://docs.opencv.org/4.5.5/d4/dee/tutorial_optical_flow.html)**. -## Exemples d'utilisation de la Vision par Ordinateur +## Exemples d'utilisation de la vision par ordinateur -Dans notre [Notebook OpenCV](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb), nous donnons quelques exemples de quand la vision par ordinateur peut être utilisée pour effectuer des tâches spécifiques : +Dans notre [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb), nous donnons quelques exemples où la vision par ordinateur peut être utilisée pour effectuer des tâches spécifiques : -* **Prétraitement d'une photographie d'un livre en braille**. Nous nous concentrons sur la façon dont nous pouvons utiliser le seuillage, la détection de caractéristiques, la transformation de perspective et les manipulations NumPy pour séparer les symboles braille individuels pour une classification ultérieure par un réseau neuronal. +* **Prétraitement d'une photographie d'un livre en braille**. Nous nous concentrons sur la manière dont nous pouvons utiliser le seuil, la détection de caractéristiques, la transformation de perspective et les manipulations NumPy pour séparer les symboles individuels en braille pour une classification ultérieure par un réseau neuronal. -![Image en Braille](../../../../../translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.fr.jpeg) | ![Image en Braille Prétraitée](../../../../../translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.fr.png) | ![Symboles en Braille](../../../../../translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.fr.png) +![Image Braille](../../../../../translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.fr.jpeg) | ![Image Braille Prétraitée](../../../../../translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.fr.png) | ![Symboles Braille](../../../../../translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.fr.png) ----|-----|----- -> Image provenant de [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) +> Image tirée de [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) -* **Détection de mouvement dans une vidéo à l'aide de la différence de trame**. Si la caméra est fixe, alors les trames du flux de la caméra devraient être assez similaires les unes aux autres. Puisque les trames sont représentées sous forme de tableaux, il suffit de soustraire ces tableaux pour deux trames consécutives afin d'obtenir la différence de pixels, qui devrait être faible pour des trames statiques et devenir plus élevée lorsqu'il y a un mouvement substantiel dans l'image. +* **Détection de mouvement dans une vidéo à l'aide de la différence entre les images**. Si la caméra est fixe, les images du flux vidéo devraient être assez similaires entre elles. Étant donné que les images sont représentées sous forme de tableaux, en soustrayant simplement ces tableaux pour deux images consécutives, nous obtiendrons la différence de pixels, qui devrait être faible pour des images statiques, et devenir plus élevée lorsqu'il y a un mouvement substantiel dans l'image. -![Image de trames vidéo et différences de trame](../../../../../translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.fr.png) +![Image des images vidéo et des différences entre les images](../../../../../translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.fr.png) -> Image provenant de [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) +> Image tirée de [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) -* **Détection de mouvement à l'aide du Flux Optique**. [Le flux optique](https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html) nous permet de comprendre comment les pixels individuels sur les trames vidéo se déplacent. Il existe deux types de flux optique : +* **Détection de mouvement à l'aide du flux optique**. [Le flux optique](https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html) nous permet de comprendre comment les pixels individuels des images vidéo se déplacent. Il existe deux types de flux optique : - - **Flux Optique Dense** calcule le champ vectoriel qui montre pour chaque pixel où il se déplace - - **Flux Optique Sparse** est basé sur la prise de certaines caractéristiques distinctives dans l'image (par exemple, les contours), et la construction de leur trajectoire d'une trame à l'autre. + - **Flux optique dense** calcule le champ vectoriel qui montre pour chaque pixel où il se déplace. + - **Flux optique clairsemé** se base sur la prise de certaines caractéristiques distinctives dans l'image (par exemple, les contours) et construit leur trajectoire d'une image à l'autre. -![Image du Flux Optique](../../../../../translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.fr.png) +![Image du flux optique](../../../../../translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.fr.png) -> Image provenant de [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) +> Image tirée de [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) ## ✍️ Notebooks d'exemple : OpenCV [essayez OpenCV en action](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) -Faisons quelques expériences avec OpenCV en explorant [le Notebook OpenCV](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) +Faisons quelques expériences avec OpenCV en explorant [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb). ## Conclusion -Parfois, des tâches relativement complexes telles que la détection de mouvement ou la détection de bout de doigt peuvent être résolues uniquement par la vision par ordinateur. Ainsi, il est très utile de connaître les techniques de base de la vision par ordinateur, et ce que des bibliothèques comme OpenCV peuvent faire. +Parfois, des tâches relativement complexes telles que la détection de mouvement ou la détection de bout de doigt peuvent être résolues uniquement par la vision par ordinateur. Ainsi, il est très utile de connaître les techniques de base de la vision par ordinateur et ce que des bibliothèques comme OpenCV peuvent faire. ## 🚀 Défi -Regardez [cette vidéo](https://docs.microsoft.com/shows/ai-show/ai-show--2021-opencv-ai-competition--grand-prize-winners--cortic-tigers--episode-32?WT.mc_id=academic-77998-cacaste) de l'émission AI pour en savoir plus sur le projet Cortic Tigers et comment ils ont construit une solution basée sur des blocs pour démocratiser les tâches de vision par ordinateur via un robot. Faites des recherches sur d'autres projets similaires qui aident à intégrer de nouveaux apprenants dans le domaine. +Regardez [cette vidéo](https://docs.microsoft.com/shows/ai-show/ai-show--2021-opencv-ai-competition--grand-prize-winners--cortic-tigers--episode-32?WT.mc_id=academic-77998-cacaste) de l'AI Show pour en apprendre davantage sur le projet Cortic Tigers et comment ils ont construit une solution basée sur des blocs pour démocratiser les tâches de vision par ordinateur via un robot. Faites des recherches sur d'autres projets similaires qui aident à initier de nouveaux apprenants dans ce domaine. ## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/206) -## Revue & Auto-étude +## Révision & Auto-apprentissage -Lisez-en plus sur le flux optique [dans ce super tutoriel](https://learnopencv.com/optical-flow-in-opencv/). +Lisez davantage sur le flux optique [dans ce tutoriel excellent](https://learnopencv.com/optical-flow-in-opencv/). ## [Devoir](lab/README.md) -Dans ce laboratoire, vous allez filmer une vidéo avec des gestes simples, et votre objectif est d'extraire les mouvements haut/bas/gauche/droite en utilisant le flux optique. +Dans ce laboratoire, vous prendrez une vidéo avec des gestes simples, et votre objectif sera d'extraire les mouvements haut/bas/gauche/droite en utilisant le flux optique. -Image de Mouvement de la Paume +Image de mouvement de la paume **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/06-IntroCV/lab/README.md b/translations/fr/lessons/4-ComputerVision/06-IntroCV/lab/README.md index f6481d45..2b66be89 100644 --- a/translations/fr/lessons/4-ComputerVision/06-IntroCV/lab/README.md +++ b/translations/fr/lessons/4-ComputerVision/06-IntroCV/lab/README.md @@ -1,23 +1,31 @@ -# Détection des mouvements à l'aide du flux optique + +# Détection de mouvements avec le flux optique -Devoir de laboratoire du [Curriculum AI pour débutants](https://aka.ms/ai-beginners). +Exercice pratique tiré du [programme AI for Beginners](https://aka.ms/ai-beginners). ## Tâche -Considérez [cette vidéo](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4), dans laquelle la paume d'une personne se déplace de gauche à droite et de haut en bas sur un fond stable. -Vous êtes formé sur des données jusqu'en octobre 2023. +Considérez [cette vidéo](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4), dans laquelle la paume d'une personne se déplace vers la gauche/droite/haut/bas sur un fond stable. -**Votre objectif** sera d'utiliser le flux optique pour déterminer quelles parties de la vidéo contiennent des mouvements vers le haut/bas/gauche/droite. +**Votre objectif** serait d'utiliser le flux optique pour déterminer quelles parties de la vidéo contiennent des mouvements vers le haut, le bas, la gauche ou la droite. -**Objectif supplémentaire** serait de suivre réellement le mouvement de la paume/des doigts en utilisant la couleur de la peau, comme décrit [dans cet article de blog](https://dev.to/amarlearning/finger-detection-and-tracking-using-opencv-and-python-586m) ou [ici](http://www.benmeline.com/finger-tracking-with-opencv-and-python/). +**Objectif supplémentaire** serait de suivre réellement le mouvement de la paume/doigt en utilisant la couleur de la peau, comme décrit [dans cet article de blog](https://dev.to/amarlearning/finger-detection-and-tracking-using-opencv-and-python-586m) ou [ici](http://www.benmeline.com/finger-tracking-with-opencv-and-python/). -## Notebook de démarrage +## Notebook de départ -Commencez le laboratoire en ouvrant [MovementDetection.ipynb](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb) +Commencez l'exercice en ouvrant [MovementDetection.ipynb](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb) ## Conclusion -Parfois, des tâches relativement complexes telles que la détection de mouvement ou la détection des extrémités des doigts peuvent être résolues uniquement par la vision par ordinateur. Ainsi, il est très utile de savoir ce que des bibliothèques comme OpenCV peuvent faire. +Parfois, des tâches relativement complexes comme la détection de mouvements ou la détection de l'extrémité des doigts peuvent être résolues uniquement grâce à la vision par ordinateur. Ainsi, il est très utile de savoir ce que des bibliothèques comme OpenCV peuvent accomplir. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md b/translations/fr/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md index 9558c559..97626030 100644 --- a/translations/fr/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md +++ b/translations/fr/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md @@ -1,8 +1,17 @@ + # Architectures CNN Bien Connues ### VGG-16 -VGG-16 est un réseau qui a atteint 92,7 % de précision dans la classification top-5 d'ImageNet en 2014. Il a la structure de couches suivante : +VGG-16 est un réseau qui a atteint une précision de 92,7 % dans la classification top-5 d'ImageNet en 2014. Il possède la structure de couches suivante : ![Couches ImageNet](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.fr.jpg) @@ -10,7 +19,7 @@ Comme vous pouvez le voir, VGG suit une architecture pyramidale traditionnelle, ![Pyramide ImageNet](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.fr.jpg) -> Image de [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) +> Image tirée de [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) ### ResNet @@ -18,47 +27,47 @@ ResNet est une famille de modèles proposée par Microsoft Research en 2015. L'i -> Image de [cet article](https://arxiv.org/pdf/1512.03385.pdf) +> Image tirée de [cet article](https://arxiv.org/pdf/1512.03385.pdf) -La raison d'utiliser un passage identitaire est de faire en sorte que notre couche prédit **la différence** entre le résultat d'une couche précédente et la sortie du bloc résiduel - d'où le nom *résiduel*. Ces blocs sont beaucoup plus faciles à entraîner, et on peut construire des réseaux avec plusieurs centaines de ces blocs (les variantes les plus courantes sont ResNet-52, ResNet-101 et ResNet-152). +La raison d'utiliser un passage identitaire est de permettre à notre couche de prédire **la différence** entre le résultat d'une couche précédente et la sortie du bloc résiduel - d'où le nom *résiduel*. Ces blocs sont beaucoup plus faciles à entraîner, et il est possible de construire des réseaux avec plusieurs centaines de ces blocs (les variantes les plus courantes sont ResNet-52, ResNet-101 et ResNet-152). -Vous pouvez également penser à ce réseau comme étant capable d'ajuster sa complexité au jeu de données. Au début, lorsque vous commencez à entraîner le réseau, les valeurs des poids sont faibles, et la plupart du signal passe à travers des couches identitaires. À mesure que l'entraînement progresse et que les poids deviennent plus grands, l'importance des paramètres du réseau augmente, et le réseau s'ajuste pour s'adapter à la puissance expressive requise pour classer correctement les images d'entraînement. +Vous pouvez également considérer ce réseau comme capable d'ajuster sa complexité au jeu de données. Au début, lorsque vous commencez à entraîner le réseau, les valeurs des poids sont faibles, et la plupart du signal passe par les couches identitaires. Au fur et à mesure de l'entraînement et de l'augmentation des poids, l'importance des paramètres du réseau grandit, et le réseau s'ajuste pour fournir la puissance expressive nécessaire à la classification correcte des images d'entraînement. ### Google Inception -L'architecture Google Inception pousse cette idée un peu plus loin et construit chaque couche du réseau comme une combinaison de plusieurs chemins différents : +L'architecture Google Inception pousse cette idée encore plus loin et construit chaque couche du réseau comme une combinaison de plusieurs chemins différents : -> Image de [Researchgate](https://www.researchgate.net/figure/Inception-module-with-dimension-reductions-left-and-schema-for-Inception-ResNet-v1_fig2_355547454) +> Image tirée de [Researchgate](https://www.researchgate.net/figure/Inception-module-with-dimension-reductions-left-and-schema-for-Inception-ResNet-v1_fig2_355547454) -Ici, nous devons souligner le rôle des convolutions 1x1, car au premier abord, elles n'ont pas de sens. Pourquoi devrions-nous parcourir l'image avec un filtre 1x1 ? Cependant, vous devez vous rappeler que les filtres de convolution fonctionnent également avec plusieurs canaux de profondeur (à l'origine - couleurs RGB, dans les couches suivantes - canaux pour différents filtres), et la convolution 1x1 est utilisée pour mélanger ces canaux d'entrée ensemble en utilisant différents poids entraînables. Cela peut également être considéré comme un sous-échantillonnage (pooling) sur la dimension des canaux. +Ici, il est important de souligner le rôle des convolutions 1x1, car au premier abord, elles peuvent sembler inutiles. Pourquoi utiliser un filtre 1x1 sur une image ? Cependant, il faut se rappeler que les filtres de convolution travaillent également avec plusieurs canaux de profondeur (initialement - les couleurs RGB, dans les couches suivantes - des canaux pour différents filtres), et la convolution 1x1 est utilisée pour mélanger ces canaux d'entrée à l'aide de poids entraînables différents. Elle peut également être vue comme un échantillonnage (pooling) sur la dimension des canaux. -Voici [un bon article de blog](https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578) sur le sujet, et [l'article original](https://arxiv.org/pdf/1312.4400.pdf). +Voici [un excellent article de blog](https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578) sur le sujet, ainsi que [l'article original](https://arxiv.org/pdf/1312.4400.pdf). ### MobileNet -MobileNet est une famille de modèles de taille réduite, adaptés aux appareils mobiles. Utilisez-les si vous manquez de ressources et pouvez sacrifier un peu de précision. L'idée principale derrière eux est la **convolution séparablement en profondeur**, qui permet de représenter les filtres de convolution par une composition de convolutions spatiales et de convolutions 1x1 sur les canaux de profondeur. Cela réduit considérablement le nombre de paramètres, rendant le réseau plus petit en taille et également plus facile à entraîner avec moins de données. +MobileNet est une famille de modèles de taille réduite, adaptée aux appareils mobiles. Utilisez-les si vous disposez de ressources limitées et que vous pouvez sacrifier un peu de précision. L'idée principale derrière ces modèles est la **convolution séparée en profondeur**, qui permet de représenter les filtres de convolution par une composition de convolutions spatiales et de convolutions 1x1 sur les canaux de profondeur. Cela réduit considérablement le nombre de paramètres, rendant le réseau plus petit et également plus facile à entraîner avec moins de données. -Voici [un bon article de blog sur MobileNet](https://medium.com/analytics-vidhya/image-classification-with-mobilenet-cc6fbb2cd470). +Voici [un excellent article de blog sur MobileNet](https://medium.com/analytics-vidhya/image-classification-with-mobilenet-cc6fbb2cd470). ## Conclusion -Dans cette unité, vous avez appris le concept principal derrière les réseaux neuronaux en vision par ordinateur - les réseaux de convolution. Les architectures réelles qui alimentent la classification d'images, la détection d'objets et même les réseaux de génération d'images sont toutes basées sur les CNN, mais avec plus de couches et quelques astuces d'entraînement supplémentaires. +Dans cette unité, vous avez appris le concept principal derrière les réseaux neuronaux de vision par ordinateur - les réseaux convolutifs. Les architectures réelles qui alimentent la classification d'images, la détection d'objets et même les réseaux de génération d'images sont toutes basées sur les CNN, avec simplement plus de couches et quelques astuces d'entraînement supplémentaires. ## 🚀 Défi -Dans les notebooks accompagnants, il y a des notes en bas sur la façon d'obtenir une précision plus élevée. Faites quelques expériences pour voir si vous pouvez atteindre une précision supérieure. +Dans les notebooks associés, il y a des notes en bas sur la façon d'obtenir une meilleure précision. Faites quelques expériences pour voir si vous pouvez atteindre une précision plus élevée. -## [Quiz post-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/207) +## [Quiz post-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/207) -## Revue & Auto-étude +## Révision & Auto-apprentissage -Bien que les CNN soient le plus souvent utilisés pour des tâches de vision par ordinateur, ils sont généralement bons pour extraire des motifs de taille fixe. Par exemple, si nous traitons des sons, nous pouvons également vouloir utiliser des CNN pour rechercher des motifs spécifiques dans un signal audio - dans ce cas, les filtres seraient unidimensionnels (et ce CNN serait appelé 1D-CNN). De plus, parfois, un 3D-CNN est utilisé pour extraire des caractéristiques dans un espace multidimensionnel, comme certains événements se produisant dans une vidéo - le CNN peut capturer certains motifs de changement de caractéristiques au fil du temps. Faites quelques recherches et auto-études sur d'autres tâches qui peuvent être réalisées avec des CNN. +Bien que les CNN soient le plus souvent utilisés pour les tâches de vision par ordinateur, ils sont généralement efficaces pour extraire des motifs de taille fixe. Par exemple, si nous travaillons avec des sons, nous pourrions également vouloir utiliser des CNN pour rechercher certains motifs spécifiques dans le signal audio - dans ce cas, les filtres seraient unidimensionnels (et ce CNN serait appelé 1D-CNN). Parfois, un 3D-CNN est également utilisé pour extraire des caractéristiques dans un espace multidimensionnel, comme certains événements se produisant dans une vidéo - le CNN peut capturer certains motifs de changement de caractéristiques au fil du temps. Faites des recherches et de l'auto-apprentissage sur d'autres tâches pouvant être réalisées avec des CNN. ## [Devoir](lab/README.md) -Dans ce laboratoire, vous devez classer différentes races de chats et de chiens. Ces images sont plus complexes que le jeu de données MNIST et ont des dimensions plus élevées, et il y a plus de 10 classes. +Dans ce laboratoire, vous devez classifier différentes races de chats et de chiens. Ces images sont plus complexes que le jeu de données MNIST, ont des dimensions plus élevées, et il y a plus de 10 classes. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/07-ConvNets/README.md b/translations/fr/lessons/4-ComputerVision/07-ConvNets/README.md index a040edde..e253e3b7 100644 --- a/translations/fr/lessons/4-ComputerVision/07-ConvNets/README.md +++ b/translations/fr/lessons/4-ComputerVision/07-ConvNets/README.md @@ -1,59 +1,67 @@ + # Réseaux de Neurones Convolutionnels -Nous avons déjà vu que les réseaux de neurones sont assez efficaces pour traiter des images, et même un perceptron à une couche est capable de reconnaître des chiffres manuscrits à partir du jeu de données MNIST avec une précision raisonnable. Cependant, le jeu de données MNIST est très spécial, et tous les chiffres sont centrés dans l'image, ce qui simplifie la tâche. +Nous avons vu précédemment que les réseaux de neurones sont assez performants pour traiter des images, et même un perceptron à une seule couche est capable de reconnaître des chiffres manuscrits du jeu de données MNIST avec une précision raisonnable. Cependant, le jeu de données MNIST est très particulier, car tous les chiffres y sont centrés dans l'image, ce qui simplifie la tâche. ## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/107) -Dans la vie réelle, nous voulons être capables de reconnaître des objets sur une image, peu importe leur emplacement exact dans celle-ci. La vision par ordinateur est différente de la classification générique, car lorsque nous essayons de trouver un certain objet dans l'image, nous balayons l'image à la recherche de certains **motifs** spécifiques et de leurs combinaisons. Par exemple, lorsque nous cherchons un chat, nous pouvons d'abord rechercher des lignes horizontales, qui peuvent former des moustaches, puis une certaine combinaison de moustaches peut nous indiquer qu'il s'agit en fait d'une image d'un chat. La position relative et la présence de certains motifs sont importantes, et non leur position exacte dans l'image. +Dans la vie réelle, nous souhaitons pouvoir reconnaître des objets sur une image, peu importe leur emplacement exact. La vision par ordinateur diffère de la classification générique, car lorsque nous cherchons un objet spécifique dans une image, nous analysons celle-ci à la recherche de certains **motifs** et de leurs combinaisons. Par exemple, en cherchant un chat, nous pouvons d'abord repérer des lignes horizontales qui pourraient former des moustaches, puis une certaine combinaison de moustaches peut nous indiquer qu'il s'agit effectivement d'une image de chat. La position relative et la présence de certains motifs sont importantes, mais pas leur emplacement exact dans l'image. -Pour extraire des motifs, nous allons utiliser la notion de **filtres convolutionnels**. Comme vous le savez, une image est représentée par une matrice 2D, ou un tenseur 3D avec une profondeur de couleur. Appliquer un filtre signifie que nous prenons une matrice de **noyau de filtre** relativement petite, et pour chaque pixel de l'image originale, nous calculons la moyenne pondérée avec les points voisins. Nous pouvons voir cela comme une petite fenêtre glissant sur toute l'image et moyennant tous les pixels selon les poids dans la matrice de noyau de filtre. +Pour extraire des motifs, nous utiliserons la notion de **filtres convolutionnels**. Comme vous le savez, une image est représentée par une matrice 2D ou un tenseur 3D avec une profondeur de couleur. Appliquer un filtre signifie que nous prenons une petite matrice appelée **noyau de filtre**, et pour chaque pixel de l'image originale, nous calculons la moyenne pondérée avec les points voisins. On peut imaginer cela comme une petite fenêtre glissant sur toute l'image et moyennant tous les pixels selon les poids du noyau de filtre. -![Filtre de Bord Vertical](../../../../../translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.fr.png) | ![Filtre de Bord Horizontal](../../../../../translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.fr.png) +![Filtre de bord vertical](../../../../../translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.fr.png) | ![Filtre de bord horizontal](../../../../../translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.fr.png) ----|---- > Image par Dmitry Soshnikov -Par exemple, si nous appliquons des filtres de bord vertical et horizontal de 3x3 aux chiffres MNIST, nous pouvons obtenir des surlignages (par exemple, des valeurs élevées) là où il y a des bords verticaux et horizontaux dans notre image originale. Ainsi, ces deux filtres peuvent être utilisés pour "chercher" des bords. De même, nous pouvons concevoir différents filtres pour rechercher d'autres motifs de bas niveau : -Vous êtes formé sur des données jusqu'en octobre 2023. +Par exemple, si nous appliquons des filtres de bord vertical et horizontal 3x3 aux chiffres du MNIST, nous pouvons obtenir des zones mises en évidence (par exemple, des valeurs élevées) là où se trouvent des bords verticaux et horizontaux dans notre image originale. Ainsi, ces deux filtres peuvent être utilisés pour "chercher" des bords. De la même manière, nous pouvons concevoir différents filtres pour rechercher d'autres motifs de bas niveau : > Image de [Leung-Malik Filter Bank](https://www.robots.ox.ac.uk/~vgg/research/texclass/filters.html) -Cependant, bien que nous puissions concevoir les filtres pour extraire certains motifs manuellement, nous pouvons également concevoir le réseau de telle manière qu'il apprenne les motifs automatiquement. C'est l'une des idées principales derrière le CNN. +Cependant, bien que nous puissions concevoir manuellement des filtres pour extraire certains motifs, nous pouvons également concevoir le réseau de manière à ce qu'il apprenne les motifs automatiquement. C'est l'une des idées principales derrière les CNN. -## Idées principales derrière le CNN +## Idées principales des CNN -Le fonctionnement des CNN est basé sur les idées importantes suivantes : +Le fonctionnement des CNN repose sur les idées importantes suivantes : -* Les filtres convolutionnels peuvent extraire des motifs -* Nous pouvons concevoir le réseau de manière à ce que les filtres soient entraînés automatiquement -* Nous pouvons utiliser la même approche pour trouver des motifs dans des caractéristiques de haut niveau, pas seulement dans l'image originale. Ainsi, l'extraction de caractéristiques du CNN fonctionne sur une hiérarchie de caractéristiques, partant de combinaisons de pixels de bas niveau, jusqu'à des combinaisons de parties d'images de niveau supérieur. +* Les filtres convolutionnels peuvent extraire des motifs. +* Nous pouvons concevoir le réseau de manière à ce que les filtres soient entraînés automatiquement. +* Nous pouvons utiliser la même approche pour trouver des motifs dans des caractéristiques de haut niveau, et pas seulement dans l'image originale. Ainsi, l'extraction de caractéristiques par les CNN fonctionne sur une hiérarchie de caractéristiques, allant des combinaisons de pixels de bas niveau jusqu'aux combinaisons de parties d'image de haut niveau. -![Extraction de Caractéristiques Hiérarchiques](../../../../../translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.fr.png) +![Extraction hiérarchique de caractéristiques](../../../../../translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.fr.png) -> Image tirée d'[un article de Hislop-Lynch](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d), basé sur [leurs recherches](https://dl.acm.org/doi/abs/10.1145/1553374.1553453) +> Image tirée [d'un article de Hislop-Lynch](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d), basé sur [leurs recherches](https://dl.acm.org/doi/abs/10.1145/1553374.1553453) ## ✍️ Exercices : Réseaux de Neurones Convolutionnels -Continuons à explorer comment fonctionnent les réseaux de neurones convolutionnels et comment nous pouvons obtenir des filtres entraînables, en travaillant à travers les notebooks correspondants : +Continuons à explorer le fonctionnement des réseaux de neurones convolutionnels et comment nous pouvons obtenir des filtres entraînables, en travaillant sur les notebooks correspondants : * [Réseaux de Neurones Convolutionnels - PyTorch](../../../../../lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) * [Réseaux de Neurones Convolutionnels - TensorFlow](../../../../../lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) -## Architecture en Pyramide +## Architecture Pyramidale -La plupart des CNN utilisés pour le traitement d'images suivent une architecture en pyramide. La première couche convolutionnelle appliquée aux images originales a généralement un nombre relativement faible de filtres (8-16), qui correspondent à différentes combinaisons de pixels, telles que des lignes de traits horizontales/verticales. Au niveau suivant, nous réduisons la dimension spatiale du réseau et augmentons le nombre de filtres, ce qui correspond à plus de combinaisons possibles de caractéristiques simples. À chaque couche, à mesure que nous nous rapprochons du classificateur final, les dimensions spatiales de l'image diminuent et le nombre de filtres augmente. +La plupart des CNN utilisés pour le traitement d'images suivent une architecture dite pyramidale. La première couche convolutionnelle appliquée aux images originales comporte généralement un nombre relativement faible de filtres (8-16), qui correspondent à différentes combinaisons de pixels, telles que des lignes horizontales ou verticales. Au niveau suivant, nous réduisons la dimension spatiale du réseau et augmentons le nombre de filtres, ce qui correspond à davantage de combinaisons possibles de caractéristiques simples. À chaque couche, à mesure que nous nous rapprochons du classificateur final, les dimensions spatiales de l'image diminuent et le nombre de filtres augmente. -À titre d'exemple, examinons l'architecture de VGG-16, un réseau qui a atteint 92,7 % de précision dans la classification top-5 d'ImageNet en 2014 : +À titre d'exemple, examinons l'architecture de VGG-16, un réseau qui a atteint une précision de 92,7 % dans la classification top-5 d'ImageNet en 2014 : -![Couches ImageNet](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.fr.jpg) +![Couches d'ImageNet](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.fr.jpg) -![Pyramide ImageNet](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.fr.jpg) +![Pyramide d'ImageNet](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.fr.jpg) > Image tirée de [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) -## Architectures CNN les Plus Connues +## Architectures CNN les plus connues -[Continuez votre étude sur les architectures CNN les plus connues](CNN_Architectures.md) +[Continuez votre étude des architectures CNN les plus connues](CNN_Architectures.md) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/fr/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 0dbab911..69ee3753 100644 --- a/translations/fr/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/fr/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,20 +1,29 @@ -# Classification des Visages des Animaux de Compagnie + +# Classification des visages d'animaux de compagnie -Devoir de laboratoire du [Curriculum AI pour Débutants](https://github.com/microsoft/ai-for-beginners). +Devoir de laboratoire tiré du [programme AI for Beginners](https://github.com/microsoft/ai-for-beginners). ## Tâche -Imaginez que vous devez développer une application pour une nursery d'animaux de compagnie afin de cataloguer tous les animaux. L'une des grandes fonctionnalités d'une telle application serait de découvrir automatiquement la race à partir d'une photographie. Cela peut être réalisé avec succès en utilisant des réseaux de neurones. +Imaginez que vous devez développer une application pour une garderie pour animaux afin de cataloguer tous les animaux. L'une des fonctionnalités intéressantes d'une telle application serait de reconnaître automatiquement la race à partir d'une photographie. Cela peut être réalisé avec succès en utilisant des réseaux neuronaux. -Vous devez entraîner un réseau de neurones convolutionnel pour classifier différentes races de chats et de chiens en utilisant le jeu de données **Visages d'Animaux de Compagnie**. +Vous devez entraîner un réseau neuronal convolutif pour classer différentes races de chats et de chiens en utilisant le dataset **Pet Faces**. -## Le Jeu de Données +## Le Dataset -Nous allons utiliser le jeu de données **Visages d'Animaux de Compagnie**, dérivé du jeu de données [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) sur les animaux de compagnie. Il contient 35 races différentes de chiens et de chats. +Nous utiliserons le dataset **Pet Faces**, dérivé du dataset [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) pour animaux. Il contient 35 races différentes de chiens et de chats. -![Jeu de données avec lequel nous allons travailler](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.fr.png) +![Dataset que nous allons utiliser](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.fr.png) -Pour télécharger le jeu de données, utilisez ce extrait de code : +Pour télécharger le dataset, utilisez cet extrait de code : ```python !wget https://mslearntensorflowlp.blob.core.windows.net/data/petfaces.tar.gz @@ -22,13 +31,13 @@ Pour télécharger le jeu de données, utilisez ce extrait de code : !rm petfaces.tar.gz ``` -## Début du Notebook +## Démarrage du Notebook Commencez le laboratoire en ouvrant [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) -## À Retenir +## Résultat -Vous avez résolu un problème de classification d'images relativement complexe depuis le début ! Il y avait pas mal de classes, et vous avez tout de même réussi à obtenir une précision raisonnable ! Il est également judicieux de mesurer la précision top-k, car il est facile de confondre certaines classes qui ne sont pas clairement différentes même pour les êtres humains. +Vous avez résolu un problème relativement complexe de classification d'images à partir de zéro ! Il y avait un grand nombre de classes, et vous avez tout de même réussi à obtenir une précision raisonnable ! Il est également pertinent de mesurer la précision top-k, car il est facile de confondre certaines classes qui ne sont pas clairement distinctes, même pour des êtres humains. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/08-TransferLearning/README.md b/translations/fr/lessons/4-ComputerVision/08-TransferLearning/README.md index cd728b6d..7e1891f8 100644 --- a/translations/fr/lessons/4-ComputerVision/08-TransferLearning/README.md +++ b/translations/fr/lessons/4-ComputerVision/08-TransferLearning/README.md @@ -1,81 +1,90 @@ + # Réseaux pré-entraînés et apprentissage par transfert -L'entraînement des CNN peut prendre beaucoup de temps et nécessite une grande quantité de données. Cependant, une grande partie du temps est consacrée à l'apprentissage des meilleurs filtres de bas niveau qu'un réseau peut utiliser pour extraire des motifs à partir d'images. Une question naturelle se pose : peut-on utiliser un réseau de neurones entraîné sur un ensemble de données et l'adapter pour classer différentes images sans avoir besoin d'un processus d'entraînement complet ? +L'entraînement des CNN peut prendre beaucoup de temps, et une grande quantité de données est nécessaire pour cette tâche. Cependant, une grande partie du temps est consacrée à l'apprentissage des meilleurs filtres de bas niveau qu'un réseau peut utiliser pour extraire des motifs à partir d'images. Une question naturelle se pose : peut-on utiliser un réseau neuronal entraîné sur un ensemble de données et l'adapter pour classer des images différentes sans nécessiter un processus d'entraînement complet ? ## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/108) -Cette approche s'appelle **l'apprentissage par transfert**, car nous transférons une partie des connaissances d'un modèle de réseau de neurones à un autre. Dans l'apprentissage par transfert, nous commençons généralement avec un modèle pré-entraîné, qui a été entraîné sur un grand ensemble de données d'images, comme **ImageNet**. Ces modèles peuvent déjà faire un bon travail d'extraction de différentes caractéristiques à partir d'images génériques, et dans de nombreux cas, construire simplement un classificateur sur les caractéristiques extraites peut donner un bon résultat. +Cette approche est appelée **apprentissage par transfert**, car nous transférons une partie des connaissances d'un modèle de réseau neuronal à un autre. Dans l'apprentissage par transfert, nous commençons généralement par un modèle pré-entraîné, qui a été entraîné sur un grand ensemble de données d'images, comme **ImageNet**. Ces modèles sont déjà capables d'extraire efficacement différentes caractéristiques d'images génériques, et dans de nombreux cas, construire simplement un classificateur sur ces caractéristiques extraites peut donner de bons résultats. -> ✅ L'apprentissage par transfert est un terme que l'on trouve dans d'autres domaines académiques, comme l'éducation. Il fait référence au processus de prise de connaissances d'un domaine et de leur application à un autre. +> ✅ L'apprentissage par transfert est un terme que l'on retrouve dans d'autres domaines académiques, comme l'Éducation. Il fait référence au processus consistant à appliquer des connaissances d'un domaine à un autre. -## Modèles pré-entraînés en tant qu'extracteurs de caractéristiques +## Modèles pré-entraînés comme extracteurs de caractéristiques -Les réseaux de convolution dont nous avons parlé dans la section précédente contenaient un certain nombre de couches, chacune étant censée extraire certaines caractéristiques de l'image, à partir de combinaisons de pixels de bas niveau (comme des lignes horizontales/verticales ou des traits), jusqu'à des combinaisons de caractéristiques de niveau supérieur, correspondant à des choses comme l'œil d'une flamme. Si nous entraînons un CNN sur un ensemble de données suffisamment large d'images génériques et diverses, le réseau devrait apprendre à extraire ces caractéristiques communes. +Les réseaux convolutionnels que nous avons abordés dans la section précédente contiennent plusieurs couches, chacune étant censée extraire des caractéristiques de l'image, en commençant par des combinaisons de pixels de bas niveau (comme des lignes horizontales/verticales ou des traits), jusqu'à des combinaisons de caractéristiques de niveau supérieur, correspondant à des éléments comme un œil ou une flamme. Si nous entraînons un CNN sur un ensemble de données suffisamment grand et diversifié, le réseau devrait apprendre à extraire ces caractéristiques communes. -Keras et PyTorch contiennent des fonctions pour charger facilement les poids de réseaux de neurones pré-entraînés pour certaines architectures courantes, dont la plupart ont été entraînées sur des images ImageNet. Les plus souvent utilisés sont décrits sur la page [Architectures CNN](../07-ConvNets/CNN_Architectures.md) de la leçon précédente. En particulier, vous voudrez peut-être envisager d'utiliser l'un des suivants : +Keras et PyTorch contiennent tous deux des fonctions permettant de charger facilement les poids de réseaux neuronaux pré-entraînés pour certaines architectures courantes, dont la plupart ont été entraînées sur des images d'ImageNet. Les modèles les plus utilisés sont décrits sur la page [Architectures CNN](../07-ConvNets/CNN_Architectures.md) de la leçon précédente. En particulier, vous pourriez envisager d'utiliser l'un des modèles suivants : -* **VGG-16/VGG-19**, qui sont des modèles relativement simples mais qui offrent une bonne précision. Utiliser VGG comme première tentative est souvent un bon choix pour voir comment fonctionne l'apprentissage par transfert. -* **ResNet** est une famille de modèles proposés par Microsoft Research en 2015. Ils ont plus de couches et nécessitent donc plus de ressources. -* **MobileNet** est une famille de modèles de taille réduite, adaptés aux appareils mobiles. Utilisez-les si vous manquez de ressources et pouvez sacrifier un peu de précision. +* **VGG-16/VGG-19**, qui sont des modèles relativement simples offrant une bonne précision. Utiliser VGG comme première tentative est souvent un bon choix pour voir comment fonctionne l'apprentissage par transfert. +* **ResNet**, une famille de modèles proposée par Microsoft Research en 2015. Ils comportent plus de couches et nécessitent donc davantage de ressources. +* **MobileNet**, une famille de modèles de taille réduite, adaptés aux appareils mobiles. Utilisez-les si vous manquez de ressources et pouvez sacrifier un peu de précision. -Voici des caractéristiques extraites d'une image de chat par le réseau VGG-16 : +Voici des exemples de caractéristiques extraites d'une image de chat par le réseau VGG-16 : ![Caractéristiques extraites par VGG-16](../../../../../translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.fr.png) -## Ensemble de données Chats vs. Chiens +## Ensemble de données Chats vs Chiens -Dans cet exemple, nous allons utiliser un ensemble de données de [Chats et Chiens](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste), qui est très proche d'un scénario de classification d'images en conditions réelles. +Dans cet exemple, nous utiliserons un ensemble de données de [Chats et Chiens](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste), qui est très proche d'un scénario réel de classification d'images. -## ✍️ Exercice : Apprentissage par Transfert +## ✍️ Exercice : Apprentissage par transfert Voyons l'apprentissage par transfert en action dans les notebooks correspondants : -* [Apprentissage par Transfert - PyTorch](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) -* [Apprentissage par Transfert - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb) +* [Apprentissage par transfert - PyTorch](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) +* [Apprentissage par transfert - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb) -## Visualisation du Chat Adversarial +## Visualisation du chat adversarial -Le réseau de neurones pré-entraîné contient différents motifs dans son *cerveau*, y compris des notions de **chat idéal** (ainsi que de chien idéal, de zèbre idéal, etc.). Il serait intéressant de **visualiser cette image** d'une certaine manière. Cependant, ce n'est pas simple, car les motifs sont répartis sur tous les poids du réseau et sont également organisés dans une structure hiérarchique. +Un réseau neuronal pré-entraîné contient différents motifs dans son *cerveau*, y compris des notions de **chat idéal** (ainsi que de chien idéal, de zèbre idéal, etc.). Il serait intéressant de **visualiser cette image**. Cependant, ce n'est pas simple, car les motifs sont répartis dans les poids du réseau et organisés dans une structure hiérarchique. -Une approche que nous pouvons adopter est de commencer avec une image aléatoire, puis d'essayer d'utiliser la technique **d'optimisation par descente de gradient** pour ajuster cette image de manière à ce que le réseau commence à penser qu'il s'agit d'un chat. +Une approche consiste à partir d'une image aléatoire, puis à utiliser une technique d'optimisation par **descente de gradient** pour ajuster cette image de manière à ce que le réseau commence à penser qu'il s'agit d'un chat. -![Boucle d'Optimisation d'Image](../../../../../translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.fr.png) +![Boucle d'optimisation d'image](../../../../../translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.fr.png) -Cependant, si nous faisons cela, nous obtiendrons quelque chose de très similaire à un bruit aléatoire. Cela est dû au fait qu'il *existe de nombreuses façons de faire croire au réseau que l'image d'entrée est un chat*, y compris certaines qui n'ont pas de sens visuellement. Bien que ces images contiennent de nombreux motifs typiques d'un chat, il n'y a rien pour les contraindre à être visuellement distinctives. +Cependant, si nous faisons cela, nous obtiendrons quelque chose qui ressemble beaucoup à un bruit aléatoire. Cela s'explique par le fait qu'*il existe de nombreuses façons de faire croire au réseau que l'image d'entrée est un chat*, y compris certaines qui n'ont aucun sens visuellement. Bien que ces images contiennent de nombreux motifs typiques d'un chat, rien ne les contraint à être visuellement distinctives. -Pour améliorer le résultat, nous pouvons ajouter un autre terme dans la fonction de perte, qui est appelé **perte de variation**. C'est une métrique qui montre à quel point les pixels voisins de l'image sont similaires. Minimiser la perte de variation rend l'image plus lisse et élimine le bruit, révélant ainsi des motifs plus visuellement attrayants. Voici un exemple de telles images "idéales", qui sont classées comme chat et comme zèbre avec une forte probabilité : +Pour améliorer le résultat, nous pouvons ajouter un autre terme à la fonction de perte, appelé **perte de variation**. Il s'agit d'une métrique qui montre à quel point les pixels voisins de l'image sont similaires. Minimiser la perte de variation rend l'image plus lisse et élimine le bruit, révélant ainsi des motifs plus visuellement attrayants. Voici un exemple de telles images "idéales", classées comme chat et comme zèbre avec une forte probabilité : -![Chat Idéal](../../../../../translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.fr.png) | ![Zèbre Idéal](../../../../../translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.fr.png) +![Chat idéal](../../../../../translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.fr.png) | ![Zèbre idéal](../../../../../translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.fr.png) -----|----- - *Chat Idéal* | *Zèbre Idéal* +*Chat idéal* | *Zèbre idéal* -Une approche similaire peut être utilisée pour effectuer ce que l'on appelle des **attaques adversariales** sur un réseau de neurones. Supposons que nous voulons tromper un réseau de neurones et faire en sorte qu'un chien ressemble à un chat. Si nous prenons une image de chien, qui est reconnue par un réseau comme un chien, nous pouvons ensuite l'ajuster un peu à l'aide de l'optimisation par descente de gradient, jusqu'à ce que le réseau commence à la classifier comme un chat : +Une approche similaire peut être utilisée pour effectuer des **attaques adversariales** sur un réseau neuronal. Supposons que nous souhaitons tromper un réseau neuronal et faire en sorte qu'un chien ressemble à un chat. Si nous prenons l'image d'un chien, reconnue par le réseau comme un chien, nous pouvons ensuite la modifier légèrement à l'aide de l'optimisation par descente de gradient, jusqu'à ce que le réseau commence à la classer comme un chat : -![Image d'un Chien](../../../../../translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.fr.png) | ![Image d'un chien classé comme un chat](../../../../../translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.fr.png) +![Image d'un chien](../../../../../translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.fr.png) | ![Image d'un chien classée comme un chat](../../../../../translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.fr.png) -----|----- -*Image originale d'un chien* | *Image d'un chien classé comme un chat* +*Image originale d'un chien* | *Image d'un chien classée comme un chat* Consultez le code pour reproduire les résultats ci-dessus dans le notebook suivant : -* [Chat Idéal et Adversarial - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/AdversarialCat_TF.ipynb) +* [Chat idéal et adversarial - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/AdversarialCat_TF.ipynb) ## Conclusion -En utilisant l'apprentissage par transfert, vous pouvez rapidement assembler un classificateur pour une tâche de classification d'objets personnalisée et atteindre une haute précision. Vous pouvez constater que les tâches plus complexes que nous résolvons maintenant nécessitent une plus grande puissance de calcul et ne peuvent pas être facilement résolues sur un CPU. Dans l'unité suivante, nous essaierons d'utiliser une implémentation plus légère pour entraîner le même modèle en utilisant moins de ressources de calcul, ce qui se traduira par une précision légèrement inférieure. +Grâce à l'apprentissage par transfert, vous pouvez rapidement créer un classificateur pour une tâche de classification d'objets personnalisée et obtenir une grande précision. Vous pouvez constater que les tâches plus complexes que nous résolvons maintenant nécessitent une puissance de calcul plus élevée et ne peuvent pas être facilement résolues sur un CPU. Dans la prochaine unité, nous essayerons d'utiliser une implémentation plus légère pour entraîner le même modèle en utilisant moins de ressources de calcul, ce qui entraîne une précision légèrement inférieure. ## 🚀 Défi -Dans les notebooks accompagnants, il y a des notes en bas sur la façon dont le transfert de connaissances fonctionne mieux avec des données d'entraînement quelque peu similaires (un nouveau type d'animal, peut-être). Faites quelques expériences avec des types d'images complètement nouveaux pour voir à quel point vos modèles de transfert de connaissances fonctionnent bien ou mal. +Dans les notebooks associés, des notes en bas expliquent que l'apprentissage par transfert fonctionne mieux avec des données d'entraînement quelque peu similaires (un nouveau type d'animal, par exemple). Faites des expérimentations avec des types d'images complètement nouveaux pour voir à quel point vos modèles d'apprentissage par transfert fonctionnent bien ou mal. ## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) -## Révision et Auto-étude +## Révision et auto-apprentissage -Lisez [TrainingTricks.md](TrainingTricks.md) pour approfondir vos connaissances sur d'autres manières d'entraîner vos modèles. +Lisez [TrainingTricks.md](TrainingTricks.md) pour approfondir vos connaissances sur d'autres façons d'entraîner vos modèles. ## [Devoir](lab/README.md) -Dans ce laboratoire, nous utiliserons un ensemble de données de [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) sur les animaux de compagnie avec 35 races de chats et de chiens, et nous construirons un classificateur d'apprentissage par transfert. +Dans ce laboratoire, nous utiliserons l'ensemble de données réel [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) sur les animaux de compagnie, comprenant 35 races de chats et de chiens, et nous construirons un classificateur basé sur l'apprentissage par transfert. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md b/translations/fr/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md index e7c6261f..4f39d6e0 100644 --- a/translations/fr/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md +++ b/translations/fr/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md @@ -1,108 +1,117 @@ + # Astuces pour l'entraînement en Deep Learning -À mesure que les réseaux neuronaux deviennent plus profonds, le processus de leur entraînement devient de plus en plus complexe. Un problème majeur est le phénomène des [gradients qui disparaissent](https://en.wikipedia.org/wiki/Vanishing_gradient_problem) ou des [gradients explosifs](https://deepai.org/machine-learning-glossary-and-terms/exploding-gradient-problem#:~:text=Exploding%20gradients%20are%20a%20problem,updates%20are%20small%20and%20controlled.). [Cet article](https://towardsdatascience.com/the-vanishing-exploding-gradient-problem-in-deep-neural-networks-191358470c11) offre une bonne introduction à ces problèmes. +À mesure que les réseaux neuronaux deviennent plus profonds, leur entraînement devient de plus en plus complexe. Un problème majeur est celui des [gradients qui disparaissent](https://en.wikipedia.org/wiki/Vanishing_gradient_problem) ou des [gradients qui explosent](https://deepai.org/machine-learning-glossary-and-terms/exploding-gradient-problem#:~:text=Exploding%20gradients%20are%20a%20problem,updates%20are%20small%20and%20controlled.). [Cet article](https://towardsdatascience.com/the-vanishing-exploding-gradient-problem-in-deep-neural-networks-191358470c11) offre une bonne introduction à ces problèmes. -Pour rendre l'entraînement des réseaux profonds plus efficace, il existe quelques techniques à utiliser. +Pour rendre l'entraînement des réseaux profonds plus efficace, plusieurs techniques peuvent être utilisées. ## Maintenir les valeurs dans un intervalle raisonnable -Pour rendre les calculs numériques plus stables, nous voulons nous assurer que toutes les valeurs au sein de notre réseau neuronal sont dans une échelle raisonnable, généralement [-1..1] ou [0..1]. Ce n'est pas une exigence très stricte, mais la nature des calculs en virgule flottante fait que des valeurs de différentes magnitudes ne peuvent pas être manipulées avec précision ensemble. Par exemple, si nous ajoutons 10-10 et 1010, nous obtiendrons probablement 1010, car la valeur plus petite serait "convertie" au même ordre que la plus grande, et ainsi la mantisse serait perdue. +Pour stabiliser les calculs numériques, il est important de s'assurer que toutes les valeurs dans le réseau neuronal restent dans une échelle raisonnable, généralement [-1..1] ou [0..1]. Ce n'est pas une exigence stricte, mais la nature des calculs en virgule flottante fait que des valeurs de magnitudes différentes ne peuvent pas être manipulées avec précision ensemble. Par exemple, si nous additionnons 10-10 et 1010, nous obtiendrons probablement 1010, car la valeur plus petite sera "convertie" au même ordre que la plus grande, et la mantisse sera perdue. -La plupart des fonctions d'activation ont des non-linéarités autour de [-1..1], et il est donc logique de mettre à l'échelle toutes les données d'entrée dans l'intervalle [-1..1] ou [0..1]. +La plupart des fonctions d'activation présentent des non-linéarités autour de [-1..1], et il est donc logique de mettre à l'échelle toutes les données d'entrée dans l'intervalle [-1..1] ou [0..1]. ## Initialisation des poids -Idéalement, nous voulons que les valeurs soient dans la même plage après avoir traversé les couches du réseau. Il est donc important d'initialiser les poids de manière à préserver la distribution des valeurs. +Idéalement, nous voulons que les valeurs restent dans la même plage après avoir traversé les couches du réseau. Il est donc important d'initialiser les poids de manière à préserver la distribution des valeurs. -La distribution normale **N(0,1)** n'est pas une bonne idée, car si nous avons *n* entrées, l'écart type de la sortie serait *n*, et les valeurs risquent de sortir de l'intervalle [0..1]. +La distribution normale **N(0,1)** n'est pas une bonne idée, car si nous avons *n* entrées, l'écart-type de la sortie serait *n*, et les valeurs risquent de sortir de l'intervalle [0..1]. Les initialisations suivantes sont souvent utilisées : * Distribution uniforme -- `uniform` * **N(0,1/n)** -- `gaussian` - * **N(0,1/√n_in)** garantit que pour des entrées avec une moyenne nulle et un écart type de 1, la même moyenne/écart type sera maintenue - * **N(0,√2/(n_in+n_out))** -- ce qu'on appelle **initialisation Xavier** (`glorot`), cela aide à maintenir les signaux dans la plage pendant la propagation avant et arrière + * **N(0,1/√n_in)** garantit que pour des entrées avec une moyenne nulle et un écart-type de 1, la même moyenne/écart-type sera conservée + * **N(0,√2/(n_in+n_out))** -- appelée **initialisation Xavier** (`glorot`), elle aide à maintenir les signaux dans la plage pendant la propagation avant et arrière -## Normalisation par lots +## Normalisation par lot (Batch Normalization) -Même avec une bonne initialisation des poids, ceux-ci peuvent devenir arbitrairement grands ou petits pendant l'entraînement, et ils feront sortir les signaux de la plage appropriée. Nous pouvons ramener les signaux en utilisant l'une des techniques de **normalisation**. Bien qu'il en existe plusieurs (normalisation des poids, normalisation de couche), la plus couramment utilisée est la normalisation par lots. +Même avec une bonne initialisation des poids, ceux-ci peuvent devenir arbitrairement grands ou petits pendant l'entraînement, ce qui fait sortir les signaux de leur plage appropriée. Nous pouvons ramener les signaux dans la plage correcte en utilisant des techniques de **normalisation**. Bien qu'il en existe plusieurs (normalisation des poids, normalisation par couche), la plus couramment utilisée est la normalisation par lot. -L'idée de la **normalisation par lots** est de prendre en compte toutes les valeurs à travers le mini-batch et de réaliser la normalisation (c'est-à-dire soustraire la moyenne et diviser par l'écart type) en fonction de ces valeurs. Cela est implémenté comme une couche de réseau qui effectue cette normalisation après l'application des poids, mais avant la fonction d'activation. En conséquence, nous sommes susceptibles de voir une précision finale plus élevée et un entraînement plus rapide. +L'idée de la **normalisation par lot** est de prendre en compte toutes les valeurs d'un mini-lot et de normaliser (c'est-à-dire soustraire la moyenne et diviser par l'écart-type) en fonction de ces valeurs. Elle est implémentée comme une couche du réseau qui effectue cette normalisation après l'application des poids, mais avant la fonction d'activation. En conséquence, on observe généralement une meilleure précision finale et un entraînement plus rapide. -Voici le [document original](https://arxiv.org/pdf/1502.03167.pdf) sur la normalisation par lots, l'[explication sur Wikipedia](https://en.wikipedia.org/wiki/Batch_normalization), et [un bon article de blog introductif](https://towardsdatascience.com/batch-normalization-in-3-levels-of-understanding-14c2da90a338) (et celui [en russe](https://habrahabr.ru/post/309302/)). +Voici l'[article original](https://arxiv.org/pdf/1502.03167.pdf) sur la normalisation par lot, l'[explication sur Wikipedia](https://en.wikipedia.org/wiki/Batch_normalization), et [un bon article introductif](https://towardsdatascience.com/batch-normalization-in-3-levels-of-understanding-14c2da90a338) (et un autre [en russe](https://habrahabr.ru/post/309302/)). ## Dropout -Le **dropout** est une technique intéressante qui supprime un certain pourcentage de neurones aléatoires pendant l'entraînement. Elle est également implémentée comme une couche avec un paramètre (pourcentage de neurones à supprimer, généralement de 10 % à 50 %), et pendant l'entraînement, elle annule des éléments aléatoires du vecteur d'entrée avant de le transmettre à la couche suivante. +Le **Dropout** est une technique intéressante qui supprime un certain pourcentage de neurones aléatoires pendant l'entraînement. Il est également implémenté comme une couche avec un paramètre (pourcentage de neurones à supprimer, généralement entre 10 % et 50 %), et pendant l'entraînement, il met à zéro des éléments aléatoires du vecteur d'entrée avant de les transmettre à la couche suivante. -Bien que cela puisse sembler une idée étrange, vous pouvez voir l'effet du dropout sur l'entraînement d'un classificateur de chiffres MNIST dans le carnet [`Dropout.ipynb`](../../../../../lessons/4-ComputerVision/08-TransferLearning/Dropout.ipynb). Cela accélère l'entraînement et nous permet d'atteindre une précision plus élevée en moins d'époques d'entraînement. +Bien que cela puisse sembler étrange, vous pouvez observer l'effet du dropout sur l'entraînement d'un classificateur de chiffres MNIST dans le notebook [`Dropout.ipynb`](../../../../../lessons/4-ComputerVision/08-TransferLearning/Dropout.ipynb). Cela accélère l'entraînement et permet d'atteindre une meilleure précision en moins d'époques. Cet effet peut être expliqué de plusieurs manières : - * Cela peut être considéré comme un facteur de choc aléatoire pour le modèle, qui sort l'optimisation d'un minimum local - * Cela peut être considéré comme un *moyennage implicite du modèle*, car nous pouvons dire qu'au cours du dropout, nous entraînons un modèle légèrement différent + * On peut le considérer comme un facteur de choc aléatoire pour le modèle, qui le sort d'un minimum local + * On peut le considérer comme une *moyenne implicite de modèles*, car on peut dire qu'avec le dropout, on entraîne un modèle légèrement différent -> *Certaines personnes disent que lorsqu'une personne ivre essaie d'apprendre quelque chose, elle s'en souviendra mieux le lendemain matin, par rapport à une personne sobre, parce qu'un cerveau avec des neurones dysfonctionnels essaie de s'adapter mieux pour saisir le sens. Nous n'avons jamais testé nous-mêmes si cela est vrai ou non.* +> *Certains disent qu'une personne ivre qui essaie d'apprendre quelque chose le retiendra mieux le lendemain matin, comparée à une personne sobre, car un cerveau avec des neurones dysfonctionnels essaie de mieux s'adapter pour saisir le sens. Nous n'avons jamais testé si cela est vrai ou non.* -## Prévenir le surajustement +## Prévenir le surapprentissage -Un des aspects très importants du deep learning est d'être capable de prévenir le [surajustement](../../3-NeuralNetworks/05-Frameworks/Overfitting.md). Bien qu'il puisse être tentant d'utiliser un modèle de réseau neuronal très puissant, nous devrions toujours équilibrer le nombre de paramètres du modèle avec le nombre d'échantillons d'entraînement. +Un aspect très important du deep learning est de savoir prévenir le [surapprentissage](../../3-NeuralNetworks/05-Frameworks/Overfitting.md). Bien qu'il puisse être tentant d'utiliser un modèle de réseau neuronal très puissant, il faut toujours équilibrer le nombre de paramètres du modèle avec le nombre d'échantillons d'entraînement. -> Assurez-vous de bien comprendre le concept de [surajustement](../../3-NeuralNetworks/05-Frameworks/Overfitting.md) que nous avons introduit précédemment ! +> Assurez-vous de bien comprendre le concept de [surapprentissage](../../3-NeuralNetworks/05-Frameworks/Overfitting.md) que nous avons introduit précédemment ! -Il existe plusieurs façons de prévenir le surajustement : +Il existe plusieurs façons de prévenir le surapprentissage : - * Arrêt précoce -- surveiller continuellement l'erreur sur l'ensemble de validation et arrêter l'entraînement lorsque l'erreur de validation commence à augmenter. - * Décroissance de poids explicite / Régularisation -- ajout d'une pénalité supplémentaire à la fonction de perte pour des valeurs absolues élevées des poids, ce qui empêche le modèle d'obtenir des résultats très instables - * Moyennage de modèles -- entraîner plusieurs modèles et ensuite moyenniser les résultats. Cela aide à minimiser la variance. - * Dropout (Moyennage implicite du modèle) + * Arrêt anticipé -- surveiller en continu l'erreur sur l'ensemble de validation et arrêter l'entraînement lorsque l'erreur de validation commence à augmenter. + * Décroissance explicite des poids / Régularisation -- ajouter une pénalité supplémentaire à la fonction de perte pour des valeurs absolues élevées des poids, ce qui empêche le modèle d'obtenir des résultats très instables + * Moyenne des modèles -- entraîner plusieurs modèles et ensuite moyenner les résultats. Cela aide à minimiser la variance. + * Dropout (Moyenne implicite des modèles) -## Optimisateurs / Algorithmes d'entraînement +## Optimiseurs / Algorithmes d'entraînement -Un autre aspect important de l'entraînement est de choisir un bon algorithme d'entraînement. Bien que la **descente de gradient** classique soit un choix raisonnable, elle peut parfois être trop lente ou entraîner d'autres problèmes. +Un autre aspect important de l'entraînement est de choisir un bon algorithme d'entraînement. Bien que le **gradient descent** classique soit un choix raisonnable, il peut parfois être trop lent ou entraîner d'autres problèmes. -En deep learning, nous utilisons la **descente de gradient stochastique** (SGD), qui est une descente de gradient appliquée aux mini-batchs, sélectionnés aléatoirement dans l'ensemble d'entraînement. Les poids sont ajustés à l'aide de cette formule : +En deep learning, nous utilisons le **Stochastic Gradient Descent** (SGD), qui est un gradient descent appliqué à des mini-lots sélectionnés aléatoirement dans l'ensemble d'entraînement. Les poids sont ajustés selon cette formule : wt+1 = wt - η∇ℒ ### Momentum -Dans le **momentum SGD**, nous conservons une partie d'un gradient des étapes précédentes. C'est similaire à lorsque nous nous déplaçons avec une inertie, et que nous recevons un coup dans une direction différente, notre trajectoire ne change pas immédiatement, mais conserve une partie du mouvement original. Ici, nous introduisons un autre vecteur v pour représenter la *vitesse* : +Dans le **momentum SGD**, nous conservons une partie du gradient des étapes précédentes. Cela ressemble à un mouvement avec inertie : si nous recevons une impulsion dans une direction différente, notre trajectoire ne change pas immédiatement, mais conserve une partie du mouvement initial. Ici, nous introduisons un autre vecteur v pour représenter la *vitesse* : * vt+1 = γ vt - η∇ℒ -* wt+1 = wt + vt+1 +* wt+1 = wt+vt+1 -Ici, le paramètre γ indique dans quelle mesure nous prenons en compte l'inertie : γ=0 correspond à la SGD classique ; γ=1 est une équation de mouvement pure. +Le paramètre γ indique dans quelle mesure nous prenons en compte l'inertie : γ=0 correspond au SGD classique ; γ=1 est une équation de mouvement pure. ### Adam, Adagrad, etc. -Puisque dans chaque couche nous multiplions les signaux par une matrice Wi, selon ||Wi||, le gradient peut soit diminuer et être proche de 0, soit augmenter indéfiniment. C'est l'essence du problème des gradients explosifs/disparus. +Dans chaque couche, nous multiplions les signaux par une matrice Wi. Selon ||Wi||, le gradient peut soit diminuer et être proche de 0, soit augmenter indéfiniment. C'est l'essence du problème des gradients qui explosent/disparaissent. -Une des solutions à ce problème est d'utiliser uniquement la direction du gradient dans l'équation, et d'ignorer la valeur absolue, c'est-à-dire : +Une solution à ce problème est d'utiliser uniquement la direction du gradient dans l'équation, en ignorant la valeur absolue, c'est-à-dire : wt+1 = wt - η(∇ℒ/||∇ℒ||), où ||∇ℒ|| = √∑(∇ℒ)2 -Cet algorithme s'appelle **Adagrad**. D'autres algorithmes qui utilisent la même idée : **RMSProp**, **Adam**. +Cet algorithme est appelé **Adagrad**. D'autres algorithmes utilisant la même idée : **RMSProp**, **Adam** -> **Adam** est considéré comme un algorithme très efficace pour de nombreuses applications, donc si vous n'êtes pas sûr du modèle à utiliser - utilisez Adam. +> **Adam** est considéré comme un algorithme très efficace pour de nombreuses applications. Si vous ne savez pas lequel utiliser, choisissez Adam. -### Découpage de gradient +### Clipping des gradients -Le découpage de gradient est une extension de l'idée ci-dessus. Lorsque ||∇ℒ|| ≤ θ, nous considérons le gradient original dans l'optimisation des poids, et lorsque ||∇ℒ|| > θ - nous divisons le gradient par sa norme. Ici, θ est un paramètre, dans la plupart des cas, nous pouvons prendre θ=1 ou θ=10. +Le clipping des gradients est une extension de l'idée précédente. Lorsque ||∇ℒ|| ≤ θ, nous utilisons le gradient original dans l'optimisation des poids, et lorsque ||∇ℒ|| > θ, nous divisons le gradient par sa norme. Ici, θ est un paramètre, dans la plupart des cas, on peut prendre θ=1 ou θ=10. ### Décroissance du taux d'apprentissage -Le succès de l'entraînement dépend souvent du paramètre de taux d'apprentissage η. Il est logique de supposer que des valeurs plus grandes de η entraînent un entraînement plus rapide, ce qui est quelque chose que nous voulons généralement au début de l'entraînement, et ensuite une valeur plus petite de η nous permet de peaufiner le réseau. Ainsi, dans la plupart des cas, nous voulons diminuer η au cours de l'entraînement. +Le succès de l'entraînement dépend souvent du paramètre de taux d'apprentissage η. Il est logique de supposer que des valeurs plus grandes de η entraînent un apprentissage plus rapide, ce qui est souhaitable au début de l'entraînement, tandis que des valeurs plus petites de η permettent de peaufiner le réseau. Ainsi, dans la plupart des cas, nous voulons diminuer η au cours de l'entraînement. -Cela peut être fait en multipliant η par un certain nombre (par exemple 0.98) après chaque époque d'entraînement, ou en utilisant un **planning de taux d'apprentissage** plus complexe. +Cela peut être fait en multipliant η par un certain nombre (par exemple, 0,98) après chaque époque d'entraînement, ou en utilisant un **planning de taux d'apprentissage** plus complexe. -## Différentes architectures de réseau +## Différentes architectures de réseaux -Sélectionner la bonne architecture de réseau pour votre problème peut être délicat. Normalement, nous choisirions une architecture qui a prouvé son efficacité pour notre tâche spécifique (ou une tâche similaire). Voici un [bon aperçu](https://www.topbots.com/a-brief-history-of-neural-network-architectures/) des architectures de réseaux neuronaux pour la vision par ordinateur. +Choisir la bonne architecture de réseau pour votre problème peut être délicat. En général, on choisit une architecture qui a fait ses preuves pour une tâche spécifique (ou similaire). Voici un [bon aperçu](https://www.topbots.com/a-brief-history-of-neural-network-architectures/) des architectures de réseaux neuronaux pour la vision par ordinateur. -> Il est important de sélectionner une architecture qui sera suffisamment puissante pour le nombre d'échantillons d'entraînement que nous avons. Choisir un modèle trop puissant peut entraîner un [surajustement](../../3-NeuralNetworks/05-Frameworks/Overfitting.md). +> Il est important de choisir une architecture suffisamment puissante pour le nombre d'échantillons d'entraînement dont nous disposons. Choisir un modèle trop puissant peut entraîner un [surapprentissage](../../3-NeuralNetworks/05-Frameworks/Overfitting.md). -Une autre bonne méthode serait d'utiliser une architecture qui s'ajustera automatiquement à la complexité requise. Dans une certaine mesure, les architectures **ResNet** et **Inception** sont auto-ajustables. [Plus sur les architectures de vision par ordinateur](../07-ConvNets/CNN_Architectures.md). +Une autre bonne approche consiste à utiliser une architecture qui s'ajuste automatiquement à la complexité requise. Dans une certaine mesure, les architectures **ResNet** et **Inception** sont auto-ajustables. [Plus d'informations sur les architectures de vision par ordinateur](../07-ConvNets/CNN_Architectures.md). **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/08-TransferLearning/lab/README.md b/translations/fr/lessons/4-ComputerVision/08-TransferLearning/lab/README.md index 71644b4b..d5d978a3 100644 --- a/translations/fr/lessons/4-ComputerVision/08-TransferLearning/lab/README.md +++ b/translations/fr/lessons/4-ComputerVision/08-TransferLearning/lab/README.md @@ -1,16 +1,25 @@ -# Classification des animaux de compagnie d'Oxford en utilisant l'apprentissage par transfert + +# Classification des animaux d'Oxford à l'aide de l'apprentissage par transfert -Devoir du [Curriculum AI pour Débutants](https://github.com/microsoft/ai-for-beginners). +Devoir pratique tiré du [programme AI for Beginners](https://github.com/microsoft/ai-for-beginners). ## Tâche -Imaginez que vous devez développer une application pour une crèche pour animaux afin de cataloguer tous les animaux de compagnie. L'une des grandes fonctionnalités d'une telle application serait de découvrir automatiquement la race à partir d'une photographie. Dans ce devoir, nous utiliserons l'apprentissage par transfert pour classifier des images réelles d'animaux de compagnie à partir du jeu de données [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). +Imaginez que vous devez développer une application pour une garderie pour animaux afin de cataloguer tous les animaux. L'une des fonctionnalités intéressantes d'une telle application serait de reconnaître automatiquement la race à partir d'une photographie. Dans cet exercice, nous utiliserons l'apprentissage par transfert pour classifier des images réelles d'animaux issues du jeu de données [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). -## Le Jeu de Données +## Le jeu de données Nous utiliserons le jeu de données original [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/), qui contient 35 races différentes de chiens et de chats. -Pour télécharger le jeu de données, utilisez ce fragment de code : +Pour télécharger le jeu de données, utilisez cet extrait de code : ```python !wget https://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz @@ -18,13 +27,13 @@ Pour télécharger le jeu de données, utilisez ce fragment de code : !rm images.tar.gz ``` -## Démarrage du Notebook +## Démarrage du notebook -Commencez le laboratoire en ouvrant [OxfordPets.ipynb](../../../../../../lessons/4-ComputerVision/08-TransferLearning/lab/OxfordPets.ipynb) +Commencez le devoir en ouvrant [OxfordPets.ipynb](../../../../../../lessons/4-ComputerVision/08-TransferLearning/lab/OxfordPets.ipynb) -## Conclusion +## Points à retenir -L'apprentissage par transfert et les réseaux pré-entraînés nous permettent de résoudre des problèmes de classification d'images du monde réel relativement facilement. Cependant, les réseaux pré-entraînés fonctionnent bien sur des images de type similaire, et si nous commençons à classifier des images très différentes (par exemple, des images médicales), nous risquons d'obtenir des résultats beaucoup moins bons. +L'apprentissage par transfert et les réseaux pré-entraînés nous permettent de résoudre relativement facilement des problèmes de classification d'images du monde réel. Cependant, les réseaux pré-entraînés fonctionnent bien sur des images de type similaire, et si nous commençons à classifier des images très différentes (par exemple, des images médicales), nous risquons d'obtenir des résultats bien moins satisfaisants. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/09-Autoencoders/README.md b/translations/fr/lessons/4-ComputerVision/09-Autoencoders/README.md index 56ab05c5..92fcb6e7 100644 --- a/translations/fr/lessons/4-ComputerVision/09-Autoencoders/README.md +++ b/translations/fr/lessons/4-ComputerVision/09-Autoencoders/README.md @@ -1,100 +1,109 @@ + # Autoencodeurs -Lors de l'entraînement de CNN, l'un des problèmes est que nous avons besoin de beaucoup de données étiquetées. Dans le cas de la classification d'images, nous devons séparer les images en différentes classes, ce qui nécessite un effort manuel. +Lors de l'entraînement des CNN, l'un des problèmes est que nous avons besoin de beaucoup de données étiquetées. Dans le cas de la classification d'images, nous devons séparer les images en différentes classes, ce qui demande un effort manuel. -## [Quiz pré-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/109) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/109) -Cependant, nous pourrions vouloir utiliser des données brutes (non étiquetées) pour entraîner des extracteurs de caractéristiques CNN, ce qui s'appelle **l'apprentissage auto-supervisé**. Au lieu d'étiquettes, nous utiliserons les images d'entraînement comme entrée et sortie du réseau. L'idée principale de l'**autoencodeur** est que nous aurons un **réseau encodeur** qui convertit l'image d'entrée en un **espace latent** (normalement, c'est juste un vecteur de taille plus petite), puis le **réseau décodeur**, dont le but serait de reconstruire l'image originale. +Cependant, nous pourrions vouloir utiliser des données brutes (non étiquetées) pour entraîner des extracteurs de caractéristiques CNN, ce que l'on appelle **l'apprentissage auto-supervisé**. Au lieu d'utiliser des étiquettes, nous utilisons les images d'entraînement à la fois comme entrée et sortie du réseau. L'idée principale de l'**autoencodeur** est d'avoir un **réseau encodeur** qui convertit l'image d'entrée en un certain **espace latent** (généralement un vecteur de taille réduite), puis un **réseau décodeur**, dont l'objectif est de reconstruire l'image originale. > ✅ Un [autoencodeur](https://wikipedia.org/wiki/Autoencoder) est "un type de réseau de neurones artificiels utilisé pour apprendre des codages efficaces de données non étiquetées." -Puisque nous entraînons un autoencodeur pour capturer autant d'informations que possible de l'image originale pour une reconstruction précise, le réseau essaie de trouver le meilleur **embedding** des images d'entrée pour capturer le sens. +Comme nous entraînons un autoencodeur pour capturer autant d'informations que possible de l'image originale afin de la reconstruire avec précision, le réseau essaie de trouver la meilleure **représentation** des images d'entrée pour en capturer le sens. -![Diagramme AutoEncodeur](../../../../../translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.fr.jpg) +![Schéma Autoencodeur](../../../../../translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.fr.jpg) -> Image provenant du [blog Keras](https://blog.keras.io/building-autoencoders-in-keras.html) +> Image tirée du [blog Keras](https://blog.keras.io/building-autoencoders-in-keras.html) -## Scénarios d'utilisation des Autoencodeurs +## Scénarios d'utilisation des autoencodeurs Bien que reconstruire des images originales ne semble pas utile en soi, il existe quelques scénarios où les autoencodeurs sont particulièrement utiles : -* **Réduction de la dimension des images pour la visualisation** ou **entraînement des embeddings d'images**. En général, les autoencodeurs donnent de meilleurs résultats que la PCA, car ils prennent en compte la nature spatiale des images et les caractéristiques hiérarchiques. -* **Dénuisage**, c'est-à-dire suppression du bruit de l'image. Comme le bruit contient beaucoup d'informations inutiles, l'autoencodeur ne peut pas tout intégrer dans un espace latent relativement petit, et il capture donc uniquement la partie importante de l'image. Lors de l'entraînement des débruiteurs, nous commençons avec des images originales et utilisons des images avec du bruit ajouté artificiellement comme entrée pour l'autoencodeur. -* **Super-résolution**, augmentation de la résolution de l'image. Nous commençons avec des images haute résolution et utilisons l'image de plus basse résolution comme entrée de l'autoencodeur. -* **Modèles génératifs**. Une fois que nous avons entraîné l'autoencodeur, la partie décodeur peut être utilisée pour créer de nouveaux objets à partir de vecteurs latents aléatoires. +* **Réduction de la dimension des images pour la visualisation** ou **entraînement des représentations d'images**. Les autoencodeurs donnent généralement de meilleurs résultats que l'ACP, car ils prennent en compte la nature spatiale des images et les caractéristiques hiérarchiques. +* **Dénoiser**, c'est-à-dire supprimer le bruit de l'image. Comme le bruit contient beaucoup d'informations inutiles, l'autoencodeur ne peut pas tout intégrer dans un espace latent relativement petit, et capture donc uniquement la partie importante de l'image. Lors de l'entraînement des débruiteurs, nous partons d'images originales et utilisons des images avec du bruit artificiellement ajouté comme entrée pour l'autoencodeur. +* **Super-résolution**, augmentation de la résolution des images. Nous partons d'images haute résolution et utilisons l'image avec une résolution inférieure comme entrée de l'autoencodeur. +* **Modèles génératifs**. Une fois l'autoencodeur entraîné, la partie décodeur peut être utilisée pour créer de nouveaux objets à partir de vecteurs latents aléatoires. ## Autoencodeurs Variationnels (VAE) -Les autoencodeurs traditionnels réduisent d'une certaine manière la dimension des données d'entrée, en identifiant les caractéristiques importantes des images d'entrée. Cependant, les vecteurs latents n'ont souvent pas beaucoup de sens. En d'autres termes, en prenant le jeu de données MNIST comme exemple, il n'est pas facile de déterminer quels chiffres correspondent à différents vecteurs latents, car des vecteurs latents proches ne correspondent pas nécessairement aux mêmes chiffres. +Les autoencodeurs traditionnels réduisent la dimension des données d'entrée d'une certaine manière, en identifiant les caractéristiques importantes des images d'entrée. Cependant, les vecteurs latents n'ont souvent pas beaucoup de sens. En d'autres termes, en prenant l'exemple du jeu de données MNIST, il n'est pas facile de déterminer quels chiffres correspondent à différents vecteurs latents, car des vecteurs latents proches ne correspondent pas nécessairement aux mêmes chiffres. -D'autre part, pour entraîner des modèles *génératifs*, il est préférable d'avoir une certaine compréhension de l'espace latent. Cette idée nous conduit à l'**autoencodeur variationnel** (VAE). +En revanche, pour entraîner des modèles *génératifs*, il est préférable de comprendre l'espace latent. Cette idée nous conduit à l'**autoencodeur variationnel** (VAE). -Le VAE est l'autoencodeur qui apprend à prédire *la distribution statistique* des paramètres latents, appelée **distribution latente**. Par exemple, nous pouvons vouloir que les vecteurs latents soient distribués normalement avec une certaine moyenne zmean et un écart type zsigma (la moyenne et l'écart type sont tous deux des vecteurs d'une certaine dimensionnalité d). L'encodeur dans le VAE apprend à prédire ces paramètres, puis le décodeur prend un vecteur aléatoire de cette distribution pour reconstruire l'objet. +Le VAE est un autoencodeur qui apprend à prédire une *distribution statistique* des paramètres latents, appelée **distribution latente**. Par exemple, nous pouvons vouloir que les vecteurs latents soient distribués normalement avec une certaine moyenne zmean et un écart-type zsigma (la moyenne et l'écart-type étant tous deux des vecteurs de dimensionnalité d). L'encodeur dans le VAE apprend à prédire ces paramètres, puis le décodeur prend un vecteur aléatoire de cette distribution pour reconstruire l'objet. Pour résumer : -* À partir du vecteur d'entrée, nous prédisons `z_mean` et `z_log_sigma` (au lieu de prédire l'écart type lui-même, nous prédisons son logarithme) -* Nous échantillonnons un vecteur `sample` à partir de la distribution N(zmean,exp(zlog\_sigma)) -* Le décodeur essaie de décoder l'image originale en utilisant `sample` comme vecteur d'entrée + * À partir du vecteur d'entrée, nous prédisons `z_mean` et `z_log_sigma` (au lieu de prédire directement l'écart-type, nous prédisons son logarithme) + * Nous échantillonnons un vecteur `sample` à partir de la distribution N(zmean,exp(zlog\_sigma)) + * Le décodeur essaie de décoder l'image originale en utilisant `sample` comme vecteur d'entrée - + -> Image provenant de [cet article de blog](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) par Isaak Dykeman +> Image tirée de [cet article de blog](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) par Isaak Dykeman -Les autoencodeurs variationnels utilisent une fonction de perte complexe qui se compose de deux parties : +Les autoencodeurs variationnels utilisent une fonction de perte complexe composée de deux parties : -* **Perte de reconstruction** est la fonction de perte qui montre à quel point une image reconstruite est proche de la cible (cela peut être l'erreur quadratique moyenne, ou MSE). C'est la même fonction de perte que dans les autoencodeurs normaux. -* **Perte KL**, qui garantit que les distributions des variables latentes restent proches de la distribution normale. Elle est basée sur la notion de [divergence Kullback-Leibler](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained) - une métrique pour estimer à quel point deux distributions statistiques sont similaires. +* **Perte de reconstruction**, qui est la fonction de perte indiquant à quel point une image reconstruite est proche de la cible (cela peut être l'erreur quadratique moyenne, ou MSE). C'est la même fonction de perte que dans les autoencodeurs normaux. +* **Perte KL**, qui garantit que les distributions des variables latentes restent proches d'une distribution normale. Elle est basée sur la notion de [divergence de Kullback-Leibler](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained) - une métrique pour estimer la similarité entre deux distributions statistiques. -Un avantage important des VAE est qu'ils nous permettent de générer de nouvelles images relativement facilement, car nous savons quelle distribution utiliser pour échantillonner les vecteurs latents. Par exemple, si nous entraînons un VAE avec un vecteur latent 2D sur MNIST, nous pouvons ensuite faire varier les composants du vecteur latent pour obtenir différents chiffres : +Un avantage important des VAE est qu'ils permettent de générer de nouvelles images relativement facilement, car nous savons de quelle distribution échantillonner les vecteurs latents. Par exemple, si nous entraînons un VAE avec un vecteur latent 2D sur MNIST, nous pouvons ensuite faire varier les composantes du vecteur latent pour obtenir différents chiffres : vaemnist > Image par [Dmitry Soshnikov](http://soshnikov.com) -Observez comment les images se fondent les unes dans les autres, alors que nous commençons à obtenir des vecteurs latents provenant de différentes portions de l'espace des paramètres latents. Nous pouvons également visualiser cet espace en 2D : +Observez comment les images se fondent les unes dans les autres, à mesure que nous obtenons des vecteurs latents provenant de différentes parties de l'espace des paramètres latents. Nous pouvons également visualiser cet espace en 2D : -vaemnist cluster +vaemnist cluster > Image par [Dmitry Soshnikov](http://soshnikov.com) ## ✍️ Exercices : Autoencodeurs -Apprenez-en davantage sur les autoencodeurs dans ces carnets correspondants : +Apprenez-en davantage sur les autoencodeurs dans ces notebooks correspondants : -* [Autoencodeurs dans TensorFlow](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) -* [Autoencodeurs dans PyTorch](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) +* [Autoencodeurs avec TensorFlow](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) +* [Autoencodeurs avec PyTorch](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) ## Propriétés des Autoencodeurs -* **Spécifique aux données** - ils ne fonctionnent bien qu'avec le type d'images sur lequel ils ont été entraînés. Par exemple, si nous entraînons un réseau de super-résolution sur des fleurs, il ne fonctionnera pas bien sur des portraits. Cela est dû au fait que le réseau peut produire une image de plus haute résolution en prenant des détails fins des caractéristiques apprises à partir du jeu de données d'entraînement. -* **Avec perte** - l'image reconstruite n'est pas la même que l'image originale. La nature de la perte est définie par la *fonction de perte* utilisée pendant l'entraînement. -* Fonctionne sur **des données non étiquetées**. +* **Spécifiques aux données** - ils ne fonctionnent bien qu'avec le type d'images sur lequel ils ont été entraînés. Par exemple, si nous entraînons un réseau de super-résolution sur des fleurs, il ne fonctionnera pas bien sur des portraits. Cela s'explique par le fait que le réseau peut produire une image de résolution supérieure en utilisant les détails fins appris à partir du jeu de données d'entraînement. +* **Avec perte** - l'image reconstruite n'est pas identique à l'image originale. La nature de la perte est définie par la *fonction de perte* utilisée pendant l'entraînement. +* Fonctionne sur des données **non étiquetées** -## [Quiz post-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/209) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/209) ## Conclusion -Dans cette leçon, vous avez appris les différents types d'autoencodeurs disponibles pour le scientifique de l'IA. Vous avez appris à les construire et à les utiliser pour reconstruire des images. Vous avez également appris sur le VAE et comment l'utiliser pour générer de nouvelles images. +Dans cette leçon, vous avez appris les différents types d'autoencodeurs disponibles pour le scientifique en IA. Vous avez appris à les construire et à les utiliser pour reconstruire des images. Vous avez également découvert le VAE et comment l'utiliser pour générer de nouvelles images. ## 🚀 Défi -Dans cette leçon, vous avez appris à utiliser des autoencodeurs pour des images. Mais ils peuvent également être utilisés pour la musique ! Découvrez le projet [MusicVAE](https://magenta.tensorflow.org/music-vae) du projet Magenta, qui utilise des autoencodeurs pour apprendre à reconstruire de la musique. Faites quelques [expériences](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb) avec cette bibliothèque pour voir ce que vous pouvez créer. +Dans cette leçon, vous avez appris à utiliser les autoencodeurs pour les images. Mais ils peuvent également être utilisés pour la musique ! Consultez le projet [MusicVAE](https://magenta.tensorflow.org/music-vae) du projet Magenta, qui utilise des autoencodeurs pour apprendre à reconstruire de la musique. Faites quelques [expériences](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb) avec cette bibliothèque pour voir ce que vous pouvez créer. -## [Quiz post-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) -## Revue & Auto-apprentissage +## Révision & Auto-apprentissage -Pour référence, lisez-en plus sur les autoencodeurs dans ces ressources : +Pour référence, lisez-en davantage sur les autoencodeurs dans ces ressources : -* [Construire des Autoencodeurs dans Keras](https://blog.keras.io/building-autoencoders-in-keras.html) +* [Construire des Autoencodeurs avec Keras](https://blog.keras.io/building-autoencoders-in-keras.html) * [Article de blog sur NeuroHive](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/) -* [Autoencodeurs Variationnels Expliqués](https://kvfrans.com/variational-autoencoders-explained/) +* [Explication des Autoencodeurs Variationnels](https://kvfrans.com/variational-autoencoders-explained/) * [Autoencodeurs Variationnels Conditionnels](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) ## Devoir -À la fin de [ce carnet utilisant TensorFlow](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb), vous trouverez une 'tâche' - utilisez ceci comme votre devoir. +À la fin de [ce notebook utilisant TensorFlow](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb), vous trouverez une "tâche" - utilisez-la comme devoir. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/10-GANs/README.md b/translations/fr/lessons/4-ComputerVision/10-GANs/README.md index 64cbaf58..4915c05e 100644 --- a/translations/fr/lessons/4-ComputerVision/10-GANs/README.md +++ b/translations/fr/lessons/4-ComputerVision/10-GANs/README.md @@ -1,10 +1,19 @@ -# Réseaux Antagonistes Génératifs + +# Réseaux Adversaires Génératifs Dans la section précédente, nous avons appris sur les **modèles génératifs** : des modèles capables de générer de nouvelles images similaires à celles du jeu de données d'entraînement. Le VAE était un bon exemple de modèle génératif. -## [Quiz pré-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/110) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/110) -Cependant, si nous essayons de générer quelque chose de vraiment significatif, comme une peinture à une résolution raisonnable, avec un VAE, nous verrons que l'entraînement ne converge pas bien. Pour ce cas d'utilisation, nous devrions nous renseigner sur une autre architecture spécifiquement destinée aux modèles génératifs - **Réseaux Antagonistes Génératifs**, ou GANs. +Cependant, si nous essayons de générer quelque chose de vraiment significatif, comme une peinture avec une résolution raisonnable, avec un VAE, nous constaterons que l'entraînement ne converge pas bien. Pour ce cas d'utilisation, nous devrions nous intéresser à une autre architecture spécifiquement conçue pour les modèles génératifs - les **Réseaux Adversaires Génératifs**, ou GANs. L'idée principale d'un GAN est d'avoir deux réseaux neuronaux qui seront entraînés l'un contre l'autre : @@ -12,25 +21,25 @@ L'idée principale d'un GAN est d'avoir deux réseaux neuronaux qui seront entra > Image par [Dmitry Soshnikov](http://soshnikov.com) -> ✅ Un petit vocabulaire : -> * **Générateur** est un réseau qui prend un vecteur aléatoire et produit l'image en résultat -> * **Discriminateur** est un réseau qui prend une image et doit dire si c'est une image réelle (du jeu de données d'entraînement) ou si elle a été générée par un générateur. C'est essentiellement un classificateur d'images. +> ✅ Un peu de vocabulaire : +> * **Générateur** : un réseau qui prend un vecteur aléatoire et produit une image en résultat. +> * **Discriminateur** : un réseau qui prend une image et doit déterminer si elle est une image réelle (provenant du jeu de données d'entraînement) ou si elle a été générée par un générateur. C'est essentiellement un classificateur d'images. ### Discriminateur -L'architecture du discriminateur ne diffère pas d'un réseau de classification d'images ordinaire. Dans le cas le plus simple, il peut s'agir d'un classificateur entièrement connecté, mais très probablement, il s'agira d'un [réseau de convolution](../07-ConvNets/README.md). +L'architecture du discriminateur ne diffère pas d'un réseau de classification d'images ordinaire. Dans le cas le plus simple, il peut s'agir d'un classificateur entièrement connecté, mais il sera très probablement un [réseau convolutionnel](../07-ConvNets/README.md). -> ✅ Un GAN basé sur des réseaux de convolution est appelé un [DCGAN](https://arxiv.org/pdf/1511.06434.pdf) +> ✅ Un GAN basé sur des réseaux convolutionnels est appelé un [DCGAN](https://arxiv.org/pdf/1511.06434.pdf) -Un discriminateur CNN se compose des couches suivantes : plusieurs convolutions+poolings (avec une taille spatiale décroissante) et une ou plusieurs couches entièrement connectées pour obtenir un "vecteur de caractéristiques", le classificateur binaire final. +Un discriminateur CNN se compose des couches suivantes : plusieurs convolutions+poolings (avec une taille spatiale décroissante) et une ou plusieurs couches entièrement connectées pour obtenir un "vecteur de caractéristiques", suivi d'un classificateur binaire final. -> ✅ Un 'pooling' dans ce contexte est une technique qui réduit la taille de l'image. "Les couches de pooling réduisent les dimensions des données en combinant les sorties des clusters de neurones à une couche en un seul neurone à la couche suivante." - [source](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers) +> ✅ Un 'pooling' dans ce contexte est une technique qui réduit la taille de l'image. "Les couches de pooling réduisent les dimensions des données en combinant les sorties de clusters de neurones à une couche en un seul neurone dans la couche suivante." - [source](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers) ### Générateur -Un générateur est légèrement plus complexe. Vous pouvez le considérer comme un discriminateur inversé. Partant d'un vecteur latent (à la place d'un vecteur de caractéristiques), il a une couche entièrement connectée pour le convertir en la taille/forme requise, suivie de déconvolutions+upsampling. Cela ressemble à la partie *décodeur* de l'[autoencodeur](../09-Autoencoders/README.md). +Un générateur est légèrement plus complexe. Vous pouvez le considérer comme un discriminateur inversé. En partant d'un vecteur latent (à la place d'un vecteur de caractéristiques), il possède une couche entièrement connectée pour le convertir à la taille/forme requise, suivie de déconvolutions+agrandissements. Cela ressemble à la partie *décodage* d'un [autoencodeur](../09-Autoencoders/README.md). -> ✅ Comme la couche de convolution est implémentée comme un filtre linéaire parcourant l'image, la déconvolution est essentiellement similaire à la convolution et peut être implémentée en utilisant la même logique de couche. +> ✅ Étant donné que la couche de convolution est implémentée comme un filtre linéaire parcourant l'image, la déconvolution est essentiellement similaire à la convolution et peut être mise en œuvre en utilisant la même logique de couche. @@ -38,64 +47,64 @@ Un générateur est légèrement plus complexe. Vous pouvez le considérer comme ### Entraînement du GAN -Les GANs sont appelés **antagonistes** car il y a une compétition constante entre le générateur et le discriminateur. Au cours de cette compétition, le générateur et le discriminateur s'améliorent, ainsi le réseau apprend à produire des images de meilleure qualité. +Les GANs sont appelés **adversaires** parce qu'il y a une compétition constante entre le générateur et le discriminateur. Pendant cette compétition, le générateur et le discriminateur s'améliorent, ce qui permet au réseau d'apprendre à produire des images de plus en plus réalistes. L'entraînement se déroule en deux étapes : -* **Entraînement du discriminateur**. Cette tâche est assez simple : nous générons un lot d'images par le générateur, les étiquetons 0, ce qui représente une image fausse, et prenons un lot d'images du jeu de données d'entrée (avec l'étiquette 1, image réelle). Nous obtenons une *perte du discriminateur*, et effectuons une rétropropagation. -* **Entraînement du générateur**. Cela est légèrement plus délicat, car nous ne connaissons pas directement la sortie attendue pour le générateur. Nous prenons l'ensemble du réseau GAN constitué d'un générateur suivi d'un discriminateur, le nourrissons avec des vecteurs aléatoires, et nous attendons que le résultat soit 1 (correspondant aux images réelles). Nous figeons ensuite les paramètres du discriminateur (nous ne voulons pas qu'il soit entraîné à cette étape), et effectuons la rétropropagation. +* **Entraînement du discriminateur**. Cette tâche est assez simple : nous générons un lot d'images avec le générateur, en les étiquetant 0, ce qui signifie image fausse, et nous prenons un lot d'images du jeu de données d'entrée (avec l'étiquette 1, image réelle). Nous obtenons une *perte du discriminateur* et effectuons une rétropropagation. +* **Entraînement du générateur**. Cela est légèrement plus complexe, car nous ne connaissons pas directement la sortie attendue pour le générateur. Nous prenons tout le réseau GAN composé d'un générateur suivi d'un discriminateur, le nourrissons avec des vecteurs aléatoires et attendons que le résultat soit 1 (correspondant à des images réelles). Nous gelons ensuite les paramètres du discriminateur (nous ne voulons pas qu'il soit entraîné à cette étape) et effectuons la rétropropagation. -Au cours de ce processus, les pertes du générateur et du discriminateur ne diminuent pas significativement. Dans une situation idéale, elles devraient osciller, correspondant à l'amélioration des performances des deux réseaux. +Pendant ce processus, les pertes du générateur et du discriminateur ne diminuent pas significativement. Dans une situation idéale, elles devraient osciller, correspondant à l'amélioration des performances des deux réseaux. ## ✍️ Exercices : GANs -* [Notebook GAN en TensorFlow/Keras](../../../../../lessons/4-ComputerVision/10-GANs/GANTF.ipynb) -* [Notebook GAN en PyTorch](../../../../../lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) +* [Notebook GAN avec TensorFlow/Keras](../../../../../lessons/4-ComputerVision/10-GANs/GANTF.ipynb) +* [Notebook GAN avec PyTorch](../../../../../lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) -### Problèmes avec l'entraînement des GAN +### Problèmes liés à l'entraînement des GANs Les GANs sont connus pour être particulièrement difficiles à entraîner. Voici quelques problèmes : -* **Effondrement de mode**. Par ce terme, nous entendons que le générateur apprend à produire une image réussie qui trompe le discriminateur, et non une variété d'images différentes. -* **Sensibilité aux hyperparamètres**. Souvent, vous pouvez voir qu'un GAN ne converge pas du tout, puis soudainement diminue dans le taux d'apprentissage conduisant à la convergence. -* Maintenir un **équilibre** entre le générateur et le discriminateur. Dans de nombreux cas, la perte du discriminateur peut tomber à zéro relativement rapidement, ce qui empêche le générateur de s'entraîner davantage. Pour surmonter cela, nous pouvons essayer de définir différents taux d'apprentissage pour le générateur et le discriminateur, ou sauter l'entraînement du discriminateur si la perte est déjà trop basse. -* Entraînement pour une **haute résolution**. Réfléchissant au même problème qu'avec les autoencodeurs, ce problème est déclenché car reconstruire trop de couches de réseau de convolution conduit à des artefacts. Ce problème est généralement résolu par ce qu'on appelle la **croissance progressive**, lorsque d'abord quelques couches sont entraînées sur des images basse résolution, puis les couches sont "débloquées" ou ajoutées. Une autre solution consisterait à ajouter des connexions supplémentaires entre les couches et à entraîner plusieurs résolutions à la fois - voir cet article sur les [GANs à gradient multi-échelle](https://arxiv.org/abs/1903.06048) pour plus de détails. +* **Effondrement de mode**. Ce terme signifie que le générateur apprend à produire une seule image réussie qui trompe le discriminateur, et non une variété d'images différentes. +* **Sensibilité aux hyperparamètres**. Il arrive souvent qu'un GAN ne converge pas du tout, puis qu'une diminution soudaine du taux d'apprentissage entraîne une convergence. +* Maintenir un **équilibre** entre le générateur et le discriminateur. Dans de nombreux cas, la perte du discriminateur peut chuter à zéro relativement rapidement, ce qui empêche le générateur de continuer à s'entraîner. Pour surmonter cela, nous pouvons essayer de définir des taux d'apprentissage différents pour le générateur et le discriminateur, ou de sauter l'entraînement du discriminateur si la perte est déjà trop faible. +* Entraînement pour une **haute résolution**. Reflétant le même problème que les autoencodeurs, ce problème est déclenché parce que reconstruire trop de couches d'un réseau convolutionnel entraîne des artefacts. Ce problème est généralement résolu par ce qu'on appelle la **croissance progressive**, où les premières couches sont entraînées sur des images basse résolution, puis des couches sont "débloquées" ou ajoutées. Une autre solution consiste à ajouter des connexions supplémentaires entre les couches et à entraîner plusieurs résolutions à la fois - voir cet article [Multi-Scale Gradient GANs](https://arxiv.org/abs/1903.06048) pour plus de détails. ## Transfert de style -Les GANs sont un excellent moyen de générer des images artistiques. Une autre technique intéressante est le **transfert de style**, qui prend une **image de contenu** et la redessine dans un style différent, appliquant des filtres de l'**image de style**. +Les GANs sont un excellent moyen de générer des images artistiques. Une autre technique intéressante est le **transfert de style**, qui prend une **image de contenu** et la redessine dans un style différent, en appliquant des filtres à partir d'une **image de style**. -Le fonctionnement est le suivant : -* Nous commençons avec une image de bruit aléatoire (ou avec une image de contenu, mais pour mieux comprendre, il est plus facile de commencer par du bruit aléatoire) -* Notre objectif serait de créer une image qui serait proche à la fois de l'image de contenu et de l'image de style. Cela serait déterminé par deux fonctions de perte : - - La **perte de contenu** est calculée en fonction des caractéristiques extraites par le CNN à certaines couches de l'image actuelle et de l'image de contenu - - La **perte de style** est calculée entre l'image actuelle et l'image de style de manière astucieuse en utilisant des matrices de Gram (plus de détails dans le [notebook exemple](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)) -* Pour rendre l'image plus lisse et éliminer le bruit, nous introduisons également une **perte de variation**, qui calcule la distance moyenne entre les pixels voisins -* La boucle d'optimisation principale ajuste l'image actuelle en utilisant la descente de gradient (ou un autre algorithme d'optimisation) pour minimiser la perte totale, qui est une somme pondérée de toutes les trois pertes. +Voici comment cela fonctionne : +* Nous commençons avec une image de bruit aléatoire (ou avec une image de contenu, mais pour mieux comprendre, il est plus simple de commencer avec du bruit aléatoire). +* Notre objectif est de créer une image qui soit proche à la fois de l'image de contenu et de l'image de style. Cela sera déterminé par deux fonctions de perte : + - **Perte de contenu** : calculée à partir des caractéristiques extraites par le CNN à certains niveaux de l'image actuelle et de l'image de contenu. + - **Perte de style** : calculée entre l'image actuelle et l'image de style d'une manière astucieuse en utilisant des matrices de Gram (plus de détails dans le [notebook d'exemple](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)). +* Pour rendre l'image plus lisse et éliminer le bruit, nous introduisons également une **perte de variation**, qui calcule la distance moyenne entre les pixels voisins. +* La boucle principale d'optimisation ajuste l'image actuelle en utilisant la descente de gradient (ou un autre algorithme d'optimisation) pour minimiser la perte totale, qui est une somme pondérée de toutes les pertes. ## ✍️ Exemple : [Transfert de style](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) -## [Quiz post-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/210) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/210) ## Conclusion -Dans cette leçon, vous avez appris sur les GANs et comment les entraîner. Vous avez également appris les défis particuliers que ce type de réseau de neurones peut rencontrer, ainsi que quelques stratégies pour les surmonter. +Dans cette leçon, vous avez appris sur les GANs et comment les entraîner. Vous avez également découvert les défis spécifiques auxquels ce type de réseau neuronal peut être confronté, ainsi que des stratégies pour les surmonter. ## 🚀 Défi Parcourez le [notebook de transfert de style](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) en utilisant vos propres images. -## Révision et auto-apprentissage +## Révision et étude personnelle -Pour référence, lisez-en plus sur les GANs dans ces ressources : +Pour référence, lisez davantage sur les GANs dans ces ressources : -* Marco Pasini, [10 leçons que j'ai apprises en entraînant des GANs pendant un an](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628) -* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN), une architecture GAN à considérer +* Marco Pasini, [10 Leçons que j'ai apprises en entraînant des GANs pendant un an](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628) +* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN), une architecture GAN *de facto* à considérer * [Créer de l'art génératif avec des GANs sur Azure ML](https://soshnikov.com/scienceart/creating-generative-art-using-gan-on-azureml/) -## Assignment +## Devoir -Revisitez l'un des deux notebooks associés à cette leçon et réentraînez le GAN sur vos propres images. Que pouvez-vous créer ? +Revisitez l'un des deux notebooks associés à cette leçon et réentraînez le GAN avec vos propres images. Que pouvez-vous créer ? **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/11-ObjectDetection/README.md b/translations/fr/lessons/4-ComputerVision/11-ObjectDetection/README.md index 0f428e4f..a320d7e4 100644 --- a/translations/fr/lessons/4-ComputerVision/11-ObjectDetection/README.md +++ b/translations/fr/lessons/4-ComputerVision/11-ObjectDetection/README.md @@ -1,174 +1,188 @@ + # Détection d'Objets -Les modèles de classification d'images que nous avons abordés jusqu'à présent prenaient une image et produisaient un résultat catégorique, tel que la classe 'nombre' dans un problème MNIST. Cependant, dans de nombreux cas, nous ne voulons pas seulement savoir qu'une image représente des objets - nous voulons pouvoir déterminer leur emplacement précis. C'est exactement le but de la **détection d'objets**. +Les modèles de classification d'images que nous avons étudiés jusqu'à présent prenaient une image et produisaient un résultat catégoriel, comme la classe 'nombre' dans un problème MNIST. Cependant, dans de nombreux cas, nous ne voulons pas seulement savoir qu'une image représente des objets - nous voulons également pouvoir déterminer leur emplacement précis. C'est précisément l'objectif de la **détection d'objets**. -## [Quiz pré-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/111) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/111) ![Détection d'Objets](../../../../../translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.fr.png) -> Image provenant du [site web de YOLO v2](https://pjreddie.com/darknet/yolov2/) +> Image tirée du [site web YOLO v2](https://pjreddie.com/darknet/yolov2/) -## Une Approche Naïve à la Détection d'Objets +## Une Approche Naïve pour la Détection d'Objets -Supposons que nous voulions trouver un chat sur une image, une approche très naïve de la détection d'objets serait la suivante : +Supposons que nous voulions trouver un chat sur une image. Une approche très naïve pour la détection d'objets serait la suivante : -1. Diviser l'image en un certain nombre de tuiles -2. Exécuter la classification d'images sur chaque tuile. -3. Les tuiles qui résultent en une activation suffisamment élevée peuvent être considérées comme contenant l'objet en question. +1. Diviser l'image en un certain nombre de tuiles. +2. Appliquer une classification d'images sur chaque tuile. +3. Les tuiles qui produisent une activation suffisamment élevée peuvent être considérées comme contenant l'objet en question. -![Détection Naïve d'Objets](../../../../../translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.fr.png) +![Détection Naïve](../../../../../translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.fr.png) -> *Image provenant du [Cahier d'Exercices](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection-TF.ipynb)* +> *Image tirée du [cahier d'exercices](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection-TF.ipynb)* -Cependant, cette approche est loin d'être idéale, car elle ne permet à l'algorithme de localiser la boîte englobante de l'objet que de manière très imprécise. Pour une localisation plus précise, nous devons exécuter une sorte de **régression** pour prédire les coordonnées des boîtes englobantes - et pour cela, nous avons besoin de jeux de données spécifiques. +Cependant, cette approche est loin d'être idéale, car elle ne permet à l'algorithme de localiser la boîte englobante de l'objet que de manière très imprécise. Pour une localisation plus précise, nous devons utiliser une forme de **régression** pour prédire les coordonnées des boîtes englobantes - et pour cela, nous avons besoin de jeux de données spécifiques. ## Régression pour la Détection d'Objets -[Ce billet de blog](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491) propose une excellente introduction douce à la détection de formes. +[Cet article de blog](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491) offre une excellente introduction à la détection de formes. ## Jeux de Données pour la Détection d'Objets Vous pourriez rencontrer les jeux de données suivants pour cette tâche : * [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 20 classes -* [COCO](http://cocodataset.org/#home) - Objets Communs dans le Contexte. 80 classes, boîtes englobantes et masques de segmentation +* [COCO](http://cocodataset.org/#home) - Common Objects in Context. 80 classes, boîtes englobantes et masques de segmentation ![COCO](../../../../../translated_images/coco-examples.71bc60380fa6cceb7caad48bd09e35b6028caabd363aa04fee89c414e0870e86.fr.jpg) -## Métriques de Détection d'Objets +## Métriques pour la Détection d'Objets ### Intersection sur Union -Alors que pour la classification d'images il est facile de mesurer la performance de l'algorithme, pour la détection d'objets, nous devons mesurer à la fois la justesse de la classe, ainsi que la précision de la localisation de la boîte englobante inférée. Pour cette dernière, nous utilisons ce qu'on appelle l'**Intersection sur Union** (IoU), qui mesure à quel point deux boîtes (ou deux zones arbitraires) se chevauchent. +Alors que pour la classification d'images, il est facile de mesurer les performances de l'algorithme, pour la détection d'objets, nous devons mesurer à la fois la justesse de la classe et la précision de la localisation de la boîte englobante déduite. Pour cette dernière, nous utilisons ce que l'on appelle l'**Intersection sur Union** (IoU), qui mesure à quel point deux boîtes (ou deux zones arbitraires) se chevauchent. ![IoU](../../../../../translated_images/iou_equation.9a4751d40fff4e119ecd0a7bcca4e71ab1dc83e0d4f2a0d66ff0859736f593cf.fr.png) -> *Figure 2 provenant de [ce billet de blog excellent sur l'IoU](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)* +> *Figure 2 tirée de [cet excellent article de blog sur l'IoU](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)* -L'idée est simple - nous divisons la zone d'intersection entre deux figures par la zone de leur union. Pour deux zones identiques, l'IoU serait de 1, tandis que pour des zones complètement disjointes, il sera de 0. Sinon, il variera de 0 à 1. Nous considérons généralement uniquement les boîtes englobantes pour lesquelles l'IoU dépasse une certaine valeur. +L'idée est simple : nous divisons la zone d'intersection entre deux figures par la zone de leur union. Pour deux zones identiques, l'IoU serait de 1, tandis que pour des zones complètement disjointes, il sera de 0. Sinon, il variera entre 0 et 1. Nous considérons généralement uniquement les boîtes englobantes pour lesquelles l'IoU dépasse une certaine valeur. ### Précision Moyenne -Supposons que nous voulions mesurer à quel point une classe d'objets donnée $C$ est reconnue. Pour le mesurer, nous utilisons les métriques de **Précision Moyenne**, qui se calculent comme suit : +Supposons que nous voulions mesurer à quel point une classe d'objets donnée $C$ est bien reconnue. Pour cela, nous utilisons la métrique de **Précision Moyenne**, qui est calculée comme suit : -1. Considérer que la courbe Précision-Rappel montre l'exactitude en fonction d'une valeur de seuil de détection (de 0 à 1). -2. En fonction du seuil, nous obtiendrons plus ou moins d'objets détectés dans l'image, et différentes valeurs de précision et de rappel. +1. Considérer la courbe Précision-Rappel qui montre la précision en fonction d'une valeur seuil de détection (de 0 à 1). +2. En fonction du seuil, nous détecterons plus ou moins d'objets dans l'image, avec des valeurs différentes de précision et de rappel. 3. La courbe ressemblera à ceci : -> *Image provenant du [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + -La précision moyenne pour une classe donnée $C$ est la surface sous cette courbe. Plus précisément, l'axe du Rappel est généralement divisé en 10 parties, et la Précision est moyennée sur tous ces points : +> *Image tirée de [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + +La Précision Moyenne pour une classe donnée $C$ est l'aire sous cette courbe. Plus précisément, l'axe du Rappel est généralement divisé en 10 parties, et la Précision est moyennée sur tous ces points : $$ -AP = {1\over11}\sum_{i=0}^{10}\mbox{Précision}(\mbox{Rappel}={i\over10}) +AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10}) $$ ### AP et IoU -Nous ne considérerons que les détections pour lesquelles l'IoU est au-dessus d'une certaine valeur. Par exemple, dans le jeu de données PASCAL VOC, on suppose généralement que le $\mbox{Seuil IoU} = 0.5$, tandis que dans COCO, l'AP est mesurée pour différentes valeurs de $\mbox{Seuil IoU}$. +Nous ne considérerons que les détections pour lesquelles l'IoU dépasse une certaine valeur. Par exemple, dans le jeu de données PASCAL VOC, on suppose généralement que $\mbox{IoU Threshold} = 0.5$, tandis que dans COCO, l'AP est mesuré pour différentes valeurs de $\mbox{IoU Threshold}$. -> *Image provenant du [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + -### Précision Moyenne - mAP +> *Image tirée de [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* -La principale métrique pour la Détection d'Objets est appelée **Précision Moyenne**, ou **mAP**. C'est la valeur de la Précision Moyenne, moyennée sur toutes les classes d'objets, et parfois aussi sur le $\mbox{Seuil IoU}$. En détail, le processus de calcul de la **mAP** est décrit -[dans ce billet de blog](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3)), et aussi [ici avec des exemples de code](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734). +### Précision Moyenne Pondérée - mAP -## Différentes Approches de Détection d'Objets +La principale métrique pour la Détection d'Objets est appelée **Précision Moyenne Pondérée**, ou **mAP**. Il s'agit de la valeur de la Précision Moyenne, moyennée sur toutes les classes d'objets, et parfois aussi sur $\mbox{IoU Threshold}$. Le processus de calcul de la **mAP** est décrit en détail +[dans cet article de blog](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3)), ainsi que [ici avec des exemples de code](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734). -Il existe deux grandes classes d'algorithmes de détection d'objets : +## Différentes Approches pour la Détection d'Objets -* **Réseaux de Proposition de Régions** (R-CNN, Fast R-CNN, Faster R-CNN). L'idée principale est de générer des **Régions d'Intérêt** (ROI) et d'exécuter un CNN sur celles-ci, à la recherche de l'activation maximale. C'est un peu similaire à l'approche naïve, à l'exception que les ROI sont générées de manière plus intelligente. Un des principaux inconvénients de ces méthodes est qu'elles sont lentes, car nous avons besoin de nombreux passages du classificateur CNN sur l'image. -* Méthodes **à un passage** (YOLO, SSD, RetinaNet). Dans ces architectures, nous concevons le réseau pour prédire à la fois les classes et les ROI en un seul passage. +Il existe deux grandes catégories d'algorithmes de détection d'objets : + +* **Réseaux de Propositions de Régions** (R-CNN, Fast R-CNN, Faster R-CNN). L'idée principale est de générer des **Régions d'Intérêt** (ROI) et d'exécuter un CNN sur celles-ci, en recherchant une activation maximale. Cela ressemble un peu à l'approche naïve, à la différence que les ROI sont générées de manière plus intelligente. L'un des principaux inconvénients de ces méthodes est qu'elles sont lentes, car nous avons besoin de nombreux passages du classificateur CNN sur l'image. +* Méthodes **en un seul passage** (YOLO, SSD, RetinaNet). Dans ces architectures, nous concevons le réseau pour prédire à la fois les classes et les ROI en un seul passage. ### R-CNN : CNN Basé sur les Régions -[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf) utilise [Selective Search](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf) pour générer une structure hiérarchique des régions ROI, qui sont ensuite passées à travers des extracteurs de caractéristiques CNN et des classificateurs SVM pour déterminer la classe de l'objet, et une régression linéaire pour déterminer les coordonnées de la *boîte englobante*. [Article Officiel](https://arxiv.org/pdf/1506.01497v1.pdf) +[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf) utilise [Selective Search](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf) pour générer une structure hiérarchique de régions ROI, qui sont ensuite passées à travers des extracteurs de caractéristiques CNN et des classificateurs SVM pour déterminer la classe de l'objet, et une régression linéaire pour déterminer les coordonnées de la *boîte englobante*. [Article Officiel](https://arxiv.org/pdf/1506.01497v1.pdf) ![RCNN](../../../../../translated_images/rcnn1.cae407020dfb1d1fb572656e44f75cd6c512cc220591c116c506652c10e47f26.fr.png) -> *Image provenant de van de Sande et al. ICCV’11* +> *Image tirée de van de Sande et al. ICCV’11* ![RCNN-1](../../../../../translated_images/rcnn2.2d9530bb83516484ec65b250c22dbf37d3d23244f32864ebcb91d98fe7c3112c.fr.png) -> *Images provenant de [ce blog](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e)* +> *Images tirées de [cet article de blog](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e)* ### F-RCNN - Fast R-CNN -Cette approche est similaire à R-CNN, mais les régions sont définies après que les couches de convolution aient été appliquées. +Cette approche est similaire à R-CNN, mais les régions sont définies après que les couches de convolution ont été appliquées. ![FRCNN](../../../../../translated_images/f-rcnn.3cda6d9bb41888754037d2d9763e2298a96de5d9bc2a21db3147357aa5da9b1a.fr.png) -> Image provenant de [l'Article Officiel](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf), [arXiv](https://arxiv.org/pdf/1504.08083.pdf), 2015 +> Image tirée de [l'Article Officiel](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf), [arXiv](https://arxiv.org/pdf/1504.08083.pdf), 2015 ### Faster R-CNN -L'idée principale de cette approche est d'utiliser un réseau de neurones pour prédire les ROI - le soi-disant *Réseau de Proposition de Régions*. [Article](https://arxiv.org/pdf/1506.01497.pdf), 2016 +L'idée principale de cette approche est d'utiliser un réseau neuronal pour prédire les ROI - le *Réseau de Propositions de Régions*. [Article](https://arxiv.org/pdf/1506.01497.pdf), 2016 ![FasterRCNN](../../../../../translated_images/faster-rcnn.8d46c099b87ef30ab2ea26dbc4bdd85b974a57ba8eb526f65dc4cd0a4711de30.fr.png) -> Image provenant de [l'article officiel](https://arxiv.org/pdf/1506.01497.pdf) +> Image tirée de [l'article officiel](https://arxiv.org/pdf/1506.01497.pdf) -### R-FCN : Réseau Convolutif Entièrement Basé sur les Régions +### R-FCN : Réseau Complètement Convolutif Basé sur les Régions Cet algorithme est encore plus rapide que Faster R-CNN. L'idée principale est la suivante : -1. Nous extrayons des caractéristiques en utilisant ResNet-101 -1. Les caractéristiques sont traitées par une **Carte de Scores Sensible à la Position**. Chaque objet des $C$ classes est divisé en régions de $k\times k$, et nous formons pour prédire des parties d'objets. -1. Pour chaque partie des régions de $k\times k$, tous les réseaux votent pour les classes d'objets, et la classe d'objet avec le maximum de votes est sélectionnée. +1. Nous extrayons des caractéristiques à l'aide de ResNet-101. +2. Les caractéristiques sont traitées par une **Carte de Scores Sensibles à la Position**. Chaque objet parmi les $C$ classes est divisé en $k\times k$ régions, et nous entraînons le réseau à prédire des parties d'objets. +3. Pour chaque partie des $k\times k$ régions, tous les réseaux votent pour les classes d'objets, et la classe d'objet avec le maximum de votes est sélectionnée. -![image r-fcn](../../../../../translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.fr.png) +![r-fcn image](../../../../../translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.fr.png) -> Image provenant de [l'article officiel](https://arxiv.org/abs/1605.06409) +> Image tirée de [l'article officiel](https://arxiv.org/abs/1605.06409) ### YOLO - You Only Look Once -YOLO est un algorithme en temps réel à un passage. L'idée principale est la suivante : +YOLO est un algorithme en temps réel en un seul passage. L'idée principale est la suivante : - * L'image est divisée en régions de $S\times S$ - * Pour chaque région, le **CNN** prédit $n$ objets possibles, les coordonnées de la *boîte englobante* et la *confiance*=*probabilité* * IoU. + * L'image est divisée en $S\times S$ régions. + * Pour chaque région, le **CNN** prédit $n$ objets possibles, les coordonnées des *boîtes englobantes* et la *confiance* = *probabilité* * IoU. -![YOLO](../../../../../translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.fr.png) -> Image provenant du [document officiel](https://arxiv.org/abs/1506.02640) + ![YOLO](../../../../../translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.fr.png) + +> Image tirée de [l'article officiel](https://arxiv.org/abs/1506.02640) ### Autres Algorithmes -* RetinaNet : [document officiel](https://arxiv.org/abs/1708.02002) +* RetinaNet : [article officiel](https://arxiv.org/abs/1708.02002) - [Implémentation PyTorch dans Torchvision](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) - [Implémentation Keras](https://github.com/fizyr/keras-retinanet) - - [Détection d'objets avec RetinaNet](https://keras.io/examples/vision/retinanet/) dans les échantillons Keras -* SSD (Single Shot Detector) : [document officiel](https://arxiv.org/abs/1512.02325) + - [Détection d'Objets avec RetinaNet](https://keras.io/examples/vision/retinanet/) dans les exemples Keras +* SSD (Single Shot Detector) : [article officiel](https://arxiv.org/abs/1512.02325) ## ✍️ Exercices : Détection d'Objets -Poursuivez votre apprentissage dans le notebook suivant : +Poursuivez votre apprentissage dans le cahier suivant : [ObjectDetection.ipynb](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) ## Conclusion -Dans cette leçon, vous avez fait un tour d'horizon des différentes manières dont la détection d'objets peut être réalisée ! +Dans cette leçon, vous avez exploré un aperçu des différentes façons dont la détection d'objets peut être réalisée ! ## 🚀 Défi -Lisez ces articles et notebooks sur YOLO et essayez-les par vous-même +Lisez ces articles et cahiers sur YOLO et essayez-les par vous-même : * [Bon article de blog](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/) décrivant YOLO * [Site officiel](https://pjreddie.com/darknet/yolo/) - * Yolo : [implémentation Keras](https://github.com/experiencor/keras-yolo2), [notebook étape par étape](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb) - * Yolo v2 : [implémentation Keras](https://github.com/experiencor/keras-yolo2), [notebook étape par étape](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb) + * YOLO : [Implémentation Keras](https://github.com/experiencor/keras-yolo2), [cahier étape par étape](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb) + * YOLO v2 : [Implémentation Keras](https://github.com/experiencor/keras-yolo2), [cahier étape par étape](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb) -## [Quiz post-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/211) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/211) -## Revue & Auto-apprentissage +## Révision & Étude Personnelle -* [Détection d'objets](https://tjmachinelearning.com/lectures/1718/obj/) par Nikhil Sardana +* [Détection d'Objets](https://tjmachinelearning.com/lectures/1718/obj/) par Nikhil Sardana * [Une bonne comparaison des algorithmes de détection d'objets](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html) -* [Revue des algorithmes d'apprentissage profond pour la détection d'objets](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852) -* [Une introduction étape par étape aux algorithmes de détection d'objets de base](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/) -* [Implémentation de Faster R-CNN en Python pour la détection d'objets](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/) +* [Revue des Algorithmes de Deep Learning pour la Détection d'Objets](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852) +* [Introduction Étape par Étape aux Algorithmes de Détection d'Objets de Base](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/) +* [Implémentation de Faster R-CNN en Python pour la Détection d'Objets](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/) ## [Devoir : Détection d'Objets](lab/README.md) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle effectuée par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md b/translations/fr/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md index 22105232..1c9a48e2 100644 --- a/translations/fr/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md +++ b/translations/fr/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md @@ -1,14 +1,23 @@ -# Détection de têtes utilisant le jeu de données Hollywood Heads + +# Détection de têtes avec le dataset Hollywood Heads -Devoir de [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Travail pratique issu du [Curriculum AI pour les débutants](https://github.com/microsoft/ai-for-beginners). ## Tâche -Compter le nombre de personnes sur le flux de caméra de surveillance vidéo est une tâche importante qui nous permettra d'estimer le nombre de visiteurs dans des magasins, les heures d'affluence dans un restaurant, etc. Pour résoudre cette tâche, nous devons être capables de détecter des têtes humaines sous différents angles. Pour entraîner un modèle de détection d'objets à détecter des têtes humaines, nous pouvons utiliser le [Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/). +Compter le nombre de personnes sur un flux vidéo de caméra de surveillance est une tâche importante qui permet d'estimer le nombre de visiteurs dans les magasins, les heures de pointe dans un restaurant, etc. Pour résoudre cette tâche, nous devons être capables de détecter les têtes humaines sous différents angles. Pour entraîner un modèle de détection d'objets à identifier les têtes humaines, nous pouvons utiliser le [dataset Hollywood Heads](https://www.di.ens.fr/willow/research/headdetection/). -## Le Jeu de Données +## Le Dataset -Le [Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/release/HollywoodHeads.zip) contient 369 846 têtes humaines annotées dans 224 740 images de films hollywoodiens. Il est fourni au format [https://host.robots.ox.ac.uk/pascal/VOC/](../../../../../../lessons/4-ComputerVision/11-ObjectDetection/lab/PASCAL VOC), où pour chaque image, il y a également un fichier de description XML qui ressemble à ceci : +Le [dataset Hollywood Heads](https://www.di.ens.fr/willow/research/headdetection/release/HollywoodHeads.zip) contient 369 846 têtes humaines annotées dans 224 740 images extraites de films hollywoodiens. Il est fourni au format [PASCAL VOC](https://host.robots.ox.ac.uk/pascal/VOC/), où chaque image est accompagnée d'un fichier XML descriptif ressemblant à ceci : ```xml @@ -48,19 +57,19 @@ Le [Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection ``` -Dans ce jeu de données, il n'y a qu'une seule classe d'objets `head`, et pour chaque tête, vous obtenez les coordonnées de la boîte englobante. Vous pouvez analyser le XML en utilisant des bibliothèques Python, ou utiliser [cette bibliothèque](https://pypi.org/project/pascal-voc/) pour traiter directement le format PASCAL VOC. +Dans ce dataset, il n'y a qu'une seule classe d'objets `head`, et pour chaque tête, vous obtenez les coordonnées de la boîte englobante. Vous pouvez analyser les fichiers XML en utilisant des bibliothèques Python, ou utiliser [cette bibliothèque](https://pypi.org/project/pascal-voc/) pour travailler directement avec le format PASCAL VOC. -## Entraînement de la Détection d'Objets +## Entraînement de la détection d'objets Vous pouvez entraîner un modèle de détection d'objets en utilisant l'une des méthodes suivantes : -* Utiliser [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste) et son API Python pour entraîner le modèle de manière programmatique dans le cloud. La vision personnalisée ne pourra pas utiliser plus de quelques centaines d'images pour entraîner le modèle, vous devrez donc peut-être limiter le jeu de données. -* Utiliser l'exemple du [tutoriel Keras](https://keras.io/examples/vision/retinanet/) pour entraîner le modèle RetunaNet. +* Utiliser [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste) et son API Python pour entraîner le modèle dans le cloud de manière programmatique. Custom Vision ne pourra pas utiliser plus de quelques centaines d'images pour entraîner le modèle, vous devrez donc limiter le dataset. +* Utiliser l'exemple du [tutoriel Keras](https://keras.io/examples/vision/retinanet/) pour entraîner un modèle RetinaNet. * Utiliser le module intégré [torchvision.models.detection.RetinaNet](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) dans torchvision. ## Conclusion -La détection d'objets est une tâche fréquemment requise dans l'industrie. Bien qu'il existe des services qui peuvent être utilisés pour effectuer la détection d'objets (comme [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste)), il est important de comprendre comment fonctionne la détection d'objets et d'être capable d'entraîner vos propres modèles. +La détection d'objets est une tâche fréquemment requise dans l'industrie. Bien qu'il existe des services permettant de réaliser la détection d'objets (comme [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste)), il est important de comprendre comment fonctionne la détection d'objets et de savoir entraîner vos propres modèles. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/12-Segmentation/README.md b/translations/fr/lessons/4-ComputerVision/12-Segmentation/README.md index 3f6b6d0f..94069309 100644 --- a/translations/fr/lessons/4-ComputerVision/12-Segmentation/README.md +++ b/translations/fr/lessons/4-ComputerVision/12-Segmentation/README.md @@ -1,69 +1,78 @@ + # Segmentation -Nous avons précédemment appris sur la détection d'objets, qui nous permet de localiser des objets dans l'image en prédisant leurs *boîtes englobantes*. Cependant, pour certaines tâches, nous avons besoin non seulement de boîtes englobantes, mais aussi d'une localisation d'objet plus précise. Cette tâche est appelée **segmentation**. +Nous avons précédemment appris la détection d'objets, qui nous permet de localiser des objets dans une image en prédisant leurs *boîtes englobantes*. Cependant, pour certaines tâches, nous avons besoin d'une localisation d'objets plus précise que les simples boîtes englobantes. Cette tâche s'appelle **segmentation**. -## [Quiz pré-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/112) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/112) -La segmentation peut être considérée comme une **classification de pixels**, où pour **chaque** pixel de l'image, nous devons prédire sa classe (*l'arrière-plan* étant l'une des classes). Il existe deux principaux algorithmes de segmentation : +La segmentation peut être vue comme une **classification de pixels**, où pour **chaque** pixel de l'image, nous devons prédire sa classe (*le fond* étant l'une des classes). Il existe deux principaux algorithmes de segmentation : -* **Segmentation sémantique** indique uniquement la classe du pixel, sans faire de distinction entre différents objets de la même classe. -* **Segmentation d'instance** divise les classes en différentes instances. +* La **segmentation sémantique** indique uniquement la classe du pixel, sans distinguer les différents objets appartenant à la même classe. +* La **segmentation par instance** divise les classes en différentes instances. -Pour la segmentation d'instance, ces moutons sont des objets différents, mais pour la segmentation sémantique, tous les moutons sont représentés par une seule classe. +Pour la segmentation par instance, ces moutons sont des objets différents, mais pour la segmentation sémantique, tous les moutons sont représentés par une seule classe. > Image tirée de [cet article de blog](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50) -Il existe différentes architectures neuronales pour la segmentation, mais elles ont toutes la même structure. D'une certaine manière, c'est similaire à l'autoencodeur dont vous avez appris précédemment, mais au lieu de déconstruire l'image originale, notre objectif est de déconstruire un **masque**. Ainsi, un réseau de segmentation se compose des parties suivantes : +Il existe différentes architectures neuronales pour la segmentation, mais elles ont toutes la même structure. D'une certaine manière, cela ressemble à l'autoencodeur que vous avez appris précédemment, mais au lieu de déconstruire l'image originale, notre objectif est de déconstruire un **masque**. Ainsi, un réseau de segmentation comporte les parties suivantes : -* **Encodeur** extrait des caractéristiques de l'image d'entrée -* **Décodeur** transforme ces caractéristiques en **image de masque**, avec la même taille et le même nombre de canaux correspondant au nombre de classes. +* **Encodeur** : extrait les caractéristiques de l'image d'entrée. +* **Décodeur** : transforme ces caractéristiques en une **image de masque**, avec la même taille et un nombre de canaux correspondant au nombre de classes. > Image tirée de [cette publication](https://arxiv.org/pdf/2001.05566.pdf) -Nous devons particulièrement mentionner la fonction de perte utilisée pour la segmentation. Lors de l'utilisation d'autoencodeurs classiques, nous devons mesurer la similarité entre deux images, et nous pouvons utiliser l'erreur quadratique moyenne (MSE) pour cela. En segmentation, chaque pixel dans l'image de masque cible représente le numéro de classe (encodé en one-hot le long de la troisième dimension), donc nous devons utiliser des fonctions de perte spécifiques à la classification - la perte d'entropie croisée, moyennée sur tous les pixels. Si le masque est binaire - **la perte d'entropie croisée binaire** (BCE) est utilisée. +Il est particulièrement important de mentionner la fonction de perte utilisée pour la segmentation. Lors de l'utilisation d'autoencodeurs classiques, nous devons mesurer la similarité entre deux images, et nous pouvons utiliser l'erreur quadratique moyenne (MSE) pour cela. En segmentation, chaque pixel de l'image cible du masque représente le numéro de classe (encodé en one-hot le long de la troisième dimension), nous devons donc utiliser des fonctions de perte spécifiques à la classification - la perte par entropie croisée, moyennée sur tous les pixels. Si le masque est binaire, on utilise la **perte par entropie croisée binaire** (BCE). -> ✅ L'encodage one-hot est une manière d'encoder une étiquette de classe en un vecteur de longueur égale au nombre de classes. Consultez [cet article](https://datagy.io/sklearn-one-hot-encode/) sur cette technique. +> ✅ L'encodage one-hot est une méthode pour encoder une étiquette de classe en un vecteur de longueur égale au nombre de classes. Consultez [cet article](https://datagy.io/sklearn-one-hot-encode/) pour en savoir plus sur cette technique. ## Segmentation pour l'imagerie médicale -Dans cette leçon, nous allons voir la segmentation en action en entraînant le réseau à reconnaître les nævi humains (également connus sous le nom de grains de beauté) sur des images médicales. Nous utiliserons la base de données PH2 d'images de dermoscopie comme source d'images. Ce jeu de données contient 200 images de trois classes : nævus typique, nævus atypique et mélanome. Toutes les images contiennent également un **masque** correspondant qui délimite le nævus. +Dans cette leçon, nous verrons la segmentation en action en entraînant un réseau à reconnaître des nævus humains (également appelés grains de beauté) sur des images médicales. Nous utiliserons la base de données PH2 d'images de dermoscopie comme source d'images. Ce jeu de données contient 200 images de trois classes : nævus typique, nævus atypique et mélanome. Toutes les images contiennent également un **masque** correspondant qui délimite le nævus. -> ✅ Cette technique est particulièrement adaptée à ce type d'imagerie médicale, mais quelles autres applications dans le monde réel pourriez-vous envisager ? +> ✅ Cette technique est particulièrement adaptée à ce type d'imagerie médicale, mais quelles autres applications réelles pourriez-vous envisager ? navi -> Image provenant de la base de données PH2 +> Image tirée de la base de données PH2 -Nous allons entraîner un modèle pour segmenter n'importe quel nævus de son arrière-plan. +Nous entraînerons un modèle à segmenter tout nævus de son arrière-plan. -## ✍️ Exercices : Segmentation Sémantique +## ✍️ Exercices : Segmentation sémantique -Ouvrez les notebooks ci-dessous pour en savoir plus sur les différentes architectures de segmentation sémantique, vous entraîner à travailler avec elles et les voir en action. +Ouvrez les notebooks ci-dessous pour en apprendre davantage sur différentes architectures de segmentation sémantique, pratiquer leur utilisation et les voir en action. -* [Segmentation Sémantique Pytorch](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) -* [Segmentation Sémantique TensorFlow](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) +* [Segmentation sémantique avec Pytorch](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) +* [Segmentation sémantique avec TensorFlow](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) -## [Quiz post-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/212) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/212) ## Conclusion -La segmentation est une technique très puissante pour la classification d'images, allant au-delà des boîtes englobantes pour une classification au niveau des pixels. C'est une technique utilisée dans l'imagerie médicale, entre autres applications. +La segmentation est une technique très puissante pour la classification d'images, allant au-delà des boîtes englobantes pour une classification au niveau des pixels. C'est une technique utilisée en imagerie médicale, entre autres applications. ## 🚀 Défi La segmentation corporelle n'est qu'une des tâches courantes que nous pouvons réaliser avec des images de personnes. D'autres tâches importantes incluent la **détection de squelette** et la **détection de pose**. Essayez la bibliothèque [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) pour voir comment la détection de pose peut être utilisée. -## Revue & Auto-apprentissage +## Révision et étude personnelle -Cet [article de wikipedia](https://wikipedia.org/wiki/Image_segmentation) offre un bon aperçu des diverses applications de cette technique. Apprenez-en davantage par vous-même sur les sous-domaines de la segmentation d'instance et de la segmentation panoptique dans ce domaine d'étude. +Cet [article Wikipédia](https://wikipedia.org/wiki/Image_segmentation) offre un bon aperçu des diverses applications de cette technique. Renseignez-vous davantage sur les sous-domaines de la segmentation par instance et de la segmentation panoptique dans ce domaine d'étude. ## [Devoir](lab/README.md) -Dans ce laboratoire, essayez la **segmentation du corps humain** en utilisant le [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset) de Kaggle. +Dans ce laboratoire, essayez la **segmentation du corps humain** en utilisant le [jeu de données Segmentation Full Body MADS](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset) disponible sur Kaggle. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/12-Segmentation/lab/README.md b/translations/fr/lessons/4-ComputerVision/12-Segmentation/lab/README.md index 8902f5ab..65b4b598 100644 --- a/translations/fr/lessons/4-ComputerVision/12-Segmentation/lab/README.md +++ b/translations/fr/lessons/4-ComputerVision/12-Segmentation/lab/README.md @@ -1,22 +1,31 @@ + # Segmentation du Corps Humain -Devoir de [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Devoir de laboratoire tiré du [Curriculum AI pour Débutants](https://github.com/microsoft/ai-for-beginners). ## Tâche -Dans la production vidéo, par exemple dans les prévisions météorologiques, nous avons souvent besoin de découper une image humaine prise par la caméra et de la placer sur un autre plan. Cela se fait généralement à l'aide de techniques de **chroma key**, lorsque l'humain est filmé devant un fond de couleur uniforme, qui est ensuite retiré. Dans ce laboratoire, nous allons entraîner un modèle de réseau de neurones pour découper la silhouette humaine. +Dans la production vidéo, par exemple lors des bulletins météo, il est souvent nécessaire de découper l'image d'une personne filmée par une caméra et de la placer sur une autre séquence. Cela se fait généralement à l'aide de techniques de **chroma key**, où une personne est filmée devant un fond de couleur uniforme, qui est ensuite supprimé. Dans ce laboratoire, nous allons entraîner un modèle de réseau neuronal pour découper la silhouette humaine. ## Le Jeu de Données -Nous utiliserons le [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset) de Kaggle. Téléchargez le jeu de données manuellement depuis Kaggle. +Nous utiliserons le [jeu de données Segmentation Full Body MADS](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset) disponible sur Kaggle. Téléchargez le jeu de données manuellement depuis Kaggle. -## Lancement du Notebook +## Notebook de Départ Commencez le laboratoire en ouvrant [BodySegmentation.ipynb](../../../../../../lessons/4-ComputerVision/12-Segmentation/lab/BodySegmentation.ipynb) -## À Retenir +## Points à Retenir -La segmentation du corps est l'une des tâches courantes que nous pouvons réaliser avec des images de personnes. D'autres tâches importantes incluent la **détection de squelette** et la **détection de pose**. Consultez la bibliothèque [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) pour voir comment ces tâches peuvent être mises en œuvre. +La segmentation du corps n'est qu'une des nombreuses tâches courantes que l'on peut réaliser avec des images de personnes. Parmi les autres tâches importantes, on trouve la **détection de squelette** et la **détection de pose**. Consultez la bibliothèque [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) pour voir comment ces tâches peuvent être mises en œuvre. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/4-ComputerVision/README.md b/translations/fr/lessons/4-ComputerVision/README.md index c961fee2..f8451ced 100644 --- a/translations/fr/lessons/4-ComputerVision/README.md +++ b/translations/fr/lessons/4-ComputerVision/README.md @@ -1,16 +1,25 @@ -# Vision par Ordinateur + +# Vision par ordinateur -![Résumé du contenu de la Vision par Ordinateur dans un doodle](../../../../translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.fr.png) +![Résumé du contenu sur la vision par ordinateur sous forme de dessin](../../../../translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.fr.png) -Dans cette section, nous allons apprendre sur : +Dans cette section, nous allons apprendre : -* [Introduction à la Vision par Ordinateur et OpenCV](06-IntroCV/README.md) -* [Réseaux de Neurones Convolutifs](07-ConvNets/README.md) -* [Réseaux Pré-entraînés et Apprentissage par Transfert](08-TransferLearning/README.md) +* [Introduction à la vision par ordinateur et OpenCV](06-IntroCV/README.md) +* [Réseaux neuronaux convolutionnels](07-ConvNets/README.md) +* [Réseaux pré-entraînés et apprentissage par transfert](08-TransferLearning/README.md) * [Autoencodeurs](09-Autoencoders/README.md) -* [Réseaux Antagonistes Génératifs](10-GANs/README.md) -* [Détection d'Objets](11-ObjectDetection/README.md) -* [Segmentation Sémantique](12-Segmentation/README.md) +* [Réseaux antagonistes génératifs](10-GANs/README.md) +* [Détection d'objets](11-ObjectDetection/README.md) +* [Segmentation sémantique](12-Segmentation/README.md) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction professionnelle humaine est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/13-TextRep/README.md b/translations/fr/lessons/5-NLP/13-TextRep/README.md index 405bbb63..2b59f8db 100644 --- a/translations/fr/lessons/5-NLP/13-TextRep/README.md +++ b/translations/fr/lessons/5-NLP/13-TextRep/README.md @@ -1,76 +1,85 @@ -# Représentation du Texte en Tenseurs + +# Représenter le texte sous forme de tenseurs -## [Quiz pré-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/113) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/113) -## Classification de Texte +## Classification de texte -Tout au long de la première partie de cette section, nous allons nous concentrer sur la tâche de **classification de texte**. Nous utiliserons le jeu de données [AG News](https://www.kaggle.com/amananandrai/ag-news-classification-dataset), qui contient des articles de presse comme les suivants : +Dans la première partie de cette section, nous nous concentrerons sur la tâche de **classification de texte**. Nous utiliserons le jeu de données [AG News](https://www.kaggle.com/amananandrai/ag-news-classification-dataset), qui contient des articles de presse comme celui-ci : -* Catégorie : Sci/Tech -* Titre : Une entreprise du Kentucky remporte une subvention pour étudier les peptides (AP) -* Corps : AP - Une entreprise fondée par un chercheur en chimie à l'Université de Louisville a remporté une subvention pour développer... +* Catégorie : Sci/Tech +* Titre : Ky. Company Wins Grant to Study Peptides (AP) +* Corps : AP - Une entreprise fondée par un chercheur en chimie de l'Université de Louisville a obtenu une subvention pour développer... -Notre objectif sera de classer l'article d'actualité dans l'une des catégories en fonction du texte. +Notre objectif sera de classer l'article dans l'une des catégories en fonction du texte. ## Représentation du texte -Si nous voulons résoudre des tâches de traitement du langage naturel (NLP) avec des réseaux neuronaux, nous avons besoin d'un moyen de représenter le texte sous forme de tenseurs. Les ordinateurs représentent déjà les caractères textuels sous forme de nombres qui se mappent à des polices sur votre écran en utilisant des encodages tels que ASCII ou UTF-8. +Si nous voulons résoudre des tâches de traitement du langage naturel (NLP) avec des réseaux neuronaux, nous devons trouver un moyen de représenter le texte sous forme de tenseurs. Les ordinateurs représentent déjà les caractères textuels sous forme de nombres qui correspondent aux polices affichées sur votre écran, en utilisant des encodages tels que ASCII ou UTF-8. Image montrant un diagramme mappant un caractère à une représentation ASCII et binaire > [Source de l'image](https://www.seobility.net/en/wiki/ASCII) -En tant qu'êtres humains, nous comprenons ce que chaque lettre **représente**, et comment tous les caractères se combinent pour former les mots d'une phrase. Cependant, les ordinateurs, à eux seuls, n'ont pas une telle compréhension, et le réseau neuronal doit apprendre la signification pendant l'entraînement. +En tant qu'humains, nous comprenons ce que chaque lettre **représente** et comment tous les caractères se combinent pour former les mots d'une phrase. Cependant, les ordinateurs, par eux-mêmes, n'ont pas cette compréhension, et le réseau neuronal doit apprendre la signification pendant l'entraînement. -Par conséquent, nous pouvons utiliser différentes approches pour représenter le texte : +Ainsi, nous pouvons utiliser différentes approches pour représenter le texte : -* **Représentation au niveau des caractères**, lorsque nous représentons le texte en traitant chaque caractère comme un nombre. Étant donné que nous avons *C* caractères différents dans notre corpus de texte, le mot *Hello* serait représenté par un tenseur 5x*C*. Chaque lettre correspondrait à une colonne de tenseur en encodage one-hot. -* **Représentation au niveau des mots**, dans laquelle nous créons un **vocabulaire** de tous les mots de notre texte, puis représentons les mots en utilisant l'encodage one-hot. Cette approche est quelque peu meilleure, car chaque lettre prise isolément n'a pas beaucoup de sens, et donc en utilisant des concepts sémantiques de niveau supérieur - les mots - nous simplifions la tâche pour le réseau neuronal. Cependant, étant donné la taille importante du dictionnaire, nous devons gérer des tenseurs creux de haute dimension. +* **Représentation au niveau des caractères**, où nous représentons le texte en traitant chaque caractère comme un nombre. Étant donné que nous avons *C* caractères différents dans notre corpus textuel, le mot *Hello* serait représenté par un tenseur de 5x*C*. Chaque lettre correspondrait à une colonne du tenseur en encodage one-hot. +* **Représentation au niveau des mots**, où nous créons un **vocabulaire** de tous les mots dans notre texte, puis représentons les mots en utilisant un encodage one-hot. Cette approche est en quelque sorte meilleure, car chaque lettre prise isolément n'a pas beaucoup de sens. En utilisant des concepts sémantiques de plus haut niveau - les mots - nous simplifions la tâche pour le réseau neuronal. Cependant, étant donné la taille importante du dictionnaire, nous devons gérer des tenseurs creux de haute dimension. -Quelle que soit la représentation, nous devons d'abord convertir le texte en une séquence de **tokens**, chaque token étant soit un caractère, un mot, ou parfois même une partie d'un mot. Ensuite, nous convertissons le token en un nombre, généralement en utilisant un **vocabulaire**, et ce nombre peut être alimenté dans un réseau neuronal en utilisant l'encodage one-hot. +Quelle que soit la représentation, nous devons d'abord convertir le texte en une séquence de **tokens**, un token étant soit un caractère, un mot, ou parfois même une partie d'un mot. Ensuite, nous convertissons le token en un nombre, généralement en utilisant un **vocabulaire**, et ce nombre peut être introduit dans un réseau neuronal en utilisant un encodage one-hot. -## N-Grams +## N-grammes -Dans le langage naturel, le sens précis des mots ne peut être déterminé que dans un contexte. Par exemple, les significations de *réseau neuronal* et *réseau de pêche* sont complètement différentes. L'une des façons de prendre cela en compte est de construire notre modèle sur des paires de mots, en considérant les paires de mots comme des tokens de vocabulaire séparés. De cette manière, la phrase *J'aime aller pêcher* sera représentée par la séquence de tokens suivante : *J'aime*, *aime aller*, *aller pêcher*. Le problème avec cette approche est que la taille du dictionnaire augmente considérablement, et des combinaisons comme *aller pêcher* et *aller faire du shopping* sont présentées par des tokens différents, qui ne partagent aucune similarité sémantique malgré le même verbe. +Dans le langage naturel, le sens précis des mots ne peut être déterminé qu'en contexte. Par exemple, les significations de *réseau neuronal* et *réseau de pêche* sont complètement différentes. Une des façons de prendre cela en compte est de construire notre modèle sur des paires de mots, en considérant les paires de mots comme des tokens de vocabulaire distincts. Ainsi, la phrase *J'aime aller pêcher* sera représentée par la séquence de tokens suivante : *J'aime*, *aime aller*, *aller pêcher*. Le problème avec cette approche est que la taille du dictionnaire augmente considérablement, et des combinaisons comme *aller pêcher* et *aller faire du shopping* sont représentées par des tokens différents, qui ne partagent aucune similarité sémantique malgré le même verbe. -Dans certains cas, nous pouvons envisager d'utiliser des tri-grammes -- combinaisons de trois mots -- également. Ainsi, l'approche est souvent appelée **n-grams**. De plus, il est logique d'utiliser des n-grams avec une représentation au niveau des caractères, auquel cas les n-grams correspondront à différents syllabes. +Dans certains cas, nous pouvons envisager d'utiliser des trigrammes - des combinaisons de trois mots - également. Ainsi, cette approche est souvent appelée **n-grammes**. Il est également pertinent d'utiliser des n-grammes avec une représentation au niveau des caractères, auquel cas les n-grammes correspondent approximativement à différentes syllabes. -## Sac de Mots et TF/IDF +## Sac de mots et TF/IDF -Lors de la résolution de tâches telles que la classification de texte, nous devons être en mesure de représenter le texte par un vecteur de taille fixe, que nous utiliserons comme entrée pour le classificateur dense final. L'une des façons les plus simples de le faire est de combiner toutes les représentations de mots individuelles, par exemple en les additionnant. Si nous ajoutons les encodages one-hot de chaque mot, nous finirons par un vecteur de fréquences, montrant combien de fois chaque mot apparaît dans le texte. Cette représentation du texte est appelée **sac de mots** (BoW). +Lorsque nous résolvons des tâches comme la classification de texte, nous devons être capables de représenter le texte par un vecteur de taille fixe, que nous utiliserons comme entrée pour le classificateur dense final. Une des façons les plus simples de le faire est de combiner toutes les représentations individuelles des mots, par exemple en les additionnant. Si nous additionnons les encodages one-hot de chaque mot, nous obtiendrons un vecteur de fréquences, montrant combien de fois chaque mot apparaît dans le texte. Une telle représentation du texte est appelée **sac de mots** (BoW). > Image par l'auteur -Un BoW représente essentiellement quels mots apparaissent dans le texte et en quelles quantités, ce qui peut effectivement être une bonne indication de ce dont parle le texte. Par exemple, un article de presse sur la politique contiendra probablement des mots tels que *président* et *pays*, tandis qu'une publication scientifique aurait des termes comme *collisionneur*, *découvert*, etc. Ainsi, les fréquences des mots peuvent dans de nombreux cas être un bon indicateur du contenu du texte. +Un BoW représente essentiellement quels mots apparaissent dans le texte et en quelles quantités, ce qui peut effectivement être une bonne indication de ce dont parle le texte. Par exemple, un article de presse sur la politique est susceptible de contenir des mots tels que *président* et *pays*, tandis qu'une publication scientifique pourrait inclure des termes comme *collisionneur*, *découvert*, etc. Ainsi, les fréquences des mots peuvent souvent être un bon indicateur du contenu du texte. -Le problème avec le BoW est que certains mots communs, tels que *et*, *est*, etc. apparaissent dans la plupart des textes, et ils ont les fréquences les plus élevées, masquant les mots qui sont vraiment importants. Nous pouvons réduire l'importance de ces mots en tenant compte de la fréquence à laquelle les mots apparaissent dans l'ensemble de la collection de documents. C'est l'idée principale derrière l'approche TF/IDF, qui est abordée plus en détail dans les notebooks joints à cette leçon. +Le problème avec BoW est que certains mots communs, tels que *et*, *est*, etc., apparaissent dans la plupart des textes et ont les fréquences les plus élevées, masquant les mots qui sont réellement importants. Nous pouvons réduire l'importance de ces mots en tenant compte de la fréquence à laquelle ils apparaissent dans l'ensemble de la collection de documents. C'est l'idée principale derrière l'approche TF/IDF, qui est expliquée plus en détail dans les notebooks joints à cette leçon. -Cependant, aucune de ces approches ne peut pleinement prendre en compte la **sémantique** du texte. Nous avons besoin de modèles de réseaux neuronaux plus puissants pour cela, que nous discuterons plus tard dans cette section. +Cependant, aucune de ces approches ne peut pleinement prendre en compte la **sémantique** du texte. Nous avons besoin de modèles de réseaux neuronaux plus puissants pour cela, que nous aborderons plus tard dans cette section. -## ✍️ Exercices : Représentation du Texte +## ✍️ Exercices : Représentation du texte Poursuivez votre apprentissage dans les notebooks suivants : -* [Représentation du Texte avec PyTorch](../../../../../lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) -* [Représentation du Texte avec TensorFlow](../../../../../lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) +* [Représentation du texte avec PyTorch](../../../../../lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) +* [Représentation du texte avec TensorFlow](../../../../../lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) ## Conclusion -Jusqu'à présent, nous avons étudié des techniques qui peuvent ajouter un poids de fréquence à différents mots. Cependant, elles ne peuvent pas représenter le sens ou l'ordre. Comme l'a dit le célèbre linguiste J. R. Firth en 1935, "Le sens complet d'un mot est toujours contextuel, et aucune étude du sens en dehors du contexte ne peut être prise au sérieux." Nous apprendrons plus tard dans le cours comment capturer les informations contextuelles à partir du texte en utilisant la modélisation du langage. +Jusqu'à présent, nous avons étudié des techniques qui peuvent ajouter un poids de fréquence à différents mots. Cependant, elles ne sont pas capables de représenter le sens ou l'ordre. Comme l'a dit le célèbre linguiste J. R. Firth en 1935 : "Le sens complet d'un mot est toujours contextuel, et aucune étude de sens en dehors du contexte ne peut être prise au sérieux." Nous apprendrons plus tard dans le cours comment capturer les informations contextuelles à partir du texte en utilisant la modélisation du langage. ## 🚀 Défi -Essayez d'autres exercices en utilisant le sac de mots et différents modèles de données. Vous pourriez être inspiré par cette [compétition sur Kaggle](https://www.kaggle.com/competitions/word2vec-nlp-tutorial/overview/part-1-for-beginners-bag-of-words) +Essayez d'autres exercices en utilisant le sac de mots et différents modèles de données. Vous pourriez être inspiré par cette [compétition sur Kaggle](https://www.kaggle.com/competitions/word2vec-nlp-tutorial/overview/part-1-for-beginners-bag-of-words). -## [Quiz post-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/213) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/213) -## Revue & Auto-apprentissage +## Révision et auto-apprentissage -Pratiquez vos compétences avec les embeddings de texte et les techniques de sac de mots sur [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) +Exercez vos compétences avec les techniques d'embedding de texte et de sac de mots sur [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste). ## [Devoir : Notebooks](assignment.md) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/13-TextRep/assignment.md b/translations/fr/lessons/5-NLP/13-TextRep/assignment.md index 169d8224..ed318f0b 100644 --- a/translations/fr/lessons/5-NLP/13-TextRep/assignment.md +++ b/translations/fr/lessons/5-NLP/13-TextRep/assignment.md @@ -1,6 +1,15 @@ + # Devoir : Notebooks -En utilisant les notebooks associés à cette leçon (soit la version PyTorch, soit la version TensorFlow), relancez-les en utilisant votre propre jeu de données, peut-être un de Kaggle, utilisé avec attribution. Réécrivez le notebook pour mettre en avant vos propres découvertes. Essayez des jeux de données innovants qui pourraient être surprenants, comme [celui-ci sur les observations d'OVNIs](https://www.kaggle.com/datasets/NUFORC/ufo-sightings) de NUFORC. +En utilisant les notebooks associés à cette leçon (soit la version PyTorch, soit la version TensorFlow), relancez-les en utilisant votre propre jeu de données, peut-être un provenant de Kaggle, en respectant l'attribution. Réécrivez le notebook pour mettre en avant vos propres conclusions. Essayez des jeux de données innovants qui pourraient s'avérer surprenants, comme [celui-ci sur les observations d'OVNIs](https://www.kaggle.com/datasets/NUFORC/ufo-sightings) de NUFORC. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle humaine est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/14-Embeddings/README.md b/translations/fr/lessons/5-NLP/14-Embeddings/README.md index 98e59179..2b2c70d4 100644 --- a/translations/fr/lessons/5-NLP/14-Embeddings/README.md +++ b/translations/fr/lessons/5-NLP/14-Embeddings/README.md @@ -1,68 +1,77 @@ + # Intégrations ## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/114) -Lors de l'entraînement de classificateurs basés sur BoW ou TF/IDF, nous avons travaillé avec des vecteurs de sac de mots de haute dimension de longueur `vocab_size`, et nous convertissions explicitement des vecteurs de représentation positionnelle de faible dimension en une représentation one-hot éparse. Cependant, cette représentation one-hot n'est pas efficace en termes de mémoire. De plus, chaque mot est traité indépendamment des autres, c'est-à-dire que les vecteurs encodés en one-hot n'expriment aucune similarité sémantique entre les mots. +Lors de l'entraînement de classificateurs basés sur BoW ou TF/IDF, nous travaillions avec des vecteurs bag-of-words de haute dimension de longueur `vocab_size`, et nous convertissions explicitement des vecteurs de représentation positionnelle de basse dimension en une représentation sparse one-hot. Cependant, cette représentation one-hot n'est pas efficace en termes de mémoire. De plus, chaque mot est traité indépendamment des autres, c'est-à-dire que les vecteurs encodés en one-hot n'expriment aucune similarité sémantique entre les mots. -L'idée de **l'intégration** est de représenter les mots par des vecteurs denses de dimension inférieure, qui reflètent d'une certaine manière le sens sémantique d'un mot. Nous discuterons plus tard de la façon de construire des intégrations de mots significatives, mais pour l'instant, considérons simplement les intégrations comme un moyen de réduire la dimensionnalité d'un vecteur de mots. +L'idée des **intégrations** est de représenter les mots par des vecteurs denses de plus faible dimension, qui reflètent d'une certaine manière le sens sémantique d'un mot. Nous discuterons plus tard de la manière de construire des intégrations de mots significatives, mais pour l'instant, considérons simplement les intégrations comme un moyen de réduire la dimensionnalité d'un vecteur de mots. -Ainsi, la couche d'intégration prendrait un mot comme entrée et produirait un vecteur de sortie de dimension spécifiée `embedding_size`. En un sens, c'est très similaire à une couche `Linear`, mais au lieu de prendre un vecteur encodé en one-hot, elle pourra prendre un numéro de mot comme entrée, ce qui nous permet d'éviter de créer de grands vecteurs encodés en one-hot. +Ainsi, la couche d'intégration prendrait un mot en entrée et produirait un vecteur de sortie de taille `embedding_size` spécifiée. En un sens, cela ressemble beaucoup à une couche `Linear`, mais au lieu de prendre un vecteur encodé en one-hot, elle pourra prendre un numéro de mot en entrée, nous permettant d'éviter de créer de grands vecteurs encodés en one-hot. -En utilisant une couche d'intégration comme première couche dans notre réseau de classificateurs, nous pouvons passer d'un modèle de sac de mots à un modèle de **sac d'intégrations**, où nous convertissons d'abord chaque mot de notre texte en l'intégration correspondante, puis nous calculons une fonction agrégée sur toutes ces intégrations, telle que `sum`, `average` ou `max`. +En utilisant une couche d'intégration comme première couche dans notre réseau de classification, nous pouvons passer d'un modèle bag-of-words à un modèle **embedding bag**, où nous convertissons d'abord chaque mot de notre texte en l'intégration correspondante, puis calculons une fonction d'agrégation sur toutes ces intégrations, comme `sum`, `average` ou `max`. -![Image montrant un classificateur d'intégration pour cinq mots en séquence.](../../../../../translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.fr.png) +![Image montrant un classificateur basé sur des intégrations pour cinq mots d'une séquence.](../../../../../translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.fr.png) -> Image par l'auteur +> Image de l'auteur ## ✍️ Exercices : Intégrations -Continuez votre apprentissage dans les cahiers suivants : +Poursuivez votre apprentissage dans les notebooks suivants : * [Intégrations avec PyTorch](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) -* [Intégrations TensorFlow](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) +* [Intégrations avec TensorFlow](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) ## Intégrations sémantiques : Word2Vec -Bien que la couche d'intégration ait appris à mapper les mots à une représentation vectorielle, cette représentation n'avait pas nécessairement beaucoup de signification sémantique. Il serait souhaitable d'apprendre une représentation vectorielle telle que des mots similaires ou des synonymes correspondent à des vecteurs qui sont proches les uns des autres en termes de distance vectorielle (par exemple, distance euclidienne). +Bien que la couche d'intégration apprenne à mapper les mots à une représentation vectorielle, cette représentation n'a pas nécessairement beaucoup de sens sémantique. Il serait intéressant d'apprendre une représentation vectorielle telle que des mots similaires ou des synonymes correspondent à des vecteurs proches les uns des autres en termes de distance vectorielle (par exemple, distance euclidienne). -Pour ce faire, nous devons pré-entraîner notre modèle d'intégration sur une grande collection de textes d'une manière spécifique. Une façon d'entraîner des intégrations sémantiques est appelée [Word2Vec](https://en.wikipedia.org/wiki/Word2vec). Elle est basée sur deux architectures principales utilisées pour produire une représentation distribuée des mots : +Pour cela, nous devons pré-entraîner notre modèle d'intégration sur une grande collection de textes d'une manière spécifique. Une méthode pour entraîner des intégrations sémantiques s'appelle [Word2Vec](https://en.wikipedia.org/wiki/Word2vec). Elle repose sur deux principales architectures utilisées pour produire une représentation distribuée des mots : - - **Sac de mots continu** (CBoW) — dans cette architecture, nous entraînons le modèle à prédire un mot à partir du contexte environnant. Étant donné le ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$, l'objectif du modèle est de prédire $W_0$ à partir de $(W_{-2},W_{-1},W_1,W_2)$. - - **Skip-gram continu** est l'opposé de CBoW. Le modèle utilise une fenêtre de mots contextuels environnants pour prédire le mot actuel. + - **Continuous bag-of-words** (CBoW) — dans cette architecture, nous entraînons le modèle à prédire un mot à partir du contexte environnant. Étant donné le ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$, l'objectif du modèle est de prédire $W_0$ à partir de $(W_{-2},W_{-1},W_1,W_2)$. + - **Continuous skip-gram** est l'opposé de CBoW. Le modèle utilise une fenêtre de mots de contexte environnants pour prédire le mot actuel. -CBoW est plus rapide, tandis que skip-gram est plus lent, mais il fait un meilleur travail de représentation des mots peu fréquents. +CBoW est plus rapide, tandis que skip-gram est plus lent, mais représente mieux les mots peu fréquents. -![Image montrant à la fois les algorithmes CBoW et Skip-Gram pour convertir des mots en vecteurs.](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.fr.png) +![Image montrant les algorithmes CBoW et Skip-Gram pour convertir des mots en vecteurs.](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.fr.png) -> Image tirée [de cet article](https://arxiv.org/pdf/1301.3781.pdf) +> Image tirée de [cet article](https://arxiv.org/pdf/1301.3781.pdf) -Les intégrations pré-entraînées Word2Vec (ainsi que d'autres modèles similaires, comme GloVe) peuvent également être utilisées à la place de la couche d'intégration dans les réseaux de neurones. Cependant, nous devons traiter les vocabulaires, car le vocabulaire utilisé pour pré-entraîner Word2Vec/GloVe est susceptible de différer du vocabulaire de notre corpus de texte. Consultez les cahiers ci-dessus pour voir comment ce problème peut être résolu. +Les intégrations pré-entraînées Word2Vec (ainsi que d'autres modèles similaires, comme GloVe) peuvent également être utilisées à la place de la couche d'intégration dans les réseaux neuronaux. Cependant, nous devons gérer les vocabulaires, car le vocabulaire utilisé pour pré-entraîner Word2Vec/GloVe est probablement différent du vocabulaire de notre corpus de texte. Consultez les notebooks ci-dessus pour voir comment résoudre ce problème. ## Intégrations contextuelles -Une limitation clé des représentations d'intégration pré-entraînées traditionnelles telles que Word2Vec est le problème de la désambiguïsation du sens des mots. Bien que les intégrations pré-entraînées puissent capturer une partie du sens des mots dans un contexte, chaque signification possible d'un mot est encodée dans la même intégration. Cela peut poser des problèmes dans les modèles en aval, car de nombreux mots, comme le mot 'play', ont des significations différentes selon le contexte dans lequel ils sont utilisés. +Une limitation clé des représentations d'intégrations pré-entraînées traditionnelles comme Word2Vec est le problème de désambiguïsation des sens des mots. Bien que les intégrations pré-entraînées puissent capturer une partie du sens des mots dans leur contexte, chaque sens possible d'un mot est encodé dans la même intégration. Cela peut poser des problèmes dans les modèles en aval, car de nombreux mots, comme le mot "play", ont des significations différentes selon le contexte dans lequel ils sont utilisés. -Par exemple, le mot 'play' dans ces deux phrases différentes a des significations assez différentes : +Par exemple, le mot "play" dans ces deux phrases a des significations très différentes : -- Je suis allé à une **pièce** au théâtre. +- Je suis allé voir une **pièce** au théâtre. - John veut **jouer** avec ses amis. -Les intégrations pré-entraînées ci-dessus représentent ces deux significations du mot 'play' dans la même intégration. Pour surmonter cette limitation, nous devons construire des intégrations basées sur le **modèle linguistique**, qui est entraîné sur un grand corpus de texte et *sait* comment les mots peuvent être assemblés dans différents contextes. La discussion sur les intégrations contextuelles est hors de portée de ce tutoriel, mais nous y reviendrons lorsque nous parlerons des modèles linguistiques plus tard dans le cours. +Les intégrations pré-entraînées ci-dessus représentent ces deux significations du mot "play" dans la même intégration. Pour surmonter cette limitation, nous devons construire des intégrations basées sur le **modèle de langage**, qui est entraîné sur un large corpus de texte et *sait* comment les mots peuvent être assemblés dans différents contextes. La discussion sur les intégrations contextuelles dépasse le cadre de ce tutoriel, mais nous y reviendrons lorsque nous parlerons des modèles de langage plus tard dans le cours. ## Conclusion -Dans cette leçon, vous avez découvert comment construire et utiliser des couches d'intégration dans TensorFlow et Pytorch pour mieux refléter les significations sémantiques des mots. +Dans cette leçon, vous avez découvert comment construire et utiliser des couches d'intégration dans TensorFlow et PyTorch pour mieux refléter les significations sémantiques des mots. ## 🚀 Défi -Word2Vec a été utilisé pour des applications intéressantes, y compris la génération de paroles de chansons et de poésie. Jetez un œil à [cet article](https://www.politetype.com/blog/word2vec-color-poems) qui explique comment l'auteur a utilisé Word2Vec pour générer de la poésie. Regardez également [cette vidéo de Dan Shiffmann](https://www.youtube.com/watch?v=LSS_bos_TPI&ab_channel=TheCodingTrain) pour découvrir une autre explication de cette technique. Ensuite, essayez d'appliquer ces techniques à votre propre corpus de texte, peut-être provenant de Kaggle. +Word2Vec a été utilisé pour des applications intéressantes, notamment la génération de paroles de chansons et de poésie. Consultez [cet article](https://www.politetype.com/blog/word2vec-color-poems) qui explique comment l'auteur a utilisé Word2Vec pour générer de la poésie. Regardez également [cette vidéo de Dan Shiffmann](https://www.youtube.com/watch?v=LSS_bos_TPI&ab_channel=TheCodingTrain) pour découvrir une autre explication de cette technique. Ensuite, essayez d'appliquer ces techniques à votre propre corpus de texte, peut-être issu de Kaggle. ## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/214) -## Revue & Auto-apprentissage +## Révision & Auto-apprentissage -Lisez cet article sur Word2Vec : [Estimation efficace des représentations de mots dans l'espace vectoriel](https://arxiv.org/pdf/1301.3781.pdf) +Lisez cet article sur Word2Vec : [Efficient Estimation of Word Representations in Vector Space](https://arxiv.org/pdf/1301.3781.pdf) -## [Devoir : Cahiers](assignment.md) +## [Devoir : Notebooks](assignment.md) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/14-Embeddings/assignment.md b/translations/fr/lessons/5-NLP/14-Embeddings/assignment.md index c0fd411d..49860ab5 100644 --- a/translations/fr/lessons/5-NLP/14-Embeddings/assignment.md +++ b/translations/fr/lessons/5-NLP/14-Embeddings/assignment.md @@ -1,6 +1,15 @@ -# Devoir : Carnets + +# Devoir : Notebooks -En utilisant les carnets associés à cette leçon (soit la version PyTorch, soit la version TensorFlow), exécutez-les à nouveau en utilisant votre propre ensemble de données, peut-être un de Kaggle, en l'utilisant avec attribution. Réécrivez le carnet pour mettre en avant vos propres découvertes. Essayez un type différent d'ensemble de données et documentez vos résultats, en utilisant des textes comme [ces paroles des Beatles](https://www.kaggle.com/datasets/jenlooper/beatles-lyrics). +En utilisant les notebooks associés à cette leçon (soit la version PyTorch, soit la version TensorFlow), exécutez-les à nouveau avec votre propre jeu de données, peut-être un provenant de Kaggle, en respectant les attributions. Réécrivez le notebook pour mettre en avant vos propres observations. Essayez un type de jeu de données différent et documentez vos conclusions, en utilisant par exemple du texte comme [ces paroles des Beatles](https://www.kaggle.com/datasets/jenlooper/beatles-lyrics). **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'atteindre l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/15-LanguageModeling/README.md b/translations/fr/lessons/5-NLP/15-LanguageModeling/README.md index c80cf8f7..2ee7feb0 100644 --- a/translations/fr/lessons/5-NLP/15-LanguageModeling/README.md +++ b/translations/fr/lessons/5-NLP/15-LanguageModeling/README.md @@ -1,45 +1,54 @@ -# Modélisation du Langage + +# Modélisation du langage -Les embeddings sémantiques, tels que Word2Vec et GloVe, représentent en fait une première étape vers la **modélisation du langage** - créer des modèles qui comprennent (ou représentent) d'une certaine manière la nature du langage. +Les embeddings sémantiques, tels que Word2Vec et GloVe, sont en réalité une première étape vers la **modélisation du langage** - créer des modèles qui *comprennent* (ou *représentent*) d'une certaine manière la nature du langage. -## [Quiz pré-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/115) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/115) -L'idée principale derrière la modélisation du langage est de les entraîner sur des ensembles de données non étiquetés de manière non supervisée. Cela est important car nous disposons de quantités énormes de texte non étiqueté, tandis que la quantité de texte étiqueté serait toujours limitée par l'effort que nous pouvons consacrer à l'étiquetage. Le plus souvent, nous pouvons construire des modèles de langage capables de **prédire les mots manquants** dans le texte, car il est facile de masquer un mot aléatoire dans le texte et de l'utiliser comme échantillon d'entraînement. +L'idée principale derrière la modélisation du langage est de les entraîner sur des ensembles de données non étiquetés de manière non supervisée. Cela est important car nous disposons de grandes quantités de texte non étiqueté, tandis que la quantité de texte étiqueté sera toujours limitée par l'effort nécessaire pour l'étiquetage. Le plus souvent, nous pouvons construire des modèles de langage capables de **prédire les mots manquants** dans le texte, car il est facile de masquer un mot aléatoire dans le texte et de l'utiliser comme échantillon d'entraînement. -## Entraînement des Embeddings +## Entraînement des embeddings -Dans nos exemples précédents, nous avons utilisé des embeddings sémantiques pré-entraînés, mais il est intéressant de voir comment ces embeddings peuvent être entraînés. Plusieurs idées possibles peuvent être utilisées : +Dans nos exemples précédents, nous avons utilisé des embeddings sémantiques pré-entraînés, mais il est intéressant de voir comment ces embeddings peuvent être entraînés. Plusieurs idées peuvent être utilisées : -* Modélisation du langage **N-Gram**, lorsque nous prédisons un jeton en regardant N jetons précédents (N-gram) -* **Continuous Bag-of-Words** (CBoW), lorsque nous prédisons le jeton du milieu $W_0$ dans une séquence de jetons $W_{-N}$, ..., $W_N$. -* **Skip-gram**, où nous prédisons un ensemble de jetons voisins {$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$} à partir du jeton du milieu $W_0$. +* **Modélisation de langage N-Gram**, où l'on prédit un token en se basant sur les N tokens précédents (N-gram). +* **Continuous Bag-of-Words** (CBoW), où l'on prédit le token central $W_0$ dans une séquence de tokens $W_{-N}$, ..., $W_N$. +* **Skip-gram**, où l'on prédit un ensemble de tokens voisins {$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$} à partir du token central $W_0$. -![image provenant d'un article sur la conversion de mots en vecteurs](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.fr.png) +![image tirée d'un article sur la conversion des mots en vecteurs](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.fr.png) -> Image tirée [de cet article](https://arxiv.org/pdf/1301.3781.pdf) +> Image tirée de [cet article](https://arxiv.org/pdf/1301.3781.pdf) -## ✍️ Notebooks d'Exemple : Entraînement du modèle CBoW +## ✍️ Notebooks d'exemple : Entraînement du modèle CBoW -Poursuivez votre apprentissage dans les notebooks suivants : +Poursuivez votre apprentissage avec les notebooks suivants : * [Entraînement de CBoW Word2Vec avec TensorFlow](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) * [Entraînement de CBoW Word2Vec avec PyTorch](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) ## Conclusion -Dans la leçon précédente, nous avons vu que les embeddings de mots fonctionnent comme par magie ! Maintenant, nous savons que l'entraînement des embeddings de mots n'est pas une tâche très complexe, et nous devrions être en mesure d'entraîner nos propres embeddings de mots pour un texte spécifique à un domaine si nécessaire. +Dans la leçon précédente, nous avons vu que les embeddings de mots fonctionnent comme par magie ! Nous savons maintenant que l'entraînement des embeddings de mots n'est pas une tâche très complexe, et nous devrions être capables d'entraîner nos propres embeddings de mots pour du texte spécifique à un domaine si nécessaire. -## [Quiz post-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/215) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/215) -## Revue & Auto-apprentissage +## Révision et auto-apprentissage -* [Tutoriel officiel PyTorch sur la Modélisation du Langage](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html). +* [Tutoriel officiel PyTorch sur la modélisation du langage](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html). * [Tutoriel officiel TensorFlow sur l'entraînement du modèle Word2Vec](https://www.TensorFlow.org/tutorials/text/word2vec). -* L'utilisation du cadre **gensim** pour entraîner les embeddings les plus couramment utilisés en quelques lignes de code est décrite [dans cette documentation](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html). +* L'utilisation du framework **gensim** pour entraîner les embeddings les plus couramment utilisés en quelques lignes de code est décrite [dans cette documentation](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html). -## 🚀 [Devoir : Entraîner un Modèle Skip-Gram](lab/README.md) +## 🚀 [Exercice : Entraîner un modèle Skip-Gram](lab/README.md) -Dans le laboratoire, nous vous mettons au défi de modifier le code de cette leçon pour entraîner un modèle skip-gram au lieu de CBoW. [Lisez les détails](lab/README.md) +Dans le laboratoire, nous vous mettons au défi de modifier le code de cette leçon pour entraîner un modèle Skip-Gram au lieu de CBoW. [Lisez les détails](lab/README.md). **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/15-LanguageModeling/lab/README.md b/translations/fr/lessons/5-NLP/15-LanguageModeling/lab/README.md index 61cb515c..e65b26e2 100644 --- a/translations/fr/lessons/5-NLP/15-LanguageModeling/lab/README.md +++ b/translations/fr/lessons/5-NLP/15-LanguageModeling/lab/README.md @@ -1,14 +1,23 @@ -# Modèle Skip-Gram pour l'Entraînement + +# Entraîner un modèle Skip-Gram -Devoir de [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Devoir de laboratoire tiré du [Curriculum AI pour débutants](https://github.com/microsoft/ai-for-beginners). ## Tâche -Dans ce laboratoire, nous vous mettons au défi d'entraîner un modèle Word2Vec en utilisant la technique Skip-Gram. Entraînez un réseau avec des embeddings pour prédire les mots voisins dans une fenêtre Skip-Gram de $N$-tokens de large. Vous pouvez utiliser [le code de cette leçon](../../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) et le modifier légèrement. +Dans ce laboratoire, nous vous mettons au défi d'entraîner un modèle Word2Vec en utilisant la technique Skip-Gram. Entraînez un réseau avec des embeddings pour prédire les mots voisins dans une fenêtre Skip-Gram de $N$ tokens de large. Vous pouvez utiliser le [code de cette leçon](../../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) et le modifier légèrement. -## Le Jeu de Données +## Le jeu de données -Vous êtes libre d'utiliser n'importe quel livre. Vous pouvez trouver de nombreux textes gratuits sur [Project Gutenberg](https://www.gutenberg.org/), par exemple, voici un lien direct vers [Les Aventures d'Alice au Pays des Merveilles](https://www.gutenberg.org/files/11/11-0.txt) de Lewis Carroll. Ou, vous pouvez utiliser les pièces de Shakespeare, que vous pouvez obtenir en utilisant le code suivant : +Vous êtes libre d'utiliser n'importe quel livre. Vous pouvez trouver de nombreux textes gratuits sur [Project Gutenberg](https://www.gutenberg.org/), par exemple, voici un lien direct vers [Les Aventures d'Alice au Pays des Merveilles](https://www.gutenberg.org/files/11/11-0.txt)) de Lewis Carroll. Ou bien, vous pouvez utiliser les pièces de Shakespeare, que vous pouvez obtenir avec le code suivant : ```python path_to_file = tf.keras.utils.get_file( @@ -19,11 +28,11 @@ text = open(path_to_file, 'rb').read().decode(encoding='utf-8') ## Explorez ! -Si vous avez le temps et que vous souhaitez approfondir le sujet, essayez d'explorer plusieurs éléments : +Si vous avez du temps et souhaitez approfondir le sujet, essayez d'explorer plusieurs aspects : -* Comment la taille de l'embedding affecte-t-elle les résultats ? +* Comment la taille des embeddings affecte-t-elle les résultats ? * Comment les différents styles de texte influencent-ils le résultat ? -* Prenez plusieurs types de mots très différents et leurs synonymes, obtenez leurs représentations vectorielles, appliquez l'ACP pour réduire les dimensions à 2 et tracez-les dans un espace 2D. Voyez-vous des motifs ? +* Prenez plusieurs types de mots très différents et leurs synonymes, obtenez leurs représentations vectorielles, appliquez une PCA pour réduire les dimensions à 2, et tracez-les dans un espace 2D. Voyez-vous des motifs ? **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/16-RNN/README.md b/translations/fr/lessons/5-NLP/16-RNN/README.md index b4e83e1d..dc0bd087 100644 --- a/translations/fr/lessons/5-NLP/16-RNN/README.md +++ b/translations/fr/lessons/5-NLP/16-RNN/README.md @@ -1,87 +1,96 @@ -# Réseaux de Neurones Récurrents + +# Réseaux Neuronaux Récurrents -## [Quiz pré-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/116) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/116) -Dans les sections précédentes, nous avons utilisé des représentations sémantiques riches du texte et un simple classificateur linéaire au-dessus des embeddings. Ce que fait cette architecture, c'est capturer le sens agrégé des mots dans une phrase, mais elle ne prend pas en compte l'**ordre** des mots, car l'opération d'agrégation sur les embeddings a supprimé cette information du texte original. Étant donné que ces modèles ne peuvent pas modéliser l'ordre des mots, ils ne peuvent pas résoudre des tâches plus complexes ou ambiguës telles que la génération de texte ou la réponse à des questions. +Dans les sections précédentes, nous avons utilisé des représentations sémantiques riches de texte et un simple classificateur linéaire au-dessus des embeddings. Cette architecture capture le sens global des mots dans une phrase, mais elle ne prend pas en compte l'**ordre** des mots, car l'opération d'agrégation sur les embeddings supprime cette information du texte original. Étant donné que ces modèles ne peuvent pas modéliser l'ordre des mots, ils ne peuvent pas résoudre des tâches plus complexes ou ambiguës comme la génération de texte ou la réponse à des questions. -Pour capturer le sens d'une séquence de texte, nous devons utiliser une autre architecture de réseau de neurones, appelée **réseau de neurones récurrents**, ou RNN. Dans un RNN, nous faisons passer notre phrase à travers le réseau un symbole à la fois, et le réseau produit un **état**, que nous renvoyons ensuite au réseau avec le symbole suivant. +Pour capturer le sens d'une séquence de texte, nous devons utiliser une autre architecture de réseau neuronal, appelée **réseau neuronal récurrent**, ou RNN. Dans un RNN, nous faisons passer notre phrase à travers le réseau un symbole à la fois, et le réseau produit un certain **état**, que nous transmettons ensuite au réseau avec le symbole suivant. ![RNN](../../../../../translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.fr.png) > Image par l'auteur -Étant donné la séquence d'entrée de tokens X0,...,Xn, le RNN crée une séquence de blocs de réseaux de neurones et entraîne cette séquence de bout en bout en utilisant la rétropropagation. Chaque bloc de réseau prend une paire (Xi,Si) comme entrée et produit Si+1 en résultat. L'état final Sn ou (sortie Yn) passe dans un classificateur linéaire pour produire le résultat. Tous les blocs de réseau partagent les mêmes poids et sont entraînés de bout en bout en utilisant un passage de rétropropagation. +Étant donné la séquence d'entrée de tokens X0,...,Xn, le RNN crée une séquence de blocs de réseau neuronal et entraîne cette séquence de bout en bout en utilisant la rétropropagation. Chaque bloc de réseau prend une paire (Xi,Si) comme entrée et produit Si+1 en résultat. L'état final Sn ou (la sortie Yn) est ensuite transmis à un classificateur linéaire pour produire le résultat. Tous les blocs de réseau partagent les mêmes poids et sont entraînés de bout en bout en une seule passe de rétropropagation. -Puisque les vecteurs d'état S0,...,Sn sont passés à travers le réseau, il est capable d'apprendre les dépendances séquentielles entre les mots. Par exemple, lorsque le mot *not* apparaît quelque part dans la séquence, il peut apprendre à nier certains éléments au sein du vecteur d'état, ce qui entraîne une négation. +Comme les vecteurs d'état S0,...,Sn sont transmis à travers le réseau, celui-ci est capable d'apprendre les dépendances séquentielles entre les mots. Par exemple, lorsque le mot *pas* apparaît quelque part dans la séquence, le réseau peut apprendre à négativer certains éléments dans le vecteur d'état, ce qui entraîne une négation. -> ✅ Étant donné que les poids de tous les blocs RNN sur l'image ci-dessus sont partagés, la même image peut être représentée comme un seul bloc (à droite) avec une boucle de rétroaction récurrente, qui renvoie l'état de sortie du réseau à l'entrée. +> ✅ Étant donné que les poids de tous les blocs RNN sur l'image ci-dessus sont partagés, la même image peut être représentée comme un seul bloc (à droite) avec une boucle de rétroaction récurrente, qui transmet l'état de sortie du réseau à l'entrée. -## Anatomie d'une cellule RNN +## Anatomie d'une Cellule RNN -Voyons comment une cellule RNN simple est organisée. Elle accepte l'état précédent Si-1 et le symbole actuel Xi comme entrées, et doit produire l'état de sortie Si (et, parfois, nous sommes également intéressés par une autre sortie Yi, comme dans le cas des réseaux génératifs). +Voyons comment une cellule RNN simple est organisée. Elle accepte l'état précédent Si-1 et le symbole actuel Xi comme entrées, et doit produire l'état de sortie Si (et, parfois, nous nous intéressons également à une autre sortie Yi, comme dans le cas des réseaux génératifs). -Une cellule RNN simple possède deux matrices de poids à l'intérieur : l'une transforme un symbole d'entrée (appelons-la W), et l'autre transforme un état d'entrée (H). Dans ce cas, la sortie du réseau est calculée comme σ(W×Xi+H×Si-1+b), où σ est la fonction d'activation et b est un biais supplémentaire. +Une cellule RNN simple contient deux matrices de poids internes : l'une transforme un symbole d'entrée (appelons-la W), et l'autre transforme un état d'entrée (H). Dans ce cas, la sortie du réseau est calculée comme σ(W×Xi+H×Si-1+b), où σ est la fonction d'activation et b est un biais supplémentaire. -Anatomie de la cellule RNN +Anatomie d'une cellule RNN > Image par l'auteur -Dans de nombreux cas, les tokens d'entrée sont passés par la couche d'embedding avant d'entrer dans le RNN pour réduire la dimensionnalité. Dans ce cas, si la dimension des vecteurs d'entrée est *emb_size*, et que le vecteur d'état est *hid_size* - la taille de W est *emb_size*×*hid_size*, et la taille de H est *hid_size*×*hid_size*. +Dans de nombreux cas, les tokens d'entrée passent par une couche d'embedding avant d'entrer dans le RNN pour réduire la dimensionnalité. Dans ce cas, si la dimension des vecteurs d'entrée est *emb_size*, et que le vecteur d'état est *hid_size* - la taille de W est *emb_size*×*hid_size*, et la taille de H est *hid_size*×*hid_size*. -## Mémoire à Long Terme et à Court Terme (LSTM) +## Long Short Term Memory (LSTM) -Un des principaux problèmes des RNN classiques est le problème des **gradients qui disparaissent**. Étant donné que les RNN sont entraînés de bout en bout en un seul passage de rétropropagation, il a des difficultés à propager l'erreur vers les premières couches du réseau, et donc le réseau ne peut pas apprendre les relations entre des tokens éloignés. Une des façons d'éviter ce problème est d'introduire une **gestion explicite de l'état** en utilisant ce que l'on appelle des **portes**. Il existe deux architectures bien connues de ce type : **Long Short Term Memory** (LSTM) et **Gated Relay Unit** (GRU). +L'un des principaux problèmes des RNN classiques est le problème dit de **l'atténuation des gradients**. Comme les RNN sont entraînés de bout en bout en une seule passe de rétropropagation, il est difficile de propager l'erreur jusqu'aux premières couches du réseau, ce qui empêche le réseau d'apprendre les relations entre des tokens éloignés. L'une des façons d'éviter ce problème est d'introduire une **gestion explicite de l'état** en utilisant ce qu'on appelle des **portes**. Il existe deux architectures bien connues de ce type : **Long Short Term Memory** (LSTM) et **Gated Relay Unit** (GRU). -![Image montrant un exemple de cellule mémoire à long terme](../../../../../lessons/5-NLP/16-RNN/images/long-short-term-memory-cell.svg) +![Image montrant un exemple de cellule LSTM](../../../../../lessons/5-NLP/16-RNN/images/long-short-term-memory-cell.svg) > Source de l'image à déterminer -Le réseau LSTM est organisé de manière similaire au RNN, mais il y a deux états qui sont passés de couche en couche : l'état actuel C, et le vecteur caché H. À chaque unité, le vecteur caché Hi est concaténé avec l'entrée Xi, et ils contrôlent ce qui arrive à l'état C via des **portes**. Chaque porte est un réseau de neurones avec une activation sigmoïde (sortie dans la plage [0,1]), qui peut être considéré comme un masque au niveau des bits lorsqu'il est multiplié par le vecteur d'état. Il y a les portes suivantes (de gauche à droite sur l'image ci-dessus) : +Le réseau LSTM est organisé de manière similaire au RNN, mais il y a deux états qui sont transmis d'une couche à l'autre : l'état réel C et le vecteur caché H. À chaque unité, le vecteur caché Hi est concaténé avec l'entrée Xi, et ils contrôlent ce qui arrive à l'état C via des **portes**. Chaque porte est un réseau neuronal avec une activation sigmoïde (sortie dans la plage [0,1]), qui peut être considérée comme un masque binaire lorsqu'elle est multipliée par le vecteur d'état. Les portes suivantes existent (de gauche à droite sur l'image ci-dessus) : -* La **porte d'oubli** prend un vecteur caché et détermine quels composants du vecteur C nous devons oublier, et lesquels passer. +* La **porte d'oubli** prend un vecteur caché et détermine quelles composantes du vecteur C nous devons oublier et lesquelles transmettre. * La **porte d'entrée** prend certaines informations des vecteurs d'entrée et cachés et les insère dans l'état. -* La **porte de sortie** transforme l'état via une couche linéaire avec activation *tanh*, puis sélectionne certains de ses composants en utilisant un vecteur caché Hi pour produire un nouvel état Ci+1. +* La **porte de sortie** transforme l'état via une couche linéaire avec une activation *tanh*, puis sélectionne certaines de ses composantes à l'aide d'un vecteur caché Hi pour produire un nouvel état Ci+1. -Les composants de l'état C peuvent être considérés comme des indicateurs qui peuvent être activés ou désactivés. Par exemple, lorsque nous rencontrons un nom *Alice* dans la séquence, nous pouvons vouloir supposer qu'il fait référence à un personnage féminin et activer l'indicateur dans l'état que nous avons un nom féminin dans la phrase. Lorsque nous rencontrons ensuite des phrases comme *et Tom*, nous activerons l'indicateur que nous avons un nom pluriel. Ainsi, en manipulant l'état, nous pouvons supposément garder une trace des propriétés grammaticales des parties de la phrase. +Les composantes de l'état C peuvent être considérées comme des indicateurs qui peuvent être activés ou désactivés. Par exemple, lorsque nous rencontrons un nom comme *Alice* dans la séquence, nous pouvons supposer qu'il s'agit d'un personnage féminin et activer l'indicateur dans l'état indiquant que nous avons un nom féminin dans la phrase. Lorsque nous rencontrons ensuite des phrases comme *et Tom*, nous activerons l'indicateur indiquant que nous avons un nom au pluriel. Ainsi, en manipulant l'état, nous pouvons théoriquement suivre les propriétés grammaticales des parties de la phrase. -> ✅ Une excellente ressource pour comprendre les rouages des LSTM est cet excellent article [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) par Christopher Olah. +> ✅ Une excellente ressource pour comprendre les mécanismes internes des LSTM est cet excellent article [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) de Christopher Olah. -## RNNs Bidirectionnels et Multicouches +## RNN Bidirectionnels et Multicouches -Nous avons discuté des réseaux récurrents qui fonctionnent dans une seule direction, du début d'une séquence à la fin. Cela semble naturel, car cela ressemble à la façon dont nous lisons et écoutons la parole. Cependant, puisque dans de nombreux cas pratiques nous avons un accès aléatoire à la séquence d'entrée, il peut être judicieux d'exécuter un calcul récurrent dans les deux directions. De tels réseaux sont appelés RNNs **bidirectionnels**. Lorsqu'on traite un réseau bidirectionnel, nous aurions besoin de deux vecteurs d'état cachés, un pour chaque direction. +Nous avons discuté des réseaux récurrents qui fonctionnent dans une seule direction, du début d'une séquence à la fin. Cela semble naturel, car cela ressemble à la façon dont nous lisons et écoutons un discours. Cependant, dans de nombreux cas pratiques, nous avons un accès aléatoire à la séquence d'entrée, il peut donc être judicieux d'exécuter le calcul récurrent dans les deux directions. Ces réseaux sont appelés **RNN bidirectionnels**. Lorsqu'on travaille avec un réseau bidirectionnel, nous aurons besoin de deux vecteurs d'état cachés, un pour chaque direction. -Un réseau récurrent, qu'il soit unidirectionnel ou bidirectionnel, capture certains motifs au sein d'une séquence et peut les stocker dans un vecteur d'état ou les passer en sortie. Comme avec les réseaux convolutifs, nous pouvons construire une autre couche récurrente au-dessus de la première pour capturer des motifs de niveau supérieur et construire à partir de motifs de bas niveau extraits par la première couche. Cela nous conduit à la notion de **RNN multicouche** qui se compose de deux réseaux récurrents ou plus, où la sortie de la couche précédente est passée à la couche suivante en tant qu'entrée. +Un réseau récurrent, qu'il soit unidirectionnel ou bidirectionnel, capture certains motifs au sein d'une séquence et peut les stocker dans un vecteur d'état ou les transmettre en sortie. Comme pour les réseaux convolutionnels, nous pouvons construire une autre couche récurrente au-dessus de la première pour capturer des motifs de niveau supérieur et construire à partir des motifs de bas niveau extraits par la première couche. Cela nous amène à la notion de **RNN multicouche**, qui se compose de deux réseaux récurrents ou plus, où la sortie de la couche précédente est transmise à la couche suivante comme entrée. -![Image montrant un RNN multicouche de mémoire à long terme](../../../../../translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.fr.jpg) +![Image montrant un RNN multicouche avec LSTM](../../../../../translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.fr.jpg) -*Image tirée [de cet excellent article](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) par Fernando López* +*Image tirée de [cet excellent article](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) de Fernando López* ## ✍️ Exercices : Embeddings -Continuez votre apprentissage dans les notebooks suivants : +Poursuivez votre apprentissage dans les notebooks suivants : * [RNNs avec PyTorch](../../../../../lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) * [RNNs avec TensorFlow](../../../../../lessons/5-NLP/16-RNN/RNNTF.ipynb) ## Conclusion -Dans cette unité, nous avons vu que les RNNs peuvent être utilisés pour la classification de séquences, mais en fait, ils peuvent gérer de nombreuses autres tâches, telles que la génération de texte, la traduction automatique, et plus encore. Nous considérerons ces tâches dans la prochaine unité. +Dans cette unité, nous avons vu que les RNN peuvent être utilisés pour la classification de séquences, mais en réalité, ils peuvent gérer de nombreuses autres tâches, telles que la génération de texte, la traduction automatique, et bien plus encore. Nous examinerons ces tâches dans l'unité suivante. ## 🚀 Défi -Lisez quelques documents sur les LSTMs et envisagez leurs applications : +Lisez quelques articles sur les LSTM et réfléchissez à leurs applications : - [Grid Long Short-Term Memory](https://arxiv.org/pdf/1507.01526v1.pdf) - [Show, Attend and Tell: Neural Image Caption Generation with Visual Attention](https://arxiv.org/pdf/1502.03044v2.pdf) -## [Quiz post-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/216) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/216) -## Révision & Auto-étude +## Révision & Auto-apprentissage -- [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) par Christopher Olah. +- [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) de Christopher Olah. ## [Devoir : Notebooks](assignment.md) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/16-RNN/assignment.md b/translations/fr/lessons/5-NLP/16-RNN/assignment.md index be095f9a..cef382f8 100644 --- a/translations/fr/lessons/5-NLP/16-RNN/assignment.md +++ b/translations/fr/lessons/5-NLP/16-RNN/assignment.md @@ -1,6 +1,15 @@ + # Devoir : Notebooks -En utilisant les notebooks associés à cette leçon (soit la version PyTorch, soit la version TensorFlow), exécutez-les à nouveau en utilisant votre propre jeu de données, peut-être un de Kaggle, utilisé avec attribution. Réécrivez le notebook pour mettre en évidence vos propres découvertes. Essayez un autre type de jeu de données et documentez vos résultats, en utilisant un texte tel que [ce jeu de données de compétition Kaggle sur les tweets météo](https://www.kaggle.com/competitions/crowdflower-weather-twitter/data?select=train.csv). +En utilisant les notebooks associés à cette leçon (soit la version PyTorch, soit la version TensorFlow), relancez-les en utilisant votre propre jeu de données, peut-être un provenant de Kaggle, utilisé avec attribution. Réécrivez le notebook pour mettre en évidence vos propres conclusions. Essayez un type de jeu de données différent et documentez vos observations, en utilisant un texte tel que [ce jeu de données de compétition Kaggle sur les tweets météo](https://www.kaggle.com/competitions/crowdflower-weather-twitter/data?select=train.csv). **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous nous efforçons d'atteindre l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction professionnelle humaine est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/17-GenerativeNetworks/README.md b/translations/fr/lessons/5-NLP/17-GenerativeNetworks/README.md index 7d27e3c6..570c1b61 100644 --- a/translations/fr/lessons/5-NLP/17-GenerativeNetworks/README.md +++ b/translations/fr/lessons/5-NLP/17-GenerativeNetworks/README.md @@ -1,35 +1,44 @@ + # Réseaux génératifs -## [Quiz pré-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/117) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/117) -Les réseaux de neurones récurrents (RNN) et leurs variantes à cellules gatées telles que les cellules de mémoire à long terme et à court terme (LSTM) et les unités récurrentes gatées (GRU) ont fourni un mécanisme pour la modélisation du langage en ce sens qu'ils peuvent apprendre l'ordre des mots et fournir des prédictions pour le mot suivant dans une séquence. Cela nous permet d'utiliser les RNN pour des **tâches génératives**, telles que la génération de texte ordinaire, la traduction automatique et même la légende d'images. +Les réseaux neuronaux récurrents (RNN) et leurs variantes à cellules à portes, comme les cellules Long Short Term Memory (LSTM) et les Gated Recurrent Units (GRU), offrent un mécanisme pour la modélisation du langage, car ils peuvent apprendre l'ordre des mots et prédire le mot suivant dans une séquence. Cela nous permet d'utiliser les RNN pour des **tâches génératives**, telles que la génération de texte ordinaire, la traduction automatique et même la génération de légendes pour des images. -> ✅ Pensez à toutes les fois où vous avez bénéficié de tâches génératives telles que la complétion de texte pendant que vous tapez. Faites des recherches sur vos applications préférées pour voir si elles ont utilisé des RNN. +> ✅ Pensez à toutes les fois où vous avez bénéficié de tâches génératives, comme la complétion de texte pendant que vous tapez. Faites des recherches sur vos applications préférées pour voir si elles utilisent des RNN. -Dans l'architecture RNN que nous avons discutée dans l'unité précédente, chaque unité RNN produisait le prochain état caché en sortie. Cependant, nous pouvons également ajouter une autre sortie à chaque unité récurrente, ce qui nous permettrait de produire une **séquence** (qui est de la même longueur que la séquence originale). De plus, nous pouvons utiliser des unités RNN qui n'acceptent pas une entrée à chaque étape, mais prennent simplement un vecteur d'état initial, puis produisent une séquence de sorties. +Dans l'architecture RNN que nous avons abordée dans l'unité précédente, chaque unité RNN produisait l'état caché suivant comme sortie. Cependant, nous pouvons également ajouter une autre sortie à chaque unité récurrente, ce qui nous permettrait de produire une **séquence** (de même longueur que la séquence d'origine). De plus, nous pouvons utiliser des unités RNN qui n'acceptent pas d'entrée à chaque étape, mais prennent simplement un vecteur d'état initial, puis produisent une séquence de sorties. -Cela permet différentes architectures neuronales qui sont montrées dans l'image ci-dessous : +Cela permet différentes architectures neuronales, comme illustré dans l'image ci-dessous : -![Image montrant des motifs courants de réseaux de neurones récurrents.](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.fr.jpg) +![Image montrant des modèles courants de réseaux neuronaux récurrents.](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.fr.jpg) -> Image provenant de l'article de blog [L'efficacité déraisonnable des réseaux de neurones récurrents](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) par [Andrej Karpaty](http://karpathy.github.io/) +> Image tirée de l'article de blog [Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) par [Andrej Karpaty](http://karpathy.github.io/) -* **Un à un** est un réseau de neurones traditionnel avec une entrée et une sortie -* **Un à plusieurs** est une architecture générative qui accepte une valeur d'entrée et génère une séquence de valeurs de sortie. Par exemple, si nous voulons entraîner un réseau de **légende d'images** qui produirait une description textuelle d'une image, nous pouvons prendre une image comme entrée, la passer à travers un CNN pour obtenir son état caché, puis faire générer une chaîne récurrente des mots de la légende un par un -* **Plusieurs à un** correspond aux architectures RNN que nous avons décrites dans l'unité précédente, telles que la classification de texte -* **Plusieurs à plusieurs**, ou **séquence à séquence**, correspond à des tâches telles que **la traduction automatique**, où nous avons d'abord un RNN qui collecte toutes les informations de la séquence d'entrée dans l'état caché, et une autre chaîne RNN déroule cet état dans la séquence de sortie. +* **Un-à-un** est un réseau neuronal traditionnel avec une entrée et une sortie. +* **Un-à-plusieurs** est une architecture générative qui accepte une valeur d'entrée et génère une séquence de valeurs de sortie. Par exemple, si nous voulons entraîner un réseau de **génération de légendes d'images** qui produirait une description textuelle d'une image, nous pouvons prendre une image en entrée, la passer à travers un CNN pour obtenir son état caché, puis utiliser une chaîne récurrente pour générer la légende mot par mot. +* **Plusieurs-à-un** correspond aux architectures RNN que nous avons décrites dans l'unité précédente, comme la classification de texte. +* **Plusieurs-à-plusieurs**, ou **séquence-à-séquence**, correspond à des tâches telles que la **traduction automatique**, où un premier RNN collecte toutes les informations de la séquence d'entrée dans l'état caché, et une autre chaîne RNN déroule cet état en une séquence de sortie. Dans cette unité, nous nous concentrerons sur des modèles génératifs simples qui nous aident à générer du texte. Pour simplifier, nous utiliserons une tokenisation au niveau des caractères. -Nous allons entraîner ce RNN pour générer du texte étape par étape. À chaque étape, nous prendrons une séquence de caractères de longueur `nchars` et demanderons au réseau de générer le prochain caractère de sortie pour chaque caractère d'entrée : +Nous entraînerons ce RNN à générer du texte étape par étape. À chaque étape, nous prendrons une séquence de caractères de longueur `nchars` et demanderons au réseau de générer le caractère suivant pour chaque caractère d'entrée : ![Image montrant un exemple de génération RNN du mot 'HELLO'.](../../../../../translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.fr.png) -Lors de la génération de texte (durant l'inférence), nous commençons avec un **prompt**, qui est passé à travers les cellules RNN pour générer son état intermédiaire, puis à partir de cet état, la génération commence. Nous générons un caractère à la fois et passons l'état et le caractère généré à une autre cellule RNN pour générer le suivant, jusqu'à ce que nous générions suffisamment de caractères. +Lors de la génération de texte (pendant l'inférence), nous commençons par une **invite** qui est passée à travers les cellules RNN pour générer son état intermédiaire, puis la génération commence à partir de cet état. Nous générons un caractère à la fois, et passons l'état et le caractère généré à une autre cellule RNN pour générer le suivant, jusqu'à ce que nous ayons généré suffisamment de caractères. -> Image de l'auteur +> Image par l'auteur ## ✍️ Exercices : Réseaux génératifs @@ -38,42 +47,42 @@ Poursuivez votre apprentissage dans les notebooks suivants : * [Réseaux génératifs avec PyTorch](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) * [Réseaux génératifs avec TensorFlow](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) -## Génération de texte douce et température +## Génération de texte souple et température -La sortie de chaque cellule RNN est une distribution de probabilité de caractères. Si nous prenons toujours le caractère avec la plus haute probabilité comme le prochain caractère dans le texte généré, le texte peut souvent devenir "cyclique" entre les mêmes séquences de caractères encore et encore, comme dans cet exemple : +La sortie de chaque cellule RNN est une distribution de probabilité des caractères. Si nous prenons toujours le caractère avec la probabilité la plus élevée comme caractère suivant dans le texte généré, le texte peut souvent devenir "cyclique", répétant les mêmes séquences de caractères encore et encore, comme dans cet exemple : ``` today of the second the company and a second the company ... ``` -Cependant, si nous regardons la distribution de probabilité pour le prochain caractère, il se pourrait que la différence entre quelques probabilités les plus élevées ne soit pas énorme, par exemple, un caractère peut avoir une probabilité de 0,2, un autre - 0,19, etc. Par exemple, en cherchant le prochain caractère dans la séquence '*play*', le prochain caractère peut tout aussi bien être un espace ou **e** (comme dans le mot *player*). +Cependant, si nous examinons la distribution de probabilité pour le caractère suivant, il se peut que la différence entre les quelques probabilités les plus élevées ne soit pas énorme, par exemple un caractère peut avoir une probabilité de 0,2, un autre de 0,19, etc. Par exemple, lorsqu'on cherche le caractère suivant dans la séquence '*play*', le caractère suivant pourrait tout aussi bien être un espace ou **e** (comme dans le mot *player*). -Cela nous amène à la conclusion qu'il n'est pas toujours "juste" de sélectionner le caractère avec une probabilité plus élevée, car choisir le deuxième plus élevé pourrait toujours nous mener à un texte significatif. Il est plus judicieux de **prélever** des caractères à partir de la distribution de probabilité donnée par la sortie du réseau. Nous pouvons également utiliser un paramètre, **température**, qui va aplatir la distribution de probabilité, dans le cas où nous voulons ajouter plus de randomité, ou la rendre plus abrupte, si nous voulons nous en tenir davantage aux caractères de plus haute probabilité. +Cela nous amène à la conclusion qu'il n'est pas toujours "juste" de sélectionner le caractère avec la probabilité la plus élevée, car choisir le deuxième plus probable peut également conduire à un texte significatif. Il est plus judicieux de **prélever** des caractères à partir de la distribution de probabilité donnée par la sortie du réseau. Nous pouvons également utiliser un paramètre, la **température**, qui aplatira la distribution de probabilité si nous voulons ajouter plus d'aléatoire, ou la rendra plus raide si nous voulons nous en tenir davantage aux caractères les plus probables. -Explorez comment cette génération de texte douce est mise en œuvre dans les notebooks liés ci-dessus. +Explorez comment cette génération de texte souple est implémentée dans les notebooks mentionnés ci-dessus. ## Conclusion -Bien que la génération de texte puisse être utile en soi, les principaux avantages proviennent de la capacité à générer du texte en utilisant des RNN à partir d'un certain vecteur de caractéristiques initial. Par exemple, la génération de texte est utilisée dans le cadre de la traduction automatique (séquence à séquence, dans ce cas le vecteur d'état de l'*encodeur* est utilisé pour générer ou *décoder* le message traduit), ou pour générer une description textuelle d'une image (dans ce cas, le vecteur de caractéristiques proviendrait d'un extracteur CNN). +Bien que la génération de texte puisse être utile en soi, les principaux avantages proviennent de la capacité à générer du texte à l'aide de RNN à partir d'un vecteur de caractéristiques initial. Par exemple, la génération de texte est utilisée dans la traduction automatique (séquence-à-séquence, dans ce cas le vecteur d'état de l'*encodeur* est utilisé pour générer ou *décoder* le message traduit), ou pour générer une description textuelle d'une image (dans ce cas, le vecteur de caractéristiques proviendrait d'un extracteur CNN). ## 🚀 Défi -Suivez quelques leçons sur Microsoft Learn sur ce sujet +Suivez des leçons sur Microsoft Learn sur ce sujet : * Génération de texte avec [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/6-generative-networks/?WT.mc_id=academic-77998-cacaste)/[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/5-generative-networks/?WT.mc_id=academic-77998-cacaste) -## [Quiz post-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/217) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/217) -## Revue & Auto-apprentissage +## Révision et auto-apprentissage -Voici quelques articles pour approfondir vos connaissances +Voici quelques articles pour approfondir vos connaissances : * Différentes approches de génération de texte avec Markov Chain, LSTM et GPT-2 : [article de blog](https://towardsdatascience.com/text-generation-gpt-2-lstm-markov-chain-9ea371820e1e) -* Exemple de génération de texte dans [la documentation Keras](https://keras.io/examples/generative/lstm_character_level_text_generation/) +* Exemple de génération de texte dans la [documentation Keras](https://keras.io/examples/generative/lstm_character_level_text_generation/) ## [Devoir](lab/README.md) Nous avons vu comment générer du texte caractère par caractère. Dans le laboratoire, vous explorerez la génération de texte au niveau des mots. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/17-GenerativeNetworks/lab/README.md b/translations/fr/lessons/5-NLP/17-GenerativeNetworks/lab/README.md index cbc069f4..0d9132a1 100644 --- a/translations/fr/lessons/5-NLP/17-GenerativeNetworks/lab/README.md +++ b/translations/fr/lessons/5-NLP/17-GenerativeNetworks/lab/README.md @@ -1,14 +1,23 @@ + # Génération de texte au niveau des mots avec des RNN -Devoir de [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Devoir de laboratoire tiré du [Curriculum AI pour débutants](https://github.com/microsoft/ai-for-beginners). ## Tâche -Dans ce laboratoire, vous devez choisir un livre et l'utiliser comme ensemble de données pour entraîner un générateur de texte au niveau des mots. +Dans ce laboratoire, vous devez choisir un livre et l'utiliser comme jeu de données pour entraîner un générateur de texte au niveau des mots. -## L'ensemble de données +## Le jeu de données -Vous êtes libre d'utiliser n'importe quel livre. Vous pouvez trouver de nombreux textes gratuits sur [Project Gutenberg](https://www.gutenberg.org/), par exemple, voici un lien direct vers [Les aventures d'Alice au pays des merveilles](https://www.gutenberg.org/files/11/11-0.txt) de Lewis Carroll. +Vous êtes libre d'utiliser n'importe quel livre. Vous pouvez trouver de nombreux textes gratuits sur [Project Gutenberg](https://www.gutenberg.org/), par exemple, voici un lien direct vers [Les Aventures d'Alice au Pays des Merveilles](https://www.gutenberg.org/files/11/11-0.txt)) de Lewis Carroll. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/18-Transformers/README.md b/translations/fr/lessons/5-NLP/18-Transformers/README.md new file mode 100644 index 00000000..bddd35b4 --- /dev/null +++ b/translations/fr/lessons/5-NLP/18-Transformers/README.md @@ -0,0 +1,121 @@ + +# Mécanismes d'Attention et Transformers + +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/118) + +L'un des problèmes les plus importants dans le domaine du NLP est **la traduction automatique**, une tâche essentielle qui sous-tend des outils tels que Google Traduction. Dans cette section, nous nous concentrerons sur la traduction automatique, ou, plus généralement, sur toute tâche de *séquence à séquence* (également appelée **transduction de phrase**). + +Avec les RNNs, la séquence à séquence est mise en œuvre par deux réseaux récurrents, où un réseau, l'**encodeur**, condense une séquence d'entrée en un état caché, tandis qu'un autre réseau, le **décodeur**, déploie cet état caché en un résultat traduit. Cette approche présente quelques problèmes : + +* L'état final du réseau encodeur a du mal à se souvenir du début d'une phrase, ce qui entraîne une mauvaise qualité du modèle pour les phrases longues. +* Tous les mots d'une séquence ont le même impact sur le résultat. En réalité, cependant, certains mots spécifiques de la séquence d'entrée ont souvent plus d'impact sur les sorties séquentielles que d'autres. + +Les **mécanismes d'attention** offrent un moyen de pondérer l'impact contextuel de chaque vecteur d'entrée sur chaque prédiction de sortie du RNN. Cela est mis en œuvre en créant des raccourcis entre les états intermédiaires du RNN d'entrée et du RNN de sortie. Ainsi, lors de la génération du symbole de sortie yt, nous prenons en compte tous les états cachés d'entrée hi, avec différents coefficients de pondération αt,i. + +![Image montrant un modèle encodeur/décodeur avec une couche d'attention additive](../../../../../translated_images/encoder-decoder-attention.7a726296894fb567aa2898c94b17b3289087f6705c11907df8301df9e5eeb3de.fr.png) + +> Le modèle encodeur-décodeur avec mécanisme d'attention additive dans [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf), cité de [ce billet de blog](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html) + +La matrice d'attention {αi,j} représente le degré auquel certains mots d'entrée jouent un rôle dans la génération d'un mot donné dans la séquence de sortie. Voici un exemple de cette matrice : + +![Image montrant un alignement trouvé par RNNsearch-50, tirée de Bahdanau - arviz.org](../../../../../translated_images/bahdanau-fig3.09ba2d37f202a6af11de6c82d2d197830ba5f4528d9ea430eb65fd3a75065973.fr.png) + +> Figure tirée de [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) (Fig.3) + +Les mécanismes d'attention sont responsables de l'état de l'art actuel ou proche de l'état de l'art en NLP. Cependant, l'ajout d'attention augmente considérablement le nombre de paramètres du modèle, ce qui a conduit à des problèmes de mise à l'échelle avec les RNNs. Une contrainte clé de mise à l'échelle des RNNs est que la nature récurrente des modèles rend difficile le traitement par lots et la parallélisation de l'entraînement. Dans un RNN, chaque élément d'une séquence doit être traité dans un ordre séquentiel, ce qui signifie qu'il ne peut pas être facilement parallélisé. + +![Encodeur Décodeur avec Attention](../../../../../lessons/5-NLP/18-Transformers/images/EncDecAttention.gif) + +> Figure tirée du [Blog de Google](https://research.googleblog.com/2016/09/a-neural-network-for-machine.html) + +L'adoption des mécanismes d'attention combinée à cette contrainte a conduit à la création des modèles Transformers, désormais à l'état de l'art, que nous connaissons et utilisons aujourd'hui, tels que BERT et Open-GPT3. + +## Modèles Transformers + +L'une des idées principales derrière les transformers est d'éviter la nature séquentielle des RNNs et de créer un modèle parallélisable pendant l'entraînement. Cela est réalisé en mettant en œuvre deux idées : + +* l'encodage positionnel +* l'utilisation du mécanisme d'auto-attention pour capturer des motifs au lieu des RNNs (ou CNNs) (c'est pourquoi l'article qui introduit les transformers s'appelle *[Attention is all you need](https://arxiv.org/abs/1706.03762)*) + +### Encodage/Embedding Positionnel + +L'idée de l'encodage positionnel est la suivante. +1. Lors de l'utilisation des RNNs, la position relative des tokens est représentée par le nombre d'étapes, et n'a donc pas besoin d'être explicitement représentée. +2. Cependant, une fois que nous passons à l'attention, nous devons connaître les positions relatives des tokens dans une séquence. +3. Pour obtenir l'encodage positionnel, nous augmentons notre séquence de tokens avec une séquence de positions de tokens dans la séquence (c'est-à-dire une séquence de nombres 0,1, ...). +4. Nous mélangeons ensuite la position du token avec un vecteur d'embedding de token. Pour transformer la position (entier) en vecteur, nous pouvons utiliser différentes approches : + +* Embedding entraînable, similaire à l'embedding de token. C'est l'approche que nous considérons ici. Nous appliquons des couches d'embedding à la fois sur les tokens et leurs positions, ce qui donne des vecteurs d'embedding de mêmes dimensions, que nous additionnons ensuite. +* Fonction d'encodage de position fixe, comme proposé dans l'article original. + + + +> Image par l'auteur + +Le résultat obtenu avec l'embedding positionnel intègre à la fois le token original et sa position dans une séquence. + +### Auto-Attention Multi-Tête + +Ensuite, nous devons capturer certains motifs dans notre séquence. Pour ce faire, les transformers utilisent un mécanisme d'**auto-attention**, qui est essentiellement une attention appliquée à la même séquence en tant qu'entrée et sortie. L'application de l'auto-attention nous permet de prendre en compte le **contexte** dans la phrase et de voir quels mots sont interconnectés. Par exemple, cela nous permet de voir quels mots sont référencés par des coréférences, comme *il*, et de prendre également le contexte en compte : + +![](../../../../../translated_images/CoreferenceResolution.861924d6d384a7d68d8d0039d06a71a151f18a796b8b1330239d3590bd4947eb.fr.png) + +> Image tirée du [Blog de Google](https://research.googleblog.com/2017/08/transformer-novel-neural-network.html) + +Dans les transformers, nous utilisons l'**Attention Multi-Tête** afin de donner au réseau la capacité de capturer plusieurs types de dépendances différents, par exemple les relations de mots à long terme vs. à court terme, les coréférences vs. autre chose, etc. + +[Notebook TensorFlow](../../../../../lessons/5-NLP/18-Transformers/TransformersTF.ipynb) contient plus de détails sur l'implémentation des couches de transformers. + +### Attention Encodeur-Décodeur + +Dans les transformers, l'attention est utilisée à deux endroits : + +* Pour capturer des motifs dans le texte d'entrée en utilisant l'auto-attention. +* Pour effectuer la traduction de séquence - c'est la couche d'attention entre l'encodeur et le décodeur. + +L'attention encodeur-décodeur est très similaire au mécanisme d'attention utilisé dans les RNNs, comme décrit au début de cette section. Ce diagramme animé explique le rôle de l'attention encodeur-décodeur. + +![GIF animé montrant comment les évaluations sont effectuées dans les modèles transformers.](../../../../../lessons/5-NLP/18-Transformers/images/transformer-animated-explanation.gif) + +Étant donné que chaque position d'entrée est mappée indépendamment à chaque position de sortie, les transformers peuvent mieux paralléliser que les RNNs, ce qui permet des modèles de langage beaucoup plus grands et plus expressifs. Chaque tête d'attention peut être utilisée pour apprendre différentes relations entre les mots, ce qui améliore les tâches de traitement du langage naturel en aval. + +## BERT + +**BERT** (Bidirectional Encoder Representations from Transformers) est un réseau transformer multi-couches très large avec 12 couches pour *BERT-base*, et 24 pour *BERT-large*. Le modèle est d'abord pré-entraîné sur un large corpus de données textuelles (WikiPedia + livres) en utilisant un entraînement non supervisé (prédiction des mots masqués dans une phrase). Pendant le pré-entraînement, le modèle absorbe des niveaux significatifs de compréhension du langage qui peuvent ensuite être exploités avec d'autres ensembles de données via un ajustement fin. Ce processus est appelé **apprentissage par transfert**. + +![image tirée de http://jalammar.github.io/illustrated-bert/](../../../../../translated_images/jalammarBERT-language-modeling-masked-lm.34f113ea5fec4362e39ee4381aab7cad06b5465a0b5f053a0f2aa05fbe14e746.fr.png) + +> Image [source](http://jalammar.github.io/illustrated-bert/) + +## ✍️ Exercices : Transformers + +Poursuivez votre apprentissage dans les notebooks suivants : + +* [Transformers en PyTorch](../../../../../lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) +* [Transformers en TensorFlow](../../../../../lessons/5-NLP/18-Transformers/TransformersTF.ipynb) + +## Conclusion + +Dans cette leçon, vous avez appris les Transformers et les Mécanismes d'Attention, tous des outils essentiels dans la boîte à outils NLP. Il existe de nombreuses variantes des architectures Transformers, notamment BERT, DistilBERT, BigBird, OpenGPT3 et bien d'autres, qui peuvent être ajustées. Le [package HuggingFace](https://github.com/huggingface/) fournit un dépôt pour entraîner plusieurs de ces architectures avec PyTorch et TensorFlow. + +## 🚀 Défi + +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/218) + +## Révision & Étude Autonome + +* [Billet de blog](https://mchromiak.github.io/articles/2017/Sep/12/Transformer-Attention-is-all-you-need/), expliquant l'article classique [Attention is all you need](https://arxiv.org/abs/1706.03762) sur les transformers. +* [Une série de billets de blog](https://towardsdatascience.com/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452) sur les transformers, expliquant l'architecture en détail. + +## [Devoir](assignment.md) + +**Avertissement** : +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/18-Transformers/assignment.md b/translations/fr/lessons/5-NLP/18-Transformers/assignment.md index a3e22561..c7a11568 100644 --- a/translations/fr/lessons/5-NLP/18-Transformers/assignment.md +++ b/translations/fr/lessons/5-NLP/18-Transformers/assignment.md @@ -1,6 +1,15 @@ + # Devoir : Transformers -Expérimentez avec les Transformers sur HuggingFace ! Essayez certains des scripts qu'ils fournissent pour travailler avec les différents modèles disponibles sur leur site : https://huggingface.co/docs/transformers/run_scripts. Testez l'un de leurs ensembles de données, puis importez l'un des vôtres provenant de ce programme ou de Kaggle et voyez si vous pouvez générer des textes intéressants. Produisez un carnet de notes avec vos découvertes. +Expérimentez avec les Transformers sur HuggingFace ! Essayez certains des scripts qu'ils proposent pour travailler avec les différents modèles disponibles sur leur site : https://huggingface.co/docs/transformers/run_scripts. Testez l'un de leurs jeux de données, puis importez-en un de ce programme ou de Kaggle et voyez si vous pouvez générer des textes intéressants. Produisez un notebook avec vos conclusions. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/19-NER/README.md b/translations/fr/lessons/5-NLP/19-NER/README.md index ea011b4c..659aab47 100644 --- a/translations/fr/lessons/5-NLP/19-NER/README.md +++ b/translations/fr/lessons/5-NLP/19-NER/README.md @@ -1,85 +1,96 @@ + # Reconnaissance d'entités nommées -Jusqu'à présent, nous nous sommes principalement concentrés sur une tâche de traitement du langage naturel (NLP) - la classification. Cependant, il existe également d'autres tâches NLP qui peuvent être réalisées avec des réseaux neuronaux. L'une de ces tâches est la **[Reconnaissance d'entités nommées](https://wikipedia.org/wiki/Named-entity_recognition)** (NER), qui consiste à reconnaître des entités spécifiques dans un texte, telles que des lieux, des noms de personnes, des intervalles de date-heure, des formules chimiques, etc. +Jusqu'à présent, nous nous sommes principalement concentrés sur une tâche de traitement du langage naturel (NLP) : la classification. Cependant, il existe d'autres tâches NLP qui peuvent être accomplies avec des réseaux neuronaux. L'une de ces tâches est la **[reconnaissance d'entités nommées](https://wikipedia.org/wiki/Named-entity_recognition)** (NER), qui consiste à identifier des entités spécifiques dans un texte, comme des lieux, des noms de personnes, des intervalles de temps, des formules chimiques, etc. -## [Quiz pré-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/119) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/119) -## Exemple d'utilisation de NER +## Exemple d'utilisation de la NER -Supposons que vous souhaitiez développer un chatbot en langage naturel, similaire à Amazon Alexa ou Google Assistant. Le fonctionnement des chatbots intelligents consiste à *comprendre* ce que l'utilisateur veut en effectuant une classification de texte sur la phrase d'entrée. Le résultat de cette classification est ce que l'on appelle **l'intention**, qui détermine ce que le chatbot doit faire. +Supposons que vous souhaitiez développer un chatbot en langage naturel, similaire à Amazon Alexa ou Google Assistant. Le fonctionnement des chatbots intelligents repose sur la *compréhension* de ce que l'utilisateur veut en effectuant une classification de texte sur la phrase d'entrée. Le résultat de cette classification est ce qu'on appelle une **intention**, qui détermine ce que le chatbot doit faire. Bot NER -> Image par l'auteur +> Image de l'auteur -Cependant, un utilisateur peut fournir certains paramètres dans le cadre de la phrase. Par exemple, lorsqu'elle demande la météo, elle peut spécifier un lieu ou une date. Un bot doit être capable de comprendre ces entités et de remplir les espaces de paramètres en conséquence avant d'effectuer l'action. C'est exactement là que NER entre en jeu. +Cependant, un utilisateur peut fournir certains paramètres dans sa phrase. Par exemple, en demandant la météo, il peut spécifier un lieu ou une date. Un bot doit être capable de comprendre ces entités et de remplir les paramètres correspondants avant d'exécuter l'action. C'est précisément là que la NER intervient. -> ✅ Un autre exemple serait [l'analyse de papiers médicaux scientifiques](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). L'une des principales choses à rechercher sont des termes médicaux spécifiques, tels que des maladies et des substances médicales. Bien qu'un petit nombre de maladies puisse probablement être extrait par une recherche de sous-chaînes, des entités plus complexes, telles que des composés chimiques et des noms de médicaments, nécessitent une approche plus complexe. +> ✅ Un autre exemple serait [l'analyse d'articles scientifiques médicaux](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). L'un des principaux objectifs est d'identifier des termes médicaux spécifiques, comme des maladies et des substances médicales. Alors qu'un petit nombre de maladies peut probablement être extrait par recherche de sous-chaînes, des entités plus complexes, comme des composés chimiques et des noms de médicaments, nécessitent une approche plus sophistiquée. -## NER comme classification de tokens +## La NER comme classification de tokens -Les modèles NER sont essentiellement des **modèles de classification de tokens**, car pour chacun des tokens d'entrée, nous devons décider s'il appartient à une entité ou non, et si c'est le cas - à quelle classe d'entité. +Les modèles NER sont essentiellement des **modèles de classification de tokens**, car pour chaque token d'entrée, nous devons décider s'il appartient à une entité ou non, et si oui, à quelle classe d'entité. -Considérons le titre de papier suivant : +Prenons le titre d'article suivant : -**Régurgitation de la valve tricuspide** et **toxicité du carbonate de lithium** chez un nouveau-né. +**Régurgitation de la valve tricuspide** et **carbonate de lithium** **toxicité** chez un nouveau-né. Les entités ici sont : -* La régurgitation de la valve tricuspide est une maladie (`DIS`) -* Le carbonate de lithium est une substance chimique (`CHEM`) -* La toxicité est également une maladie (`DIS`) +* Régurgitation de la valve tricuspide est une maladie (`DIS`) +* Carbonate de lithium est une substance chimique (`CHEM`) +* Toxicité est également une maladie (`DIS`) -Remarquez qu'une entité peut s'étendre sur plusieurs tokens. Et, comme dans ce cas, nous devons faire la distinction entre deux entités consécutives. Ainsi, il est courant d'utiliser deux classes pour chaque entité - une spécifiant le premier token de l'entité (souvent le préfixe `B-` est utilisé, pour **b**eginning), et une autre - la continuation d'une entité (`I-`, pour **i**nner token). Nous utilisons également `O` comme classe pour représenter tous les **o**tres tokens. Ce marquage de tokens est appelé [marquage BIO](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging)) (ou IOB). Une fois étiqueté, notre titre ressemblera à ceci : +Remarquez qu'une entité peut s'étendre sur plusieurs tokens. Et, comme dans ce cas, nous devons distinguer deux entités consécutives. Ainsi, il est courant d'utiliser deux classes pour chaque entité : une pour spécifier le premier token de l'entité (souvent avec le préfixe `B-` pour **début**) et une autre pour la continuation de l'entité (`I-`, pour **intérieur**). Nous utilisons également `O` comme classe pour représenter tous les **autres** tokens. Ce type d'étiquetage des tokens est appelé [étiquetage BIO](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging)) (ou IOB). Une fois étiqueté, notre titre ressemblera à ceci : Token | Tag ------|----- -Tricuspid | B-DIS +Régurgitation | B-DIS +de | I-DIS +la | I-DIS valve | I-DIS -regurgitation | I-DIS -and | O -lithium | B-CHEM -carbonate | I-CHEM -toxicity | B-DIS -in | O -a | O -newborn | O -infant | O +tricuspide | I-DIS +et | O +carbonate | B-CHEM +de | I-CHEM +lithium | I-CHEM +toxicité | B-DIS +chez | O +un | O +nouveau-né | O . | O -Puisque nous devons établir une correspondance un à un entre les tokens et les classes, nous pouvons entraîner un modèle de réseau neuronal **many-to-many** à partir de cette image : +Puisque nous devons établir une correspondance un-à-un entre les tokens et les classes, nous pouvons entraîner un modèle neuronal **many-to-many** (plusieurs-à-plusieurs) basé sur cette image : -![Image montrant des motifs communs de réseaux neuronaux récurrents.](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.fr.jpg) +![Image montrant des modèles récurrents de réseaux neuronaux courants.](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.fr.jpg) -> *Image tirée [de cet article de blog](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) par [Andrej Karpathy](http://karpathy.github.io/). Les modèles de classification de tokens NER correspondent à l'architecture de réseau la plus à droite sur cette image.* +> *Image tirée de [cet article de blog](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) par [Andrej Karpathy](http://karpathy.github.io/). Les modèles de classification de tokens NER correspondent à l'architecture de réseau située à l'extrême droite de cette image.* ## Entraînement des modèles NER -Étant donné qu'un modèle NER est essentiellement un modèle de classification de tokens, nous pouvons utiliser des RNN que nous connaissons déjà pour cette tâche. Dans ce cas, chaque bloc de réseau récurrent renverra l'ID du token. L'exemple de notebook suivant montre comment entraîner un LSTM pour la classification de tokens. +Étant donné qu'un modèle NER est essentiellement un modèle de classification de tokens, nous pouvons utiliser des RNN, que nous connaissons déjà, pour cette tâche. Dans ce cas, chaque bloc du réseau récurrent renverra l'ID du token. L'exemple de notebook suivant montre comment entraîner un LSTM pour la classification de tokens. ## ✍️ Notebooks d'exemple : NER -Poursuivez votre apprentissage dans le notebook suivant : +Poursuivez votre apprentissage avec le notebook suivant : * [NER avec TensorFlow](../../../../../lessons/5-NLP/19-NER/NER-TF.ipynb) ## Conclusion -Un modèle NER est un **modèle de classification de tokens**, ce qui signifie qu'il peut être utilisé pour effectuer une classification de tokens. C'est une tâche très courante en NLP, aidant à reconnaître des entités spécifiques dans le texte, y compris des lieux, des noms, des dates, et plus encore. +Un modèle NER est un **modèle de classification de tokens**, ce qui signifie qu'il peut être utilisé pour effectuer une classification de tokens. C'est une tâche très courante en NLP, permettant de reconnaître des entités spécifiques dans un texte, y compris des lieux, des noms, des dates, et bien plus encore. ## 🚀 Défi -Complétez la tâche liée ci-dessous pour entraîner un modèle de reconnaissance d'entités nommées pour des termes médicaux, puis essayez-le sur un ensemble de données différent. +Réalisez l'exercice ci-dessous pour entraîner un modèle de reconnaissance d'entités nommées pour des termes médicaux, puis testez-le sur un autre jeu de données. -## [Quiz post-cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/219) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/219) -## Revue et auto-apprentissage +## Révision et auto-apprentissage -Lisez le blog [L'efficacité déraisonnable des réseaux neuronaux récurrents](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) et suivez la section Lecture complémentaire dans cet article pour approfondir vos connaissances. +Lisez l'article de blog [The Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) et suivez la section "Lectures complémentaires" de cet article pour approfondir vos connaissances. -## [Devoir](lab/README.md) +## [Exercice](lab/README.md) -Dans le devoir pour cette leçon, vous devrez entraîner un modèle de reconnaissance d'entités médicales. Vous pouvez commencer par entraîner un modèle LSTM comme décrit dans cette leçon, puis passer à l'utilisation du modèle de transformateur BERT. Lisez [les instructions](lab/README.md) pour obtenir tous les détails. +Dans l'exercice de cette leçon, vous devrez entraîner un modèle de reconnaissance d'entités médicales. Vous pouvez commencer par entraîner un modèle LSTM comme décrit dans cette leçon, puis passer à l'utilisation du modèle transformateur BERT. Lisez [les instructions](lab/README.md) pour obtenir tous les détails. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/19-NER/lab/README.md b/translations/fr/lessons/5-NLP/19-NER/lab/README.md index 307d32f3..57102e1a 100644 --- a/translations/fr/lessons/5-NLP/19-NER/lab/README.md +++ b/translations/fr/lessons/5-NLP/19-NER/lab/README.md @@ -1,14 +1,23 @@ + # NER -Devoir de laboratoire du [Curriculum AI pour Débutants](https://github.com/microsoft/ai-for-beginners). +Travail pratique issu du [programme AI for Beginners](https://github.com/microsoft/ai-for-beginners). ## Tâche -Dans ce laboratoire, vous devez entraîner un modèle de reconnaissance d'entités nommées pour des termes médicaux. +Dans ce travail pratique, vous devez entraîner un modèle de reconnaissance d'entités nommées (NER) pour les termes médicaux. -## Le Jeu de Données +## Le jeu de données -Pour entraîner le modèle NER, nous avons besoin d'un jeu de données correctement étiqueté avec des entités médicales. Le [jeu de données BC5CDR](https://biocreative.bioinformatics.udel.edu/tasks/biocreative-v/track-3-cdr/) contient des entités de maladies et de produits chimiques étiquetées provenant de plus de 1500 articles. Vous pouvez télécharger le jeu de données après vous être inscrit sur leur site web. +Pour entraîner un modèle NER, nous avons besoin d'un jeu de données correctement annoté avec des entités médicales. Le [jeu de données BC5CDR](https://biocreative.bioinformatics.udel.edu/tasks/biocreative-v/track-3-cdr/) contient des entités annotées de maladies et de produits chimiques provenant de plus de 1500 articles. Vous pouvez télécharger ce jeu de données après vous être inscrit sur leur site web. Le jeu de données BC5CDR ressemble à ceci : @@ -21,17 +30,17 @@ Le jeu de données BC5CDR ressemble à ceci : ... ``` -Dans ce jeu de données, il y a le titre de l'article et le résumé dans les deux premières lignes, puis il y a des entités individuelles, avec des positions de début et de fin dans le bloc titre+résumé. En plus du type d'entité, vous obtenez l'ID d'ontologie de cette entité dans une certaine ontologie médicale. +Dans ce jeu de données, le titre de l'article et le résumé se trouvent dans les deux premières lignes, suivis des entités individuelles, avec leurs positions de début et de fin dans le bloc titre+résumé. En plus du type d'entité, vous obtenez l'ID d'ontologie de cette entité dans une ontologie médicale. -Vous devrez écrire un peu de code Python pour convertir cela en encodage BIO. +Vous devrez écrire du code Python pour convertir cela en encodage BIO. -## Le Réseau +## Le réseau -La première tentative de NER peut être réalisée en utilisant un réseau LSTM, comme dans notre exemple que vous avez vu pendant la leçon. Cependant, dans les tâches de NLP, l'[architecture de transformateur](https://en.wikipedia.org/wiki/Transformer_(machine_learning_model)), et spécifiquement les [modèles de langage BERT](https://en.wikipedia.org/wiki/BERT_(language_model)), montrent de bien meilleurs résultats. Les modèles BERT pré-entraînés comprennent la structure générale d'une langue et peuvent être affinés pour des tâches spécifiques avec des jeux de données relativement petits et des coûts computationnels réduits. +Une première tentative de NER peut être réalisée en utilisant un réseau LSTM, comme dans notre exemple vu pendant le cours. Cependant, dans les tâches de traitement du langage naturel (NLP), l'[architecture transformer](https://fr.wikipedia.org/wiki/Transformer_(mod%C3%A8le_d%27apprentissage_automatique)), et en particulier les [modèles de langage BERT](https://fr.wikipedia.org/wiki/BERT_(mod%C3%A8le_de_langage)), donnent de bien meilleurs résultats. Les modèles BERT pré-entraînés comprennent la structure générale d'une langue et peuvent être ajustés pour des tâches spécifiques avec des jeux de données relativement petits et des coûts computationnels réduits. -Étant donné que nous prévoyons d'appliquer NER à un scénario médical, il est logique d'utiliser un modèle BERT entraîné sur des textes médicaux. Microsoft Research a publié un modèle pré-entraîné appelé [PubMedBERT][PubMedBERT] ([publication][PubMedBERT-Pub]), qui a été affiné en utilisant des textes du dépôt [PubMed](https://pubmed.ncbi.nlm.nih.gov/). +Étant donné que nous prévoyons d'appliquer le NER à un scénario médical, il est logique d'utiliser un modèle BERT entraîné sur des textes médicaux. Microsoft Research a publié un modèle pré-entraîné appelé [PubMedBERT][PubMedBERT] ([publication][PubMedBERT-Pub]), qui a été ajusté à l'aide de textes provenant du dépôt [PubMed](https://pubmed.ncbi.nlm.nih.gov/). -Le standard *de facto* pour l'entraînement des modèles de transformateurs est la bibliothèque [Hugging Face Transformers](https://huggingface.co/). Elle contient également un dépôt de modèles pré-entraînés maintenus par la communauté, y compris PubMedBERT. Pour charger et utiliser ce modèle, nous avons juste besoin de quelques lignes de code : +Le standard *de facto* pour entraîner des modèles transformer est la bibliothèque [Hugging Face Transformers](https://huggingface.co/). Elle contient également un dépôt de modèles pré-entraînés maintenus par la communauté, y compris PubMedBERT. Pour charger et utiliser ce modèle, il suffit de quelques lignes de code : ```python model_name = "microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract" @@ -40,11 +49,11 @@ tokenizer = AutoTokenizer.from_pretrained(model_name) model = BertForTokenClassification.from_pretrained(model_name, classes) ``` -Cela nous donne l'objet `model` itself, built for token classification task using `classes` number of classes, as well as `tokenizer` qui peut diviser le texte d'entrée en tokens. Vous devrez convertir le jeu de données au format BIO, en tenant compte de la tokenisation de PubMedBERT. Vous pouvez utiliser [ce morceau de code Python](https://gist.github.com/shwars/580b55684be3328eb39ecf01b9cbbd88) comme source d'inspiration. +Cela nous donne le `model` lui-même, conçu pour une tâche de classification de tokens avec un nombre de `classes`, ainsi qu'un objet `tokenizer` qui peut diviser le texte d'entrée en tokens. Vous devrez convertir le jeu de données en format BIO, en tenant compte de la tokenisation de PubMedBERT. Vous pouvez utiliser [ce bout de code Python](https://gist.github.com/shwars/580b55684be3328eb39ecf01b9cbbd88) comme source d'inspiration. ## Conclusion -Cette tâche est très proche de la tâche réelle que vous serez probablement amené à réaliser si vous souhaitez obtenir plus d'informations sur de grands volumes de textes en langage naturel. Dans notre cas, nous pouvons appliquer notre modèle entraîné au [jeu de données d'articles liés au COVID](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) et voir quelles informations nous pourrons obtenir. [Cet article de blog](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/) et [ce papier](https://www.mdpi.com/2504-2289/6/1/4) décrivent les recherches qui peuvent être menées sur ce corpus d'articles en utilisant NER. +Cette tâche est très proche de celles que vous pourriez rencontrer si vous souhaitez obtenir des informations approfondies à partir de grands volumes de textes en langage naturel. Dans notre cas, nous pouvons appliquer notre modèle entraîné au [jeu de données d'articles liés au COVID](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) et voir quelles informations nous pourrons en tirer. [Cet article de blog](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/) et [cet article scientifique](https://www.mdpi.com/2504-2289/6/1/4) décrivent les recherches qui peuvent être effectuées sur ce corpus d'articles en utilisant le NER. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/20-LangModels/README.md b/translations/fr/lessons/5-NLP/20-LangModels/README.md new file mode 100644 index 00000000..c40123d9 --- /dev/null +++ b/translations/fr/lessons/5-NLP/20-LangModels/README.md @@ -0,0 +1,64 @@ + +# Modèles de Langage Pré-entraînés + +Dans toutes nos tâches précédentes, nous entraînions un réseau neuronal pour accomplir une tâche spécifique en utilisant un ensemble de données étiquetées. Avec les grands modèles transformateurs, tels que BERT, nous utilisons la modélisation linguistique de manière auto-supervisée pour construire un modèle de langage, qui est ensuite spécialisé pour des tâches spécifiques grâce à un entraînement supplémentaire adapté au domaine. Cependant, il a été démontré que les grands modèles de langage peuvent également résoudre de nombreuses tâches sans AUCUN entraînement spécifique au domaine. Une famille de modèles capables de faire cela est appelée **GPT** : Transformateur Génératif Pré-entraîné. + +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/120) + +## Génération de Texte et Perplexité + +L'idée qu'un réseau neuronal puisse accomplir des tâches générales sans entraînement spécifique est présentée dans l'article [Language Models are Unsupervised Multitask Learners](https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf). L'idée principale est que de nombreuses autres tâches peuvent être modélisées en utilisant la **génération de texte**, car comprendre un texte signifie essentiellement être capable de le produire. Étant donné que le modèle est entraîné sur une immense quantité de texte qui englobe les connaissances humaines, il devient également compétent dans une grande variété de sujets. + +> Comprendre et être capable de produire du texte implique également de connaître quelque chose sur le monde qui nous entoure. Les gens apprennent également en grande partie en lisant, et le réseau GPT est similaire à cet égard. + +Les réseaux de génération de texte fonctionnent en prédisant la probabilité du mot suivant $$P(w_N)$$. Cependant, la probabilité inconditionnelle du mot suivant correspond à la fréquence de ce mot dans le corpus de texte. GPT est capable de nous fournir la **probabilité conditionnelle** du mot suivant, en fonction des mots précédents : $$P(w_N | w_{n-1}, ..., w_0)$$ + +> Vous pouvez en apprendre davantage sur les probabilités dans notre [programme d'études pour débutants en science des données](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/1-Introduction/04-stats-and-probability). + +La qualité d'un modèle de génération de langage peut être définie à l'aide de la **perplexité**. Il s'agit d'une métrique intrinsèque qui nous permet de mesurer la qualité du modèle sans aucun ensemble de données spécifique à une tâche. Elle repose sur la notion de *probabilité d'une phrase* - le modèle attribue une probabilité élevée à une phrase susceptible d'être réelle (c'est-à-dire que le modèle n'est pas **perplexe** face à elle) et une probabilité faible à des phrases qui ont moins de sens (par exemple, *Peut-il fait quoi ?*). Lorsque nous donnons à notre modèle des phrases provenant d'un corpus de texte réel, nous nous attendons à ce qu'elles aient une probabilité élevée et une faible **perplexité**. Mathématiquement, elle est définie comme l'inverse normalisé de la probabilité de l'ensemble de test : +$$ +\mathrm{Perplexity}(W) = \sqrt[N]{1\over P(W_1,...,W_N)} +$$ + +**Vous pouvez expérimenter avec la génération de texte en utilisant [l'éditeur de texte alimenté par GPT de Hugging Face](https://transformer.huggingface.co/doc/gpt2-large)**. Dans cet éditeur, vous commencez à écrire votre texte, et en appuyant sur **[TAB]**, plusieurs options de complétion vous seront proposées. Si elles sont trop courtes ou ne vous satisfont pas, appuyez à nouveau sur [TAB], et vous aurez plus d'options, y compris des morceaux de texte plus longs. + +## GPT est une Famille + +GPT n'est pas un modèle unique, mais plutôt une collection de modèles développés et entraînés par [OpenAI](https://openai.com). + +Parmi les modèles GPT, nous avons : + +| [GPT-2](https://huggingface.co/docs/transformers/model_doc/gpt2#openai-gpt2) | [GPT 3](https://openai.com/research/language-models-are-few-shot-learners) | [GPT-4](https://openai.com/gpt-4) | +| -- | -- | -- | +|Modèle de langage avec jusqu'à 1,5 milliard de paramètres. | Modèle de langage avec jusqu'à 175 milliards de paramètres | 100T paramètres et accepte à la fois des entrées d'images et de texte, et produit du texte. | + +Les modèles GPT-3 et GPT-4 sont disponibles [en tant que service cognitif via Microsoft Azure](https://azure.microsoft.com/en-us/services/cognitive-services/openai-service/#overview?WT.mc_id=academic-77998-cacaste), et via [l'API OpenAI](https://openai.com/api/). + +## Ingénierie des Prompts + +Étant donné que GPT a été entraîné sur de vastes volumes de données pour comprendre le langage et le code, il fournit des réponses en fonction des entrées (prompts). Les prompts sont les entrées ou requêtes de GPT, où l'on donne des instructions aux modèles sur les tâches à accomplir. Pour obtenir un résultat souhaité, il faut le prompt le plus efficace, ce qui implique de choisir les bons mots, formats, phrases ou même symboles. Cette approche est appelée [Ingénierie des Prompts](https://learn.microsoft.com/en-us/shows/ai-show/the-basics-of-prompt-engineering-with-azure-openai-service?WT.mc_id=academic-77998-bethanycheum). + +[Cette documentation](https://learn.microsoft.com/en-us/semantic-kernel/prompt-engineering/?WT.mc_id=academic-77998-bethanycheum) vous fournit plus d'informations sur l'ingénierie des prompts. + +## ✍️ Exemple de Notebook : [Jouer avec OpenAI-GPT](../../../../../lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) + +Poursuivez votre apprentissage dans les notebooks suivants : + +* [Générer du texte avec OpenAI-GPT et Hugging Face Transformers](../../../../../lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) + +## Conclusion + +Les nouveaux modèles de langage pré-entraînés généraux ne modélisent pas seulement la structure du langage, mais contiennent également une immense quantité de langage naturel. Ainsi, ils peuvent être utilisés efficacement pour résoudre certaines tâches de traitement du langage naturel dans des contextes zéro-shot ou few-shot. + +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/220) + +**Avertissement** : +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/5-NLP/README.md b/translations/fr/lessons/5-NLP/README.md index 97f71402..ffe92b7e 100644 --- a/translations/fr/lessons/5-NLP/README.md +++ b/translations/fr/lessons/5-NLP/README.md @@ -1,69 +1,78 @@ + # Traitement du Langage Naturel -![Résumé des tâches de traitement du langage naturel dans un doodle](../../../../translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.fr.png) +![Résumé des tâches NLP dans un croquis](../../../../translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.fr.png) -Dans cette section, nous allons nous concentrer sur l'utilisation des réseaux de neurones pour gérer des tâches liées au **Traitement du Langage Naturel (NLP)**. Il existe de nombreux problèmes de NLP que nous souhaitons que les ordinateurs soient capables de résoudre : +Dans cette section, nous allons nous concentrer sur l'utilisation des réseaux neuronaux pour traiter des tâches liées au **Traitement du Langage Naturel (NLP)**. Il existe de nombreux problèmes NLP que nous souhaitons que les ordinateurs soient capables de résoudre : -* **Classification de texte** est un problème de classification typique concernant des séquences de texte. Des exemples incluent la classification des messages e-mail en spam ou non-spam, ou la catégorisation des articles en sport, affaires, politique, etc. De plus, lors du développement de chatbots, nous devons souvent comprendre ce qu'un utilisateur voulait dire -- dans ce cas, nous traitons de la **classification d'intentions**. Souvent, dans la classification d'intentions, nous devons gérer de nombreuses catégories. -* **Analyse de sentiment** est un problème de régression typique, où nous devons attribuer un nombre (un sentiment) correspondant à la manière dont le sens d'une phrase est positif ou négatif. Une version plus avancée de l'analyse de sentiment est l'**analyse de sentiment basée sur les aspects** (ABSA), où nous attribuons un sentiment non pas à l'ensemble de la phrase, mais à différentes parties de celle-ci (aspects), par exemple *Dans ce restaurant, j'ai aimé la cuisine, mais l'atmosphère était horrible*. -* **Reconnaissance d'entités nommées** (NER) fait référence au problème d'extraction de certaines entités d'un texte. Par exemple, nous pourrions avoir besoin de comprendre que dans la phrase *J'ai besoin de voler à Paris demain*, le mot *demain* fait référence à une DATE, et *Paris* est un LIEU. -* **Extraction de mots-clés** est similaire à NER, mais nous devons extraire automatiquement des mots importants pour le sens de la phrase, sans pré-entraînement pour des types d'entités spécifiques. -* **Clustering de texte** peut être utile lorsque nous voulons regrouper des phrases similaires, par exemple, des demandes similaires dans des conversations de support technique. -* **Réponse à des questions** fait référence à la capacité d'un modèle à répondre à une question spécifique. Le modèle reçoit un passage de texte et une question en entrée, et il doit fournir un endroit dans le texte où la réponse à la question se trouve (ou, parfois, générer le texte de réponse). -* **Génération de texte** est la capacité d'un modèle à générer du nouveau texte. Cela peut être considéré comme une tâche de classification qui prédit la prochaine lettre/mot en fonction d'un *texte d'invite*. Des modèles de génération de texte avancés, tels que GPT-3, sont capables de résoudre d'autres tâches de NLP telles que la classification en utilisant une technique appelée [programmation par invite](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) ou [ingénierie d'invite](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29). -* **Résumé de texte** est une technique lorsque nous voulons qu'un ordinateur "lise" un long texte et le résume en quelques phrases. -* **Traduction automatique** peut être vue comme une combinaison de compréhension de texte dans une langue et de génération de texte dans une autre. +* **Classification de texte** : un problème classique de classification appliqué aux séquences de texte. Par exemple, classer des e-mails comme spam ou non-spam, ou catégoriser des articles en sport, économie, politique, etc. De plus, lors du développement de chatbots, il est souvent nécessaire de comprendre ce que l'utilisateur veut dire — dans ce cas, il s'agit de **classification d'intention**. Souvent, dans la classification d'intention, nous devons gérer de nombreuses catégories. +* **Analyse de sentiment** : un problème typique de régression, où il faut attribuer un score (un sentiment) correspondant à la positivité/négativité d'une phrase. Une version plus avancée de l'analyse de sentiment est l'**analyse de sentiment basée sur les aspects** (ABSA), où le sentiment est attribué non pas à l'ensemble de la phrase, mais à différentes parties (aspects), par exemple : *Dans ce restaurant, j'ai aimé la cuisine, mais l'ambiance était horrible*. +* **Reconnaissance d'entités nommées** (NER) : extraire certaines entités d'un texte. Par exemple, dans la phrase *Je dois prendre un vol pour Paris demain*, le mot *demain* fait référence à une DATE, et *Paris* est une LOCALISATION. +* **Extraction de mots-clés** : similaire à la NER, mais ici, il s'agit d'extraire automatiquement les mots importants pour le sens de la phrase, sans pré-entraînement pour des types d'entités spécifiques. +* **Regroupement de texte** : utile pour regrouper des phrases similaires, par exemple, des demandes similaires dans des conversations de support technique. +* **Questions-réponses** : capacité d'un modèle à répondre à une question spécifique. Le modèle reçoit un passage de texte et une question en entrée, et doit fournir un endroit dans le texte où se trouve la réponse (ou, parfois, générer la réponse textuelle). +* **Génération de texte** : capacité d'un modèle à générer du nouveau texte. Cela peut être considéré comme une tâche de classification qui prédit la lettre/mot suivant en fonction d'un *texte d'amorce*. Les modèles avancés de génération de texte, comme GPT-3, peuvent résoudre d'autres tâches NLP telles que la classification en utilisant une technique appelée [programmation par prompt](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) ou [ingénierie de prompt](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29). +* **Résumé de texte** : technique permettant à un ordinateur de "lire" un texte long et de le résumer en quelques phrases. +* **Traduction automatique** : peut être vue comme une combinaison de compréhension de texte dans une langue et de génération de texte dans une autre. -Au départ, la plupart des tâches de NLP étaient résolues en utilisant des méthodes traditionnelles telles que les grammaires. Par exemple, dans la traduction automatique, des analyseurs étaient utilisés pour transformer la phrase initiale en un arbre syntaxique, puis des structures sémantiques de niveau supérieur étaient extraites pour représenter le sens de la phrase, et sur la base de ce sens et de la grammaire de la langue cible, le résultat était généré. De nos jours, de nombreuses tâches de NLP sont plus efficacement résolues en utilisant des réseaux de neurones. +À l'origine, la plupart des tâches NLP étaient résolues à l'aide de méthodes traditionnelles comme les grammaires. Par exemple, en traduction automatique, des analyseurs syntaxiques étaient utilisés pour transformer une phrase initiale en un arbre syntaxique, puis des structures sémantiques de haut niveau étaient extraites pour représenter le sens de la phrase. À partir de ce sens et de la grammaire de la langue cible, le résultat était généré. Aujourd'hui, de nombreuses tâches NLP sont plus efficacement résolues à l'aide de réseaux neuronaux. -> De nombreuses méthodes classiques de NLP sont implémentées dans la bibliothèque Python [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org). Il existe un excellent [livre NLTK](https://www.nltk.org/book/) disponible en ligne qui couvre comment différentes tâches de NLP peuvent être résolues en utilisant NLTK. +> De nombreuses méthodes NLP classiques sont implémentées dans la bibliothèque Python [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org). Un excellent [livre NLTK](https://www.nltk.org/book/) est disponible en ligne et explique comment résoudre différentes tâches NLP avec NLTK. -Dans notre cours, nous nous concentrerons principalement sur l'utilisation des réseaux de neurones pour le NLP, et nous utiliserons NLTK lorsque cela sera nécessaire. +Dans notre cours, nous nous concentrerons principalement sur l'utilisation des réseaux neuronaux pour le NLP, et nous utiliserons NLTK si nécessaire. -Nous avons déjà appris à utiliser des réseaux de neurones pour traiter des données tabulaires et des images. La principale différence entre ces types de données et le texte est que le texte est une séquence de longueur variable, tandis que la taille d'entrée dans le cas des images est connue à l'avance. Bien que les réseaux de neurones convolutifs puissent extraire des motifs des données d'entrée, les motifs dans le texte sont plus complexes. Par exemple, nous pouvons avoir une négation séparée du sujet qui peut être arbitraire pour de nombreux mots (par exemple, *Je n'aime pas les oranges*, contre *Je n'aime pas ces grosses oranges colorées et savoureuses*), et cela doit toujours être interprété comme un seul motif. Ainsi, pour traiter le langage, nous devons introduire de nouveaux types de réseaux de neurones, tels que les *réseaux récurrents* et les *transformateurs*. +Nous avons déjà appris à utiliser les réseaux neuronaux pour traiter des données tabulaires et des images. La principale différence entre ces types de données et le texte est que le texte est une séquence de longueur variable, tandis que la taille d'entrée pour les images est connue à l'avance. Bien que les réseaux convolutionnels puissent extraire des motifs des données d'entrée, les motifs dans le texte sont plus complexes. Par exemple, une négation peut être séparée du sujet par de nombreux mots (par exemple : *Je n'aime pas les oranges* vs. *Je n'aime pas ces grandes oranges colorées et savoureuses*), et cela doit toujours être interprété comme un seul motif. Ainsi, pour traiter le langage, nous devons introduire de nouveaux types de réseaux neuronaux, tels que les *réseaux récurrents* et les *transformers*. ## Installer les bibliothèques -Si vous utilisez une installation locale de Python pour suivre ce cours, vous devrez peut-être installer toutes les bibliothèques requises pour le NLP en utilisant les commandes suivantes : +Si vous utilisez une installation Python locale pour suivre ce cours, vous devrez peut-être installer toutes les bibliothèques nécessaires pour le NLP en utilisant les commandes suivantes : -**Pour PyTorch** +**Pour PyTorch** ```bash pip install -r requirements-torch.txt -``` -**Pour TensorFlow** +``` +**Pour TensorFlow** ```bash pip install -r requirements-tf.txt -``` +``` > Vous pouvez essayer le NLP avec TensorFlow sur [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) -## Avertissement GPU +## Avertissement sur le GPU -Dans cette section, dans certains exemples, nous allons entraîner des modèles assez volumineux. -* **Utilisez un ordinateur avec GPU** : Il est conseillé d'exécuter vos notebooks sur un ordinateur avec GPU pour réduire les temps d'attente lors du travail avec de grands modèles. -* **Contraintes de mémoire GPU** : L'exécution sur un GPU peut entraîner des situations où vous manquez de mémoire GPU, surtout lors de l'entraînement de grands modèles. -* **Consommation de mémoire GPU** : La quantité de mémoire GPU consommée pendant l'entraînement dépend de divers facteurs, y compris la taille du mini-lot. -* **Minimiser la taille du mini-lot** : Si vous rencontrez des problèmes de mémoire GPU, envisagez de réduire la taille du mini-lot dans votre code comme solution potentielle. -* **Libération de mémoire GPU TensorFlow** : Les anciennes versions de TensorFlow peuvent ne pas libérer correctement la mémoire GPU lors de l'entraînement de plusieurs modèles dans un même noyau Python. Pour gérer efficacement l'utilisation de la mémoire GPU, vous pouvez configurer TensorFlow pour allouer de la mémoire GPU uniquement au besoin. -* **Inclusion de code** : Pour configurer TensorFlow afin de faire croître l'allocation de mémoire GPU uniquement lorsque cela est nécessaire, incluez le code suivant dans vos notebooks : +Dans cette section, certains exemples nécessiteront l'entraînement de modèles assez volumineux. +* **Utilisez un ordinateur avec GPU** : Il est conseillé d'exécuter vos notebooks sur un ordinateur équipé d'un GPU pour réduire les temps d'attente lors de l'entraînement de grands modèles. +* **Contraintes de mémoire GPU** : L'utilisation d'un GPU peut entraîner des situations où la mémoire GPU est insuffisante, en particulier lors de l'entraînement de grands modèles. +* **Consommation de mémoire GPU** : La quantité de mémoire GPU consommée pendant l'entraînement dépend de plusieurs facteurs, notamment la taille des mini-lots. +* **Réduisez la taille des mini-lots** : Si vous rencontrez des problèmes de mémoire GPU, envisagez de réduire la taille des mini-lots dans votre code comme solution potentielle. +* **Libération de mémoire GPU avec TensorFlow** : Les anciennes versions de TensorFlow peuvent ne pas libérer correctement la mémoire GPU lors de l'entraînement de plusieurs modèles dans un même noyau Python. Pour gérer efficacement l'utilisation de la mémoire GPU, vous pouvez configurer TensorFlow pour allouer la mémoire GPU uniquement en cas de besoin. +* **Inclusion de code** : Pour configurer TensorFlow afin qu'il alloue la mémoire GPU uniquement lorsque nécessaire, incluez le code suivant dans vos notebooks : ```python physical_devices = tf.config.list_physical_devices('GPU') if len(physical_devices)>0: tf.config.experimental.set_memory_growth(physical_devices[0], True) -``` +``` -Si vous êtes intéressé par l'apprentissage du NLP d'un point de vue classique du ML, visitez [cette suite de leçons](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP). +Si vous souhaitez apprendre le NLP sous l'angle des méthodes classiques de ML, visitez [cette série de leçons](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP). ## Dans cette section -Dans cette section, nous allons apprendre sur : +Dans cette section, nous apprendrons : -* [Représentation du texte en tant que tenseurs](13-TextRep/README.md) -* [Mots d'embedding](14-Emdeddings/README.md) -* [Modélisation de la langue](15-LanguageModeling/README.md) -* [Réseaux de neurones récurrents](16-RNN/README.md) -* [Réseaux génératifs](17-GenerativeNetworks/README.md) -* [Transformateurs](18-Transformers/README.md) +* [Représenter le texte sous forme de tenseurs](13-TextRep/README.md) +* [Word Embeddings](14-Emdeddings/README.md) +* [Modélisation de langage](15-LanguageModeling/README.md) +* [Réseaux neuronaux récurrents](16-RNN/README.md) +* [Réseaux génératifs](17-GenerativeNetworks/README.md) +* [Transformers](18-Transformers/README.md) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/6-Other/21-GeneticAlgorithms/README.md b/translations/fr/lessons/6-Other/21-GeneticAlgorithms/README.md index 5ca62c2b..e25bc759 100644 --- a/translations/fr/lessons/6-Other/21-GeneticAlgorithms/README.md +++ b/translations/fr/lessons/6-Other/21-GeneticAlgorithms/README.md @@ -1,80 +1,89 @@ + # Algorithmes Génétiques ## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/121) -Les **Algorithmes Génétiques** (AG) reposent sur une **approche évolutionnaire** de l'IA, dans laquelle des méthodes de l'évolution d'une population sont utilisées pour obtenir une solution optimale à un problème donné. Ils ont été proposés en 1975 par [John Henry Holland](https://wikipedia.org/wiki/John_Henry_Holland). +Les **algorithmes génétiques** (AG) reposent sur une **approche évolutive** de l'IA, dans laquelle les méthodes d'évolution d'une population sont utilisées pour obtenir une solution optimale à un problème donné. Ils ont été proposés en 1975 par [John Henry Holland](https://wikipedia.org/wiki/John_Henry_Holland). -Les Algorithmes Génétiques sont basés sur les idées suivantes : +Les algorithmes génétiques sont basés sur les idées suivantes : * Les solutions valides au problème peuvent être représentées sous forme de **gènes** -* **Le croisement** nous permet de combiner deux solutions pour obtenir une nouvelle solution valide -* **La sélection** est utilisée pour choisir des solutions plus optimales en utilisant une **fonction d'évaluation** -* **Les mutations** sont introduites pour déstabiliser l'optimisation et nous sortir du minimum local +* Le **croisement** permet de combiner deux solutions pour obtenir une nouvelle solution valide +* La **sélection** est utilisée pour choisir les solutions les plus optimales à l'aide d'une **fonction d'évaluation** +* Des **mutations** sont introduites pour déstabiliser l'optimisation et sortir d'un minimum local -Si vous souhaitez implémenter un Algorithme Génétique, vous avez besoin de ce qui suit : +Pour implémenter un algorithme génétique, vous avez besoin de : - * Trouver une méthode de codage de nos solutions de problème en utilisant des **gènes** g∈Γ - * Sur l'ensemble de gènes Γ, nous devons définir une **fonction d'évaluation** fit: Γ→**R**. Des valeurs de fonction plus petites correspondent à de meilleures solutions. - * Définir un mécanisme de **croisement** pour combiner deux gènes afin d'obtenir une nouvelle solution valide crossover: Γ2→Γ. + * Trouver une méthode pour coder les solutions de votre problème en utilisant des **gènes** g∈Γ + * Définir sur l'ensemble des gènes Γ une **fonction d'évaluation** fit: Γ→**R**. Les valeurs plus petites de la fonction correspondent à de meilleures solutions. + * Définir un mécanisme de **croisement** pour combiner deux gènes et obtenir une nouvelle solution valide crossover: Γ2→Γ. * Définir un mécanisme de **mutation** mutate: Γ→Γ. -Dans de nombreux cas, le croisement et la mutation sont des algorithmes assez simples pour manipuler les gènes sous forme de séquences numériques ou de vecteurs de bits. +Dans de nombreux cas, les mécanismes de croisement et de mutation sont des algorithmes assez simples pour manipuler les gènes sous forme de séquences numériques ou de vecteurs binaires. -L'implémentation spécifique d'un algorithme génétique peut varier d'un cas à l'autre, mais la structure générale est la suivante : +La mise en œuvre spécifique d'un algorithme génétique peut varier selon les cas, mais la structure générale est la suivante : 1. Sélectionner une population initiale G⊂Γ -2. Sélectionner aléatoirement l'une des opérations qui sera effectuée à cette étape : croisement ou mutation +2. Sélectionner aléatoirement l'opération à effectuer à cette étape : croisement ou mutation 3. **Croisement** : * Sélectionner aléatoirement deux gènes g1, g2 ∈ G * Calculer le croisement g=crossover(g1,g2) * Si fit(g)1) ou fit(g)2) - remplacer le gène correspondant dans la population par g. 4. **Mutation** - sélectionner un gène aléatoire g∈G et le remplacer par mutate(g) -5. Répéter à partir de l'étape 2, jusqu'à ce que nous obtenions une valeur suffisamment petite de fit, ou jusqu'à ce que la limite du nombre d'étapes soit atteinte. +5. Répéter à partir de l'étape 2, jusqu'à obtenir une valeur suffisamment petite de fit, ou jusqu'à atteindre la limite du nombre d'étapes. -## Tâches Typiques +## Tâches typiques -Les tâches généralement résolues par les Algorithmes Génétiques incluent : +Les tâches généralement résolues par les algorithmes génétiques incluent : -1. Optimisation de l'emploi du temps +1. Optimisation des plannings 1. Emballage optimal 1. Découpe optimale 1. Accélération de la recherche exhaustive ## ✍️ Exercices : Algorithmes Génétiques -Poursuivez votre apprentissage dans les cahiers suivants : +Poursuivez votre apprentissage dans les notebooks suivants : -Allez à [ce cahier](../../../../../lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) pour voir deux exemples d'utilisation des Algorithmes Génétiques : +Consultez [ce notebook](../../../../../lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) pour voir deux exemples d'utilisation des algorithmes génétiques : -1. Division équitable du trésor -1. Problème des 8 Reines +1. Partage équitable d'un trésor +1. Problème des 8 reines ## Conclusion -Les Algorithmes Génétiques sont utilisés pour résoudre de nombreux problèmes, y compris des problèmes de logistique et de recherche. Le domaine s'inspire de recherches qui ont fusionné des sujets en psychologie et en informatique. +Les algorithmes génétiques sont utilisés pour résoudre de nombreux problèmes, notamment en logistique et en recherche. Ce domaine s'inspire de recherches qui ont fusionné des sujets en psychologie et en informatique. ## 🚀 Défi -"Les algorithmes génétiques sont simples à mettre en œuvre, mais leur comportement est difficile à comprendre." [source](https://wikipedia.org/wiki/Genetic_algorithm) Faites des recherches pour trouver une implémentation d'un algorithme génétique, comme la résolution d'un puzzle Sudoku, et expliquez comment cela fonctionne sous forme de croquis ou de diagramme de flux. +"Les algorithmes génétiques sont simples à implémenter, mais leur comportement est difficile à comprendre." [source](https://wikipedia.org/wiki/Genetic_algorithm) Faites des recherches pour trouver une implémentation d'un algorithme génétique, comme pour résoudre un puzzle Sudoku, et expliquez son fonctionnement sous forme de croquis ou de diagramme de flux. ## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/221) ## Révision & Auto-apprentissage -Regardez [cette vidéo géniale](https://www.youtube.com/watch?v=qv6UVOQ0F44) qui parle de la façon dont un ordinateur peut apprendre à jouer à Super Mario en utilisant des réseaux neuronaux entraînés par des algorithmes génétiques. Nous en apprendrons davantage sur l'apprentissage des ordinateurs à jouer à des jeux comme celui-ci [dans la section suivante](../22-DeepRL/README.md). +Regardez [cette excellente vidéo](https://www.youtube.com/watch?v=qv6UVOQ0F44) qui explique comment un ordinateur peut apprendre à jouer à Super Mario en utilisant des réseaux neuronaux entraînés par des algorithmes génétiques. Nous en apprendrons davantage sur l'apprentissage des ordinateurs pour jouer à ce type de jeux [dans la section suivante](../22-DeepRL/README.md). ## [Devoir : Équation Diophantienne](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) -Votre objectif est de résoudre ce qu'on appelle une **équation diophantienne** - une équation avec des racines entières. Par exemple, considérons l'équation a+2b+3c+4d=30. Vous devez trouver les racines entières qui satisfont cette équation. +Votre objectif est de résoudre une **équation diophantienne** - une équation avec des racines entières. Par exemple, considérez l'équation a+2b+3c+4d=30. Vous devez trouver les racines entières qui satisfont cette équation. -*Cet devoir est inspiré par [ce post](https://habr.com/post/128704/).* +*Cet exercice est inspiré de [cet article](https://habr.com/post/128704/).* -Indices : +Conseils : -1. Vous pouvez considérer que les racines se situent dans l'intervalle [0;30] +1. Vous pouvez considérer les racines dans l'intervalle [0;30] 1. Comme gène, envisagez d'utiliser la liste des valeurs des racines Utilisez [Diophantine.ipynb](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) comme point de départ. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/6-Other/22-DeepRL/README.md b/translations/fr/lessons/6-Other/22-DeepRL/README.md index e986f687..9c4b094e 100644 --- a/translations/fr/lessons/6-Other/22-DeepRL/README.md +++ b/translations/fr/lessons/6-Other/22-DeepRL/README.md @@ -1,31 +1,40 @@ + # Apprentissage par Renforcement Profond -L'apprentissage par renforcement (RL) est considéré comme l'un des paradigmes fondamentaux de l'apprentissage machine, aux côtés de l'apprentissage supervisé et de l'apprentissage non supervisé. Alors que dans l'apprentissage supervisé nous nous appuyons sur un ensemble de données avec des résultats connus, le RL repose sur **l'apprentissage par la pratique**. Par exemple, lorsque nous découvrons un jeu vidéo pour la première fois, nous commençons à jouer, même sans connaître les règles, et bientôt nous sommes capables d'améliorer nos compétences simplement par le processus de jeu et d'ajustement de notre comportement. +L'apprentissage par renforcement (RL) est considéré comme l'un des paradigmes fondamentaux de l'apprentissage automatique, aux côtés de l'apprentissage supervisé et non supervisé. Alors que dans l'apprentissage supervisé, nous nous appuyons sur un ensemble de données avec des résultats connus, le RL repose sur **l'apprentissage par l'expérience**. Par exemple, lorsque nous découvrons un jeu vidéo pour la première fois, nous commençons à jouer, même sans connaître les règles, et nous améliorons rapidement nos compétences simplement en jouant et en ajustant notre comportement. -## [Quiz pré-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/122) +## [Quiz avant le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/122) -Pour réaliser du RL, nous avons besoin de : +Pour effectuer du RL, nous avons besoin de : -* Un **environnement** ou **simulateur** qui fixe les règles du jeu. Nous devrions être capables de mener des expériences dans le simulateur et d'observer les résultats. -* Une **fonction de récompense**, qui indique à quel point notre expérience a été réussie. Dans le cas d'apprendre à jouer à un jeu vidéo, la récompense serait notre score final. +* Un **environnement** ou **simulateur** qui définit les règles du jeu. Nous devons pouvoir exécuter des expériences dans le simulateur et observer les résultats. +* Une **fonction de récompense**, qui indique à quel point notre expérience a été réussie. Dans le cas de l'apprentissage d'un jeu vidéo, la récompense serait notre score final. -Sur la base de la fonction de récompense, nous devrions être capables d'ajuster notre comportement et d'améliorer nos compétences, de sorte qu'à la prochaine fois nous jouions mieux. La principale différence entre les autres types d'apprentissage machine et le RL est qu'en RL, nous ne savons généralement pas si nous gagnons ou perdons jusqu'à ce que nous ayons terminé le jeu. Ainsi, nous ne pouvons pas dire si un certain coup seul est bon ou non - nous ne recevons une récompense qu'à la fin du jeu. +En fonction de la fonction de récompense, nous devrions être capables d'ajuster notre comportement et d'améliorer nos compétences, afin de mieux jouer la prochaine fois. La principale différence entre les autres types d'apprentissage automatique et le RL est qu'en RL, nous ne savons généralement pas si nous gagnons ou perdons avant d'avoir terminé le jeu. Ainsi, nous ne pouvons pas dire si un mouvement particulier est bon ou non - nous recevons une récompense uniquement à la fin du jeu. -Au cours du RL, nous réalisons généralement de nombreuses expériences. Lors de chaque expérience, nous devons équilibrer entre le suivi de la stratégie optimale que nous avons apprise jusqu'à présent (**exploitation**) et l'exploration de nouveaux états possibles (**exploration**). +Pendant le RL, nous effectuons généralement de nombreuses expériences. Lors de chaque expérience, nous devons trouver un équilibre entre suivre la stratégie optimale que nous avons apprise jusqu'à présent (**exploitation**) et explorer de nouveaux états possibles (**exploration**). ## OpenAI Gym -Un excellent outil pour le RL est [OpenAI Gym](https://gym.openai.com/) - un **environnement de simulation**, qui peut simuler de nombreux environnements différents allant des jeux Atari à la physique derrière l'équilibre de poteaux. C'est l'un des environnements de simulation les plus populaires pour former des algorithmes d'apprentissage par renforcement, et il est maintenu par [OpenAI](https://openai.com/). +Un excellent outil pour le RL est le [OpenAI Gym](https://gym.openai.com/) - un **environnement de simulation**, capable de simuler de nombreux environnements différents, allant des jeux Atari à la physique du balancement d'une barre. C'est l'un des environnements de simulation les plus populaires pour entraîner des algorithmes d'apprentissage par renforcement, et il est maintenu par [OpenAI](https://openai.com/). -> **Note** : Vous pouvez voir tous les environnements disponibles sur OpenAI Gym [ici](https://gym.openai.com/envs/#classic_control). +> **Note** : Vous pouvez voir tous les environnements disponibles dans OpenAI Gym [ici](https://gym.openai.com/envs/#classic_control). -## Équilibre CartPole +## Équilibrage du CartPole -Vous avez probablement tous vu des dispositifs d'équilibre modernes tels que le *Segway* ou les *Gyroscooters*. Ils sont capables de s'équilibrer automatiquement en ajustant leurs roues en réponse à un signal provenant d'un accéléromètre ou d'un gyroscope. Dans cette section, nous allons apprendre à résoudre un problème similaire - équilibrer un poteau. C'est similaire à une situation où un artiste de cirque doit équilibrer un poteau sur sa main - mais cet équilibre de poteau n'a lieu qu'en 1D. +Vous avez probablement déjà vu des dispositifs modernes d'équilibrage tels que le *Segway* ou les *gyroscooters*. Ils sont capables de s'équilibrer automatiquement en ajustant leurs roues en réponse à un signal provenant d'un accéléromètre ou d'un gyroscope. Dans cette section, nous allons apprendre à résoudre un problème similaire : équilibrer une barre. Cela ressemble à la situation où un artiste de cirque doit équilibrer une barre sur sa main - mais cet équilibrage ne se produit qu'en 1D. -Une version simplifiée de l'équilibre est connue sous le nom de problème **CartPole**. Dans le monde du cartpole, nous avons un curseur horizontal qui peut se déplacer à gauche ou à droite, et l'objectif est d'équilibrer un poteau vertical au sommet du curseur pendant qu'il se déplace. +Une version simplifiée de l'équilibrage est connue sous le nom de problème **CartPole**. Dans le monde du CartPole, nous avons un curseur horizontal qui peut se déplacer à gauche ou à droite, et l'objectif est d'équilibrer une barre verticale sur le curseur pendant qu'il se déplace. -un cartpole +un CartPole Pour créer et utiliser cet environnement, nous avons besoin de quelques lignes de code Python : @@ -45,73 +54,73 @@ while not done: print(f"Total reward: {total_reward}") ``` -Chaque environnement peut être accessible de la même manière : -* `env.reset` starts a new experiment -* `env.step` effectue une étape de simulation. Il reçoit une **action** de l'**espace d'action**, et retourne une **observation** (de l'espace d'observation), ainsi qu'une récompense et un indicateur de terminaison. +Chaque environnement peut être utilisé de la même manière : +* `env.reset` démarre une nouvelle expérience +* `env.step` effectue une étape de simulation. Il reçoit une **action** de l'**espace d'actions**, et retourne une **observation** (de l'espace d'observation), ainsi qu'une récompense et un indicateur de fin. -Dans l'exemple ci-dessus, nous effectuons une action aléatoire à chaque étape, ce qui explique pourquoi la durée de l'expérience est très courte : +Dans l'exemple ci-dessus, nous effectuons une action aléatoire à chaque étape, ce qui explique pourquoi la durée de vie de l'expérience est très courte : -![cartpole non équilibré](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-nobalance.gif) +![CartPole sans équilibrage](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-nobalance.gif) -L'objectif d'un algorithme RL est d'entraîner un modèle - la soi-disant **politique** π - qui retournera l'action en réponse à un état donné. Nous pouvons également considérer la politique comme étant probabiliste, par exemple, pour tout état *s* et action *a*, elle retournera la probabilité π(*a*|*s*) que nous devrions prendre *a* dans l'état *s*. +L'objectif d'un algorithme de RL est d'entraîner un modèle - la **politique** π - qui retournera l'action en réponse à un état donné. Nous pouvons également considérer la politique comme probabiliste, c'est-à-dire que pour tout état *s* et action *a*, elle retournera la probabilité π(*a*|*s*) que nous devrions prendre *a* dans l'état *s*. ## Algorithme des Gradients de Politique -La manière la plus évidente de modéliser une politique est de créer un réseau de neurones qui prendra des états en entrée et retournera les actions correspondantes (ou plutôt les probabilités de toutes les actions). En un sens, cela serait similaire à une tâche de classification normale, avec une différence majeure - nous ne savons pas à l'avance quelles actions nous devrions prendre à chacune des étapes. +La manière la plus évidente de modéliser une politique est de créer un réseau de neurones qui prendra les états en entrée et retournera les actions correspondantes (ou plutôt les probabilités de toutes les actions). En un sens, cela serait similaire à une tâche de classification normale, avec une différence majeure - nous ne savons pas à l'avance quelles actions nous devrions prendre à chaque étape. -L'idée ici est d'estimer ces probabilités. Nous construisons un vecteur de **récompenses cumulées** qui montre notre récompense totale à chaque étape de l'expérience. Nous appliquons également un **escompte de récompense** en multipliant les récompenses antérieures par un certain coefficient γ=0.99, afin de diminuer le rôle des récompenses antérieures. Ensuite, nous renforçons ces étapes le long du chemin de l'expérience qui produisent de plus grandes récompenses. +L'idée ici est d'estimer ces probabilités. Nous construisons un vecteur de **récompenses cumulées** qui montre notre récompense totale à chaque étape de l'expérience. Nous appliquons également un **rabais sur les récompenses** en multipliant les récompenses antérieures par un coefficient γ=0.99, afin de diminuer l'importance des récompenses antérieures. Ensuite, nous renforçons les étapes de l'expérience qui génèrent des récompenses plus importantes. -> En savoir plus sur l'algorithme des gradients de politique et le voir en action dans le [carnet d'exemples](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb). +> Apprenez-en davantage sur l'algorithme des gradients de politique et voyez-le en action dans le [notebook d'exemple](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb). ## Algorithme Acteur-Critique -Une version améliorée de l'approche des gradients de politique est appelée **Acteur-Critique**. L'idée principale derrière cela est que le réseau de neurones serait entraîné pour retourner deux choses : +Une version améliorée de l'approche des gradients de politique est appelée **Acteur-Critique**. L'idée principale est que le réseau de neurones serait entraîné pour retourner deux choses : -* La politique, qui détermine quelle action prendre. Cette partie est appelée **acteur**. -* L'estimation de la récompense totale que nous pouvons nous attendre à obtenir à cet état - cette partie est appelée **critique**. +* La politique, qui détermine quelle action entreprendre. Cette partie est appelée **acteur**. +* L'estimation de la récompense totale que nous pouvons espérer obtenir dans cet état - cette partie est appelée **critique**. -En un sens, cette architecture ressemble à un [GAN](../../4-ComputerVision/10-GANs/README.md), où nous avons deux réseaux qui sont entraînés l'un contre l'autre. Dans le modèle acteur-critique, l'acteur propose l'action que nous devons prendre, et le critique essaie d'être critique et d'estimer le résultat. Cependant, notre objectif est d'entraîner ces réseaux en harmonie. +En un sens, cette architecture ressemble à un [GAN](../../4-ComputerVision/10-GANs/README.md), où nous avons deux réseaux qui s'entraînent l'un contre l'autre. Dans le modèle acteur-critique, l'acteur propose l'action que nous devons entreprendre, et le critique essaie d'être critique et d'estimer le résultat. Cependant, notre objectif est d'entraîner ces réseaux en harmonie. -Parce que nous connaissons à la fois les vraies récompenses cumulées et les résultats retournés par le critique pendant l'expérience, il est relativement facile de construire une fonction de perte qui minimisera la différence entre elles. Cela nous donnerait la **perte du critique**. Nous pouvons calculer la **perte de l'acteur** en utilisant la même approche que dans l'algorithme des gradients de politique. +Parce que nous connaissons à la fois les récompenses cumulées réelles et les résultats retournés par le critique pendant l'expérience, il est relativement facile de construire une fonction de perte qui minimisera la différence entre eux. Cela nous donnerait la **perte du critique**. Nous pouvons calculer la **perte de l'acteur** en utilisant la même approche que dans l'algorithme des gradients de politique. Après avoir exécuté l'un de ces algorithmes, nous pouvons nous attendre à ce que notre CartPole se comporte comme ceci : -![un cartpole équilibré](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-balance.gif) +![CartPole équilibré](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-balance.gif) -## ✍️ Exercices : Gradients de Politique et RL Acteur-Critique +## ✍️ Exercices : Gradients de Politique et Acteur-Critique en RL -Poursuivez votre apprentissage dans les carnets suivants : +Continuez votre apprentissage dans les notebooks suivants : -* [RL dans TensorFlow](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) -* [RL dans PyTorch](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) +* [RL avec TensorFlow](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) +* [RL avec PyTorch](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) -## Autres Tâches RL +## Autres tâches en RL -L'apprentissage par renforcement est aujourd'hui un domaine de recherche en pleine expansion. Quelques exemples intéressants d'apprentissage par renforcement sont : +L'apprentissage par renforcement est aujourd'hui un domaine de recherche en pleine croissance. Voici quelques exemples intéressants d'apprentissage par renforcement : -* Apprendre à un ordinateur à jouer à des **jeux Atari**. La partie difficile de ce problème est que nous n'avons pas un état simple représenté comme un vecteur, mais plutôt une capture d'écran - et nous devons utiliser le CNN pour convertir cette image d'écran en un vecteur de caractéristiques, ou pour extraire des informations de récompense. Les jeux Atari sont disponibles dans le Gym. -* Apprendre à un ordinateur à jouer à des jeux de société, tels que les échecs et le Go. Récemment, des programmes à la pointe de la technologie comme **Alpha Zero** ont été entraînés à partir de zéro par deux agents jouant l'un contre l'autre et s'améliorant à chaque étape. -* Dans l'industrie, le RL est utilisé pour créer des systèmes de contrôle à partir de simulations. Un service appelé [Bonsai](https://azure.microsoft.com/services/project-bonsai/?WT.mc_id=academic-77998-cacaste) est spécifiquement conçu pour cela. +* Apprendre à un ordinateur à jouer à des **jeux Atari**. La partie difficile de ce problème est que nous n'avons pas un état simple représenté comme un vecteur, mais plutôt une capture d'écran - et nous devons utiliser un CNN pour convertir cette image en vecteur de caractéristiques ou pour extraire des informations sur les récompenses. Les jeux Atari sont disponibles dans le Gym. +* Apprendre à un ordinateur à jouer à des jeux de plateau, comme les échecs et le Go. Récemment, des programmes de pointe comme **Alpha Zero** ont été entraînés à partir de zéro par deux agents jouant l'un contre l'autre et s'améliorant à chaque étape. +* Dans l'industrie, le RL est utilisé pour créer des systèmes de contrôle à partir de simulations. Un service appelé [Bonsai](https://azure.microsoft.com/services/project-bonsai/?WT.mc_id=academic-77998-cacaste) est spécialement conçu pour cela. ## Conclusion -Nous avons maintenant appris comment entraîner des agents pour obtenir de bons résultats simplement en leur fournissant une fonction de récompense qui définit l'état désiré du jeu, et en leur donnant l'occasion d'explorer intelligemment l'espace de recherche. Nous avons essayé avec succès deux algorithmes et obtenu un bon résultat dans un délai relativement court. Cependant, ce n'est que le début de votre parcours dans le RL, et vous devriez certainement envisager de suivre un cours séparé si vous souhaitez approfondir vos connaissances. +Nous avons maintenant appris à entraîner des agents pour obtenir de bons résultats simplement en leur fournissant une fonction de récompense qui définit l'état souhaité du jeu, et en leur donnant l'opportunité d'explorer intelligemment l'espace de recherche. Nous avons essayé avec succès deux algorithmes et obtenu de bons résultats en relativement peu de temps. Cependant, ce n'est que le début de votre voyage dans le RL, et vous devriez envisager de suivre un cours dédié si vous souhaitez approfondir. ## 🚀 Défi -Explorez les applications énumérées dans la section 'Autres Tâches RL' et essayez d'en implémenter une ! +Explorez les applications listées dans la section "Autres tâches en RL" et essayez d'en implémenter une ! -## [Quiz post-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/222) +## [Quiz après le cours](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/222) -## Revue & Auto-apprentissage +## Révision et Auto-Étude -En savoir plus sur l'apprentissage par renforcement classique dans notre [Curriculum d'Apprentissage Machine pour Débutants](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/README.md). +Apprenez-en davantage sur l'apprentissage par renforcement classique dans notre [curriculum d'apprentissage automatique pour débutants](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/README.md). -Regardez [cette excellente vidéo](https://www.youtube.com/watch?v=qv6UVOQ0F44) qui parle de la manière dont un ordinateur peut apprendre à jouer à Super Mario. +Regardez [cette excellente vidéo](https://www.youtube.com/watch?v=qv6UVOQ0F44) qui explique comment un ordinateur peut apprendre à jouer à Super Mario. -## Mission : [Entraîner une Voiture de Montagne](lab/README.md) +## Devoir : [Entraîner une voiture de montagne](lab/README.md) -Votre objectif lors de cette mission serait d'entraîner un environnement Gym différent - [Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/). +Votre objectif pour ce devoir sera d'entraîner un environnement Gym différent - [Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/). **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/6-Other/22-DeepRL/lab/README.md b/translations/fr/lessons/6-Other/22-DeepRL/lab/README.md index 4ed64321..acea4dea 100644 --- a/translations/fr/lessons/6-Other/22-DeepRL/lab/README.md +++ b/translations/fr/lessons/6-Other/22-DeepRL/lab/README.md @@ -1,22 +1,23 @@ -# Entraînement de Mountain Car pour s'échapper + +## L'Environnement -Devoir de [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +L'environnement Mountain Car consiste en une voiture piégée dans une vallée. Votre objectif est de sortir de la vallée et d'atteindre le drapeau. Les actions que vous pouvez effectuer sont : accélérer vers la gauche, accélérer vers la droite, ou ne rien faire. Vous pouvez observer la position de la voiture sur l'axe x, ainsi que sa vitesse. -## Tâche - -Votre objectif est d'entraîner l'agent RL à contrôler [Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/) dans l'environnement OpenAI. Vous êtes formé sur des données jusqu'en octobre 2023. - -## L'environnement - -L'environnement Mountain Car se compose de la voiture piégée à l'intérieur d'une vallée. Votre but est de sauter hors de la vallée et d'atteindre le drapeau. Les actions que vous pouvez effectuer sont d'accélérer vers la gauche, vers la droite, ou de ne rien faire. Vous pouvez observer la position de la voiture le long de l'axe x, ainsi que sa vitesse. - -## Notebook de démarrage +## Cahier de Départ Commencez le laboratoire en ouvrant [MountainCar.ipynb](../../../../../../lessons/6-Other/22-DeepRL/lab/MountainCar.ipynb) -## Conclusion +## Ce qu'il faut Retenir -Vous devriez apprendre tout au long de ce laboratoire que l'adoption des algorithmes RL dans un nouvel environnement est souvent assez simple, car l'OpenAI Gym a la même interface pour tous les environnements, et les algorithmes ne dépendent donc pas largement de la nature de l'environnement. Vous pouvez même restructurer le code Python de manière à passer n'importe quel environnement à l'algorithme RL en tant que paramètre. +Vous devriez apprendre au cours de ce laboratoire qu'adapter des algorithmes de RL à un nouvel environnement est souvent assez simple, car OpenAI Gym propose la même interface pour tous les environnements, et les algorithmes ne dépendent pas fortement de la nature de l'environnement. Vous pouvez même restructurer le code Python de manière à passer n'importe quel environnement à l'algorithme de RL en tant que paramètre. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/6-Other/23-MultiagentSystems/README.md b/translations/fr/lessons/6-Other/23-MultiagentSystems/README.md index 3ae2c3a5..24d70d95 100644 --- a/translations/fr/lessons/6-Other/23-MultiagentSystems/README.md +++ b/translations/fr/lessons/6-Other/23-MultiagentSystems/README.md @@ -1,38 +1,47 @@ + # Systèmes Multi-Agents -L'une des façons possibles d'atteindre l'intelligence est l'approche dite **émergente** (ou **synergétique**), qui repose sur le fait que le comportement combiné de nombreux agents relativement simples peut donner lieu à un comportement global plus complexe (ou intelligent) du système dans son ensemble. Théoriquement, cela repose sur les principes de l'[Intelligence Collective](https://en.wikipedia.org/wiki/Collective_intelligence), de l'[Émergentisme](https://en.wikipedia.org/wiki/Global_brain) et de la [Cybernétique Évolutive](https://en.wikipedia.org/wiki/Global_brain), qui stipulent que les systèmes de niveau supérieur obtiennent une sorte de valeur ajoutée lorsqu'ils sont correctement combinés à partir de systèmes de niveau inférieur (ce qu'on appelle le *principe de transition de métasystème*). +Une des façons possibles d'atteindre l'intelligence est l'approche dite **émergente** (ou **synergétique**), qui repose sur le fait que le comportement combiné de nombreux agents relativement simples peut aboutir à un comportement global plus complexe (ou intelligent) du système dans son ensemble. Théoriquement, cela repose sur les principes de l'[Intelligence Collective](https://fr.wikipedia.org/wiki/Intelligence_collective), de l'[Émergentisme](https://fr.wikipedia.org/wiki/Cerveau_global) et de la [Cybernétique Évolutionnaire](https://fr.wikipedia.org/wiki/Cerveau_global), qui affirment que les systèmes de niveau supérieur acquièrent une certaine valeur ajoutée lorsqu'ils sont correctement combinés à partir de systèmes de niveau inférieur (le *principe de transition méta-systémique*). -## [Quiz pré-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/123) +## [Quiz pré-lecture](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/123) -La direction des **Systèmes Multi-Agents** a émergé dans l'IA dans les années 1990 en réponse à la croissance d'Internet et des systèmes distribués. L'un des manuels classiques de l'IA, [Artificial Intelligence: A Modern Approach](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach), se concentre sur la vision de l'IA classique du point de vue des systèmes multi-agents. +La direction des **Systèmes Multi-Agents** a émergé dans l'IA dans les années 1990 en réponse à la croissance d'Internet et des systèmes distribués. L'un des manuels classiques de l'IA, [Artificial Intelligence: A Modern Approach](https://fr.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach), se concentre sur la vision de l'IA classique du point de vue des systèmes multi-agents. -Au cœur de l'approche multi-agents se trouve la notion d'**Agent** - une entité qui vit dans un **environnement**, qu'elle peut percevoir et agir sur. C'est une définition très large, et il pourrait y avoir de nombreux types et classifications d'agents : +Au cœur de l'approche multi-agents se trouve la notion d'**Agent** - une entité qui vit dans un certain **environnement**, qu'elle peut percevoir et sur lequel elle peut agir. C'est une définition très large, et il peut y avoir de nombreux types et classifications d'agents différents : -* Par leur capacité à raisonner : +* Selon leur capacité à raisonner : - Les agents **réactifs** ont généralement un comportement simple de type demande-réponse - - Les agents **délibératifs** emploient une forme de raisonnement logique et/ou de capacités de planification -* Par le lieu où l'agent exécute son code : + - Les agents **délibératifs** utilisent une forme de raisonnement logique et/ou des capacités de planification +* Selon l'endroit où l'agent exécute son code : - Les agents **statiques** fonctionnent sur un nœud réseau dédié - Les agents **mobiles** peuvent déplacer leur code entre les nœuds du réseau -* Par leur comportement : - - Les **agents passifs** n'ont pas d'objectifs spécifiques. De tels agents peuvent réagir à des stimuli externes, mais n'initieront aucune action eux-mêmes. - - Les **agents actifs** ont des objectifs qu'ils poursuivent - - Les **agents cognitifs** impliquent une planification et un raisonnement complexes +* Selon leur comportement : + - Les agents **passifs** n'ont pas d'objectifs spécifiques. Ces agents peuvent réagir à des stimuli externes, mais n'initieront aucune action eux-mêmes. + - Les agents **actifs** ont des objectifs qu'ils poursuivent + - Les agents **cognitifs** impliquent une planification et un raisonnement complexes -Les systèmes multi-agents sont aujourd'hui utilisés dans un certain nombre d'applications : +Les systèmes multi-agents sont aujourd'hui utilisés dans de nombreuses applications : -* Dans les jeux, de nombreux personnages non-joueurs emploient une forme d'IA et peuvent être considérés comme des agents intelligents +* Dans les jeux, de nombreux personnages non-joueurs utilisent une forme d'IA et peuvent être considérés comme des agents intelligents * Dans la production vidéo, le rendu de scènes 3D complexes impliquant des foules est généralement réalisé à l'aide de simulations multi-agents -* Dans la modélisation de systèmes, l'approche multi-agents est utilisée pour simuler le comportement d'un modèle complexe. Par exemple, l'approche multi-agents a été utilisée avec succès pour prédire la propagation de la maladie COVID-19 dans le monde. Une approche similaire peut être utilisée pour modéliser le trafic en ville et voir comment il réagit aux changements des règles de circulation. -* Dans les systèmes d'automatisation complexes, chaque appareil peut agir comme un agent indépendant, ce qui rend l'ensemble du système moins monolithique et plus robuste. +* Dans la modélisation de systèmes, l'approche multi-agents est utilisée pour simuler le comportement d'un modèle complexe. Par exemple, l'approche multi-agents a été utilisée avec succès pour prédire la propagation de la maladie COVID-19 dans le monde. Une approche similaire peut être utilisée pour modéliser le trafic dans une ville et voir comment il réagit aux changements des règles de circulation. +* Dans les systèmes d'automatisation complexes, chaque appareil peut agir comme un agent indépendant, ce qui rend le système global moins monolithique et plus robuste. -Nous ne passerons pas beaucoup de temps à approfondir les systèmes multi-agents, mais considérons un exemple de **Modélisation Multi-Agent**. +Nous ne passerons pas beaucoup de temps à approfondir les systèmes multi-agents, mais nous examinerons un exemple de **modélisation multi-agents**. ## NetLogo -[NetLogo](https://ccl.northwestern.edu/netlogo/) est un environnement de modélisation multi-agents basé sur une version modifiée du langage de programmation [Logo](https://en.wikipedia.org/wiki/Logo_(programming_language)). Ce langage a été développé pour enseigner les concepts de programmation aux enfants, et il vous permet de contrôler un agent appelé **tortue**, qui peut se déplacer en laissant une trace derrière elle. Cela permet de créer des figures géométriques complexes, ce qui est une manière très visuelle de comprendre le comportement d'un agent. +[NetLogo](https://ccl.northwestern.edu/netlogo/) est un environnement de modélisation multi-agents basé sur une version modifiée du langage de programmation [Logo](https://fr.wikipedia.org/wiki/Logo_(langage)). Ce langage a été développé pour enseigner les concepts de programmation aux enfants, et il vous permet de contrôler un agent appelé **tortue**, qui peut se déplacer en laissant une trace derrière elle. Cela permet de créer des figures géométriques complexes, ce qui est une manière très visuelle de comprendre le comportement d'un agent. -Dans NetLogo, nous pouvons créer de nombreuses tortues en utilisant la commande `create-turtles`. Nous pouvons ensuite ordonner à toutes les tortues d'effectuer certaines actions (dans l'exemple ci-dessous - avancer de 10 points) : +Dans NetLogo, nous pouvons créer de nombreuses tortues en utilisant la commande `create-turtles`. Nous pouvons ensuite commander à toutes les tortues d'effectuer certaines actions (dans l'exemple ci-dessous - avancer de 10 points) : ``` create-turtles 10 @@ -41,15 +50,15 @@ ask turtles [ ] ``` -Bien sûr, ce n'est pas intéressant lorsque toutes les tortues font la même chose, donc nous pouvons `ask` groups of turtles, eg. those who are in the vicinity of a certain point. We can also create turtles of different *breeds* using `breed [cats cat]` command. Here `cat` est le nom d'une race, et nous devons spécifier à la fois le mot au singulier et au pluriel, car différentes commandes utilisent différentes formes pour plus de clarté. +Bien sûr, il n'est pas intéressant que toutes les tortues fassent la même chose, donc nous pouvons `ask` des groupes de tortues, par exemple celles qui se trouvent à proximité d'un certain point. Nous pouvons également créer des tortues de différentes *races* en utilisant la commande `breed [cats cat]`. Ici, `cat` est le nom d'une race, et nous devons spécifier à la fois le mot au singulier et au pluriel, car différentes commandes utilisent différentes formes pour plus de clarté. -> ✅ Nous ne nous plongerons pas dans l'apprentissage du langage NetLogo lui-même - vous pouvez visiter le brillant [Dictionnaire Interactif pour Débutants de NetLogo](https://ccl.northwestern.edu/netlogo/bind/) si vous êtes intéressé à en apprendre davantage. +> ✅ Nous n'approfondirons pas l'apprentissage du langage NetLogo lui-même - vous pouvez consulter l'excellent [Dictionnaire Interactif pour Débutants de NetLogo](https://ccl.northwestern.edu/netlogo/bind/) si vous souhaitez en savoir plus. Vous pouvez [télécharger](https://ccl.northwestern.edu/netlogo/download.shtml) et installer NetLogo pour l'essayer. ### Bibliothèque de Modèles -Une grande chose à propos de NetLogo est qu'il contient une bibliothèque de modèles fonctionnels que vous pouvez essayer. Allez dans **Fichier → Bibliothèque de Modèles**, et vous avez de nombreuses catégories de modèles à choisir. +Un grand avantage de NetLogo est qu'il contient une bibliothèque de modèles fonctionnels que vous pouvez essayer. Allez dans **Fichier → Bibliothèque de Modèles**, et vous avez de nombreuses catégories de modèles à choisir. Bibliothèque de Modèles NetLogo @@ -57,9 +66,9 @@ Une grande chose à propos de NetLogo est qu'il contient une bibliothèque de mo Vous pouvez ouvrir l'un des modèles, par exemple **Biologie → Flocking**. -### Principes Principaux +### Principes de Base -Après avoir ouvert le modèle, vous êtes dirigé vers l'écran principal de NetLogo. Voici un modèle d'exemple qui décrit la population de loups et de moutons, étant donné des ressources finies (herbe). +Après avoir ouvert le modèle, vous êtes dirigé vers l'écran principal de NetLogo. Voici un exemple de modèle qui décrit la population de loups et de moutons, compte tenu de ressources limitées (herbe). ![Écran Principal de NetLogo](../../../../../translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.fr.png) @@ -70,10 +79,10 @@ Sur cet écran, vous pouvez voir : * La section **Interface** qui contient : - Le champ principal, où vivent tous les agents - Différents contrôles : boutons, curseurs, etc. - - Graphiques que vous pouvez utiliser pour afficher les paramètres de la simulation + - Des graphiques que vous pouvez utiliser pour afficher les paramètres de la simulation * L'onglet **Code** qui contient l'éditeur, où vous pouvez taper le programme NetLogo -Dans la plupart des cas, l'interface aurait un bouton **Setup**, qui initialise l'état de la simulation, et un bouton **Go** qui démarre l'exécution. Ceux-ci sont gérés par des gestionnaires correspondants dans le code qui ressemblent à ceci : +Dans la plupart des cas, l'interface comportera un bouton **Setup**, qui initialise l'état de la simulation, et un bouton **Go** qui démarre l'exécution. Ceux-ci sont gérés par des gestionnaires correspondants dans le code qui ressemblent à ceci : ``` to go [ @@ -83,72 +92,73 @@ to go [ Le monde de NetLogo se compose des objets suivants : -* **Agents** (tortues) qui peuvent se déplacer sur le champ et faire quelque chose. Vous commandez les agents en utilisant `ask turtles [...]` syntax, and the code in brackets is executed by all agents in *turtle mode*. -* **Patches** are square areas of the field, on which agents live. You can refer to all agents on the same patch, or you can change patch colors and some other properties. You can also `ask patches` pour faire quelque chose. -* **Observateur** est un agent unique qui contrôle le monde. Tous les gestionnaires de boutons sont exécutés en *mode observateur*. +* **Agents** (tortues) qui peuvent se déplacer sur le champ et faire quelque chose. Vous commandez les agents en utilisant la syntaxe `ask turtles [...]`, et le code entre crochets est exécuté par tous les agents en *mode tortue*. +* **Patches** sont des zones carrées du champ, sur lesquelles vivent les agents. Vous pouvez vous référer à tous les agents sur le même patch, ou vous pouvez changer les couleurs des patches et certaines autres propriétés. Vous pouvez également `ask patches` de faire quelque chose. +* **Observer** est un agent unique qui contrôle le monde. Tous les gestionnaires de boutons sont exécutés en *mode observateur*. -> ✅ La beauté d'un environnement multi-agents est que le code qui s'exécute en mode tortue ou en mode patch est exécuté en même temps par tous les agents en parallèle. Ainsi, en écrivant un peu de code et en programmant le comportement de chaque agent individuel, vous pouvez créer un comportement complexe du système de simulation dans son ensemble. +> ✅ La beauté d'un environnement multi-agents est que le code qui s'exécute en mode tortue ou en mode patch est exécuté en même temps par tous les agents en parallèle. Ainsi, en écrivant un peu de code et en programmant le comportement d'un agent individuel, vous pouvez créer un comportement complexe du système de simulation dans son ensemble. ### Flocking -Comme exemple de comportement multi-agent, considérons le **[Flocking](https://en.wikipedia.org/wiki/Flocking_(behavior))**. Le flocking est un motif complexe qui ressemble beaucoup à la façon dont les vols d'oiseaux volent. En les regardant voler, vous pourriez penser qu'ils suivent une sorte d'algorithme collectif, ou qu'ils possèdent une forme d'*intelligence collective*. Cependant, ce comportement complexe émerge lorsque chaque agent individuel (dans ce cas, un *oiseau*) n'observe que quelques autres agents à une courte distance de lui, et suit trois règles simples : +À titre d'exemple de comportement multi-agents, considérons le **[Flocking](https://fr.wikipedia.org/wiki/Flocking_(behavior))**. Le flocking est un motif complexe très similaire à la façon dont les oiseaux volent en groupe. En les observant voler, vous pourriez penser qu'ils suivent une sorte d'algorithme collectif ou qu'ils possèdent une forme d'*intelligence collective*. Cependant, ce comportement complexe émerge lorsque chaque agent individuel (dans ce cas, un *oiseau*) observe seulement quelques autres agents à une courte distance de lui et suit trois règles simples : -* **Alignement** - il se dirige vers la direction moyenne des agents voisins +* **Alignement** - il s'oriente vers la direction moyenne des agents voisins * **Cohésion** - il essaie de se diriger vers la position moyenne des voisins (*attraction à longue portée*) -* **Séparation** - lorsqu'il se rapproche trop d'autres oiseaux, il essaie de s'éloigner (*répulsion à courte portée*) +* **Séparation** - lorsqu'il se rapproche trop des autres oiseaux, il essaie de s'éloigner (*répulsion à courte portée*) -Vous pouvez exécuter l'exemple de flocking et observer le comportement. Vous pouvez également ajuster des paramètres, tels que le *degré de séparation*, ou le *champ de vision*, qui définit jusqu'où chaque oiseau peut voir. Notez que si vous réduisez le champ de vision à 0, tous les oiseaux deviennent aveugles, et le flocking s'arrête. Si vous réduisez la séparation à 0, tous les oiseaux se rassemblent en ligne droite. +Vous pouvez exécuter l'exemple de flocking et observer le comportement. Vous pouvez également ajuster les paramètres, tels que le *degré de séparation* ou la *portée visuelle*, qui définit jusqu'où chaque oiseau peut voir. Notez que si vous réduisez la portée visuelle à 0, tous les oiseaux deviennent aveugles et le flocking s'arrête. Si vous réduisez la séparation à 0, tous les oiseaux se regroupent en une ligne droite. -> ✅ Passez à l'onglet **Code** et voyez où les trois règles du flocking (alignement, cohésion et séparation) sont mises en œuvre dans le code. Notez comment nous ne faisons référence qu'aux agents qui sont en vue. +> ✅ Passez à l'onglet **Code** et voyez où les trois règles du flocking (alignement, cohésion et séparation) sont implémentées dans le code. Notez comment nous nous référons uniquement aux agents qui sont en vue. -### Autres Modèles à Voir +### Autres Modèles à Explorer -Il y a quelques autres modèles intéressants avec lesquels vous pouvez expérimenter : +Voici quelques autres modèles intéressants que vous pouvez expérimenter : -* **Art → Feux d'artifice** montre comment un feu d'artifice peut être considéré comme un comportement collectif de flux de feu individuels -* **Sciences Sociales → Trafic de Base** et **Sciences Sociales → Grille de Trafic** montrent le modèle de trafic urbain en 1D et en 2D avec ou sans feux de circulation. Chaque voiture dans la simulation suit les règles suivantes : +* **Art → Fireworks** montre comment un feu d'artifice peut être considéré comme un comportement collectif de flux individuels +* **Social Science → Traffic Basic** et **Social Science → Traffic Grid** montrent le modèle de trafic urbain en 1D et en grille 2D avec ou sans feux de circulation. Chaque voiture dans la simulation suit les règles suivantes : - Si l'espace devant elle est vide - accélérer (jusqu'à une certaine vitesse maximale) - - Si elle voit un obstacle devant - freiner (et vous pouvez ajuster jusqu'où un conducteur peut voir) -* **Sciences Sociales → Fête** montre comment les gens se regroupent lors d'une fête. Vous pouvez trouver la combinaison de paramètres qui mène à l'augmentation la plus rapide du bonheur du groupe. + - Si elle voit un obstacle devant - freiner (et vous pouvez ajuster la distance de vision du conducteur) +* **Social Science → Party** montre comment les gens se regroupent lors d'une soirée cocktail. Vous pouvez trouver la combinaison de paramètres qui conduit à l'augmentation la plus rapide du bonheur du groupe. -Comme vous pouvez le voir à partir de ces exemples, les simulations multi-agents peuvent être un moyen très utile de comprendre le comportement d'un système complexe composé d'individus qui suivent la même logique ou une logique similaire. Cela peut également être utilisé pour contrôler des agents virtuels, tels que des [PNJ](https://en.wikipedia.org/wiki/NPC) dans des jeux vidéo, ou des agents dans des mondes animés en 3D. +Comme vous pouvez le voir à partir de ces exemples, les simulations multi-agents peuvent être un moyen très utile de comprendre le comportement d'un système complexe composé d'individus suivant la même logique ou une logique similaire. Elles peuvent également être utilisées pour contrôler des agents virtuels, tels que des [PNJ](https://fr.wikipedia.org/wiki/Personnage_non-joueur) dans les jeux vidéo ou des agents dans des mondes animés en 3D. ## Agents Délibératifs -Les agents décrits ci-dessus sont très simples, réagissant aux changements dans l'environnement en utilisant une sorte d'algorithme. En tant que tels, ce sont des **agents réactifs**. Cependant, parfois, les agents peuvent raisonner et planifier leurs actions, auquel cas ils sont appelés **délibératifs**. +Les agents décrits ci-dessus sont très simples, réagissant aux changements de l'environnement en utilisant une sorte d'algorithme. En tant que tels, ce sont des **agents réactifs**. Cependant, parfois, les agents peuvent raisonner et planifier leurs actions, auquel cas ils sont appelés **délibératifs**. -Un exemple typique serait un agent personnel qui reçoit une instruction d'un humain pour réserver un voyage. Supposons qu'il y ait de nombreux agents qui vivent sur Internet, qui peuvent l'aider. Il devrait alors contacter d'autres agents pour voir quels vols sont disponibles, quels sont les prix des hôtels pour différentes dates, et essayer de négocier le meilleur prix. Lorsque le plan de vacances est complet et confirmé par le propriétaire, il peut procéder à la réservation. +Un exemple typique serait un agent personnel qui reçoit une instruction d'un humain pour réserver un voyage. Supposons qu'il existe de nombreux agents sur Internet qui peuvent l'aider. Il devrait alors contacter d'autres agents pour voir quels vols sont disponibles, quels sont les prix des hôtels pour différentes dates, et essayer de négocier le meilleur prix. Une fois le plan de voyage terminé et confirmé par le propriétaire, il peut procéder à la réservation. Pour ce faire, les agents doivent **communiquer**. Pour une communication réussie, ils ont besoin de : -* Certains **langages standards pour échanger des connaissances**, tels que le [Knowledge Interchange Format](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format) (KIF) et le [Knowledge Query and Manipulation Language](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language) (KQML). Ces langages sont conçus sur la base de la [théorie de l'acte de parole](https://en.wikipedia.org/wiki/Speech_act). -* Ces langages doivent également inclure certains **protocoles pour les négociations**, basés sur différents **types d'enchères**. -* Une **ontologie commune** à utiliser, afin qu'ils se réfèrent aux mêmes concepts en connaissant leur sémantique. -* Un moyen de **découvrir** ce que différents agents peuvent faire, également basé sur une sorte d'ontologie. +* Certains **langages standards pour échanger des connaissances**, tels que le [Knowledge Interchange Format](https://fr.wikipedia.org/wiki/Knowledge_Interchange_Format) (KIF) et le [Knowledge Query and Manipulation Language](https://fr.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language) (KQML). Ces langages sont conçus sur la base de la [théorie des actes de langage](https://fr.wikipedia.org/wiki/Acte_de_langage). +* Ces langages doivent également inclure des **protocoles de négociation**, basés sur différents **types d'enchères**. +* Une **ontologie commune** à utiliser, afin qu'ils se réfèrent aux mêmes concepts en connaissant leur sémantique +* Un moyen de **découvrir** ce que différents agents peuvent faire, également basé sur une sorte d'ontologie -Les agents délibératifs sont beaucoup plus complexes que les réactifs, car ils ne réagissent pas seulement aux changements dans l'environnement, ils doivent également être capables d'*initier* des actions. L'une des architectures proposées pour les agents délibératifs est l'agent dit de Croyance-Désir-Intention (BDI) : +Les agents délibératifs sont beaucoup plus complexes que les agents réactifs, car ils ne se contentent pas de réagir aux changements de l'environnement, ils doivent également être capables d'*initier* des actions. Une des architectures proposées pour les agents délibératifs est l'agent dit Croyance-Désir-Intention (BDI) : -* Les **Croyances** forment un ensemble de connaissances sur l'environnement d'un agent. Cela peut être structuré comme une base de connaissances ou un ensemble de règles qu'un agent peut appliquer à une situation spécifique dans l'environnement. -* Les **Désirs** définissent ce qu'un agent veut faire, c'est-à-dire ses objectifs. Par exemple, l'objectif de l'agent assistant personnel ci-dessus est de réserver un voyage, et l'objectif d'un agent hôtelier est de maximiser le profit. -* Les **Intentions** sont des actions spécifiques qu'un agent prévoit d'atteindre ses objectifs. Les actions modifient généralement l'environnement et entraînent une communication avec d'autres agents. +* Les **Croyances** forment un ensemble de connaissances sur l'environnement de l'agent. Cela peut être structuré comme une base de connaissances ou un ensemble de règles qu'un agent peut appliquer à une situation spécifique dans l'environnement. +* Les **Désirs** définissent ce que l'agent veut faire, c'est-à-dire ses objectifs. Par exemple, l'objectif de l'agent assistant personnel ci-dessus est de réserver un voyage, et l'objectif d'un agent hôtelier est de maximiser les profits. +* Les **Intentions** sont des actions spécifiques qu'un agent planifie pour atteindre ses objectifs. Les actions modifient généralement l'environnement et provoquent une communication avec d'autres agents. -Il existe des plateformes disponibles pour construire des systèmes multi-agents, telles que [JADE](https://jade.tilab.com/). [Cet article](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf) contient une revue des plateformes multi-agents, accompagnée d'un bref historique des systèmes multi-agents et de leurs différents scénarios d'utilisation. +Il existe des plateformes disponibles pour construire des systèmes multi-agents, telles que [JADE](https://jade.tilab.com/). [Cet article](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf) contient une revue des plateformes multi-agents, ainsi qu'un bref historique des systèmes multi-agents et de leurs différents scénarios d'utilisation. ## Conclusion -Les systèmes multi-agents peuvent prendre des formes très différentes et être utilisés dans de nombreuses applications différentes. Ils tendent tous à se concentrer sur le comportement plus simple d'un agent individuel, et à atteindre un comportement plus complexe du système global grâce à l'**effet synergétique**. +Les systèmes multi-agents peuvent prendre des formes très différentes et être utilisés dans de nombreuses applications variées. +Ils tendent tous à se concentrer sur le comportement plus simple d'un agent individuel et à obtenir un comportement plus complexe du système global grâce à l'**effet synergétique**. ## 🚀 Défi -Appliquez cette leçon au monde réel et essayez de conceptualiser un système multi-agents qui peut résoudre un problème. Que devrait faire, par exemple, un système multi-agents pour optimiser un itinéraire de bus scolaire ? Comment cela pourrait-il fonctionner dans une boulangerie ? +Appliquez cette leçon au monde réel et essayez de conceptualiser un système multi-agents qui pourrait résoudre un problème. Que devrait faire, par exemple, un système multi-agents pour optimiser un itinéraire de bus scolaire ? Comment pourrait-il fonctionner dans une boulangerie ? -## [Quiz post-conférence](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/223) +## [Quiz post-lecture](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/223) -## Revue & Auto-étude +## Révision & Auto-apprentissage Examinez l'utilisation de ce type de système dans l'industrie. Choisissez un domaine tel que la fabrication ou l'industrie du jeu vidéo et découvrez comment les systèmes multi-agents peuvent être utilisés pour résoudre des problèmes uniques. ## [Devoir NetLogo](assignment.md) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/6-Other/23-MultiagentSystems/assignment.md b/translations/fr/lessons/6-Other/23-MultiagentSystems/assignment.md index b70213aa..2d494ea0 100644 --- a/translations/fr/lessons/6-Other/23-MultiagentSystems/assignment.md +++ b/translations/fr/lessons/6-Other/23-MultiagentSystems/assignment.md @@ -1,8 +1,17 @@ + # Devoir NetLogo -Prenez l'un des modèles de la bibliothèque de NetLogo et utilisez-le pour simuler une situation de la vie réelle aussi fidèlement que possible. Un bon exemple serait de modifier le modèle de Virus dans le dossier Visualisations Alternatives pour montrer comment il peut être utilisé pour modéliser la propagation de la COVID-19. Pouvez-vous créer un modèle qui imite la propagation virale dans la vie réelle ? +Prenez l'un des modèles de la bibliothèque de NetLogo et utilisez-le pour simuler une situation réelle aussi fidèlement que possible. Un bon exemple serait de modifier le modèle Virus dans le dossier Alternative Visualizations pour montrer comment il peut être utilisé pour modéliser la propagation du COVID-19. Pouvez-vous créer un modèle qui imite la propagation réelle d'un virus ? -Montrez votre travail en enregistrant une copie et en réalisant une vidéo démonstrative expliquant comment le modèle est lié à une situation du monde réel. +Montrez votre travail en sauvegardant une copie et en réalisant une démonstration vidéo expliquant comment le modèle est lié à une situation du monde réel. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/7-Ethics/README.md b/translations/fr/lessons/7-Ethics/README.md index 293fce3c..a49dafb1 100644 --- a/translations/fr/lessons/7-Ethics/README.md +++ b/translations/fr/lessons/7-Ethics/README.md @@ -1,43 +1,52 @@ + # IA Éthique et Responsable -Vous avez presque terminé ce cours, et j'espère qu'à ce stade, vous comprenez clairement que l'IA repose sur un certain nombre de méthodes mathématiques formelles qui nous permettent de trouver des relations dans les données et d'entraîner des modèles pour reproduire certains aspects du comportement humain. À ce moment de l'histoire, nous considérons l'IA comme un outil très puissant pour extraire des modèles à partir des données et appliquer ces modèles pour résoudre de nouveaux problèmes. +Vous avez presque terminé ce cours, et j'espère qu'à ce stade, vous comprenez clairement que l'IA repose sur un certain nombre de méthodes mathématiques formelles qui nous permettent de trouver des relations dans les données et de former des modèles pour reproduire certains aspects du comportement humain. À ce moment de l'histoire, nous considérons l'IA comme un outil très puissant pour extraire des motifs des données et appliquer ces motifs pour résoudre de nouveaux problèmes. -## [Quiz pré-conférence](https://white-water-09ec41f0f.azurestaticapps.net/quiz/5/) +## [Quiz avant le cours](https://white-water-09ec41f0f.azurestaticapps.net/quiz/5/) -Cependant, dans la science-fiction, nous voyons souvent des histoires où l'IA représente un danger pour l'humanité. En général, ces histoires tournent autour d'une sorte de rébellion de l'IA, lorsque l'IA décide de confronter les êtres humains. Cela implique que l'IA a une sorte d'émotion ou peut prendre des décisions imprévues par ses développeurs. +Cependant, dans la science-fiction, nous voyons souvent des histoires où l'IA représente un danger pour l'humanité. Ces histoires sont généralement centrées sur une sorte de rébellion de l'IA, lorsque celle-ci décide de s'opposer aux êtres humains. Cela implique que l'IA possède une sorte d'émotion ou peut prendre des décisions imprévues par ses développeurs. -Le type d'IA que nous avons appris dans ce cours n'est rien d'autre qu'une arithmétique de grandes matrices. C'est un outil très puissant pour nous aider à résoudre nos problèmes, et comme tout autre outil puissant - il peut être utilisé à des fins bonnes ou mauvaises. Il est important de noter qu'il peut être *mal utilisé*. +Le type d'IA que nous avons étudié dans ce cours n'est rien de plus que de l'arithmétique matricielle avancée. C'est un outil très puissant pour nous aider à résoudre nos problèmes, et comme tout autre outil puissant, il peut être utilisé à des fins bénéfiques ou néfastes. Il est important de noter qu'il peut être *mal utilisé*. ## Principes de l'IA Responsable -Pour éviter cet usage accidentel ou intentionnel de l'IA, Microsoft énonce les importants [Principes de l'IA Responsable](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-77998-cacaste). Les concepts suivants sous-tendent ces principes : +Pour éviter cet usage accidentel ou intentionnel de l'IA, Microsoft énonce les [Principes importants de l'IA Responsable](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-77998-cacaste). Les concepts suivants sous-tendent ces principes : -* **Équité** est liée au problème important des *biais de modèle*, qui peuvent être causés par l'utilisation de données biaisées pour l'entraînement. Par exemple, lorsque nous essayons de prédire la probabilité d'obtenir un emploi de développeur de logiciels pour une personne, le modèle est susceptible de donner une préférence plus élevée aux hommes - simplement parce que le jeu de données d'entraînement était probablement biaisé vers un public masculin. Nous devons équilibrer soigneusement les données d'entraînement et examiner le modèle pour éviter les biais, et nous assurer que le modèle prend en compte des caractéristiques plus pertinentes. -* **Fiabilité et Sécurité**. Par nature, les modèles d'IA peuvent faire des erreurs. Un réseau de neurones retourne des probabilités, et nous devons en tenir compte lors de la prise de décisions. Chaque modèle a une certaine précision et un certain rappel, et nous devons comprendre cela pour prévenir les dommages que de mauvais conseils peuvent causer. -* **Confidentialité et Sécurité** ont des implications spécifiques à l'IA. Par exemple, lorsque nous utilisons certaines données pour entraîner un modèle, ces données deviennent d'une certaine manière "intégrées" dans le modèle. D'une part, cela augmente la sécurité et la confidentialité, d'autre part - nous devons nous rappeler sur quelles données le modèle a été entraîné. -* **Inclusivité** signifie que nous ne construisons pas l'IA pour remplacer les gens, mais plutôt pour augmenter les capacités humaines et rendre notre travail plus créatif. Cela est également lié à l'équité, car lorsqu'il s'agit de communautés sous-représentées, la plupart des ensembles de données que nous collectons sont susceptibles d'être biaisés, et nous devons nous assurer que ces communautés sont incluses et correctement prises en charge par l'IA. -* **Transparence**. Cela inclut de s'assurer que nous sommes toujours clairs sur l'utilisation de l'IA. De plus, dans la mesure du possible, nous voulons utiliser des systèmes d'IA qui sont *interprétables*. -* **Responsabilité**. Lorsque les modèles d'IA prennent certaines décisions, il n'est pas toujours clair qui est responsable de ces décisions. Nous devons nous assurer que nous comprenons où se situe la responsabilité des décisions de l'IA. Dans la plupart des cas, nous voudrions inclure des êtres humains dans le processus de prise de décisions importantes, afin que des personnes réelles soient tenues responsables. +* **Équité** est liée au problème important des *biais des modèles*, qui peuvent être causés par l'utilisation de données biaisées pour l'entraînement. Par exemple, lorsque nous essayons de prédire la probabilité qu'une personne obtienne un poste de développeur logiciel, le modèle est susceptible de privilégier les hommes - simplement parce que le jeu de données d'entraînement était probablement biaisé en faveur d'un public masculin. Nous devons équilibrer soigneusement les données d'entraînement et examiner le modèle pour éviter les biais, et nous assurer que le modèle prend en compte des caractéristiques plus pertinentes. +* **Fiabilité et Sécurité**. Par nature, les modèles d'IA peuvent commettre des erreurs. Un réseau de neurones retourne des probabilités, et nous devons en tenir compte lors de la prise de décisions. Chaque modèle a une certaine précision et un certain rappel, et nous devons comprendre cela pour prévenir les dommages que des conseils erronés pourraient causer. +* **Confidentialité et Sécurité** ont des implications spécifiques à l'IA. Par exemple, lorsque nous utilisons certaines données pour entraîner un modèle, ces données deviennent en quelque sorte "intégrées" dans le modèle. D'une part, cela augmente la sécurité et la confidentialité, d'autre part - nous devons nous rappeler quelles données ont été utilisées pour entraîner le modèle. +* **Inclusivité** signifie que nous ne construisons pas l'IA pour remplacer les gens, mais plutôt pour les augmenter et rendre notre travail plus créatif. Cela est également lié à l'équité, car lorsqu'il s'agit de communautés sous-représentées, la plupart des jeux de données que nous collectons sont susceptibles d'être biaisés, et nous devons nous assurer que ces communautés sont incluses et correctement prises en compte par l'IA. +* **Transparence**. Cela inclut le fait de s'assurer que nous sommes toujours clairs sur l'utilisation de l'IA. De plus, dans la mesure du possible, nous voulons utiliser des systèmes d'IA qui sont *interprétables*. +* **Responsabilité**. Lorsque les modèles d'IA prennent certaines décisions, il n'est pas toujours clair qui est responsable de ces décisions. Nous devons nous assurer que nous comprenons où se situe la responsabilité des décisions prises par l'IA. Dans la plupart des cas, nous voudrions inclure des êtres humains dans le processus de prise de décisions importantes, afin que des personnes réelles soient tenues responsables. ## Outils pour une IA Responsable -Microsoft a développé la [Boîte à outils pour une IA Responsable](https://github.com/microsoft/responsible-ai-toolbox) qui contient un ensemble d'outils : +Microsoft a développé la [Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox) qui contient un ensemble d'outils : * Tableau de bord d'interprétabilité (InterpretML) * Tableau de bord d'équité (FairLearn) * Tableau de bord d'analyse des erreurs -* Tableau de bord d'IA Responsable qui inclut +* Tableau de bord d'IA Responsable qui inclut : - - EconML - outil d'analyse causale, qui se concentre sur les questions de type "et si" - - DiCE - outil d'analyse contrefactuelle qui vous permet de voir quelles caractéristiques doivent être modifiées pour affecter la décision du modèle + - EconML - outil pour l'analyse causale, qui se concentre sur les questions hypothétiques + - DiCE - outil pour l'analyse contrefactuelle permettant de voir quelles caractéristiques doivent être modifiées pour influencer la décision du modèle -Pour plus d'informations sur l'éthique de l'IA, veuillez visiter [cette leçon](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/3-fairness?WT.mc_id=academic-77998-cacaste) sur le programme d'apprentissage automatique qui inclut des exercices. +Pour plus d'informations sur l'éthique de l'IA, veuillez consulter [cette leçon](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/3-fairness?WT.mc_id=academic-77998-cacaste) dans le programme d'apprentissage sur le Machine Learning, qui inclut des exercices. -## Révision & Auto-apprentissage +## Révision et Auto-apprentissage -Suivez ce [Parcours d'apprentissage](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77998-cacaste) pour en savoir plus sur l'IA responsable. +Suivez ce [parcours d'apprentissage](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77998-cacaste) pour en savoir plus sur l'IA Responsable. -## [Quiz post-conférence](https://white-water-09ec41f0f.azurestaticapps.net/quiz/6/) +## [Quiz après le cours](https://white-water-09ec41f0f.azurestaticapps.net/quiz/6/) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/README.md b/translations/fr/lessons/README.md index d6e3dfc2..ae968d84 100644 --- a/translations/fr/lessons/README.md +++ b/translations/fr/lessons/README.md @@ -1,8 +1,17 @@ + # Vue d'ensemble -![Vue d'ensemble en doodle](../../../translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.fr.png) +![Vue d'ensemble dans un croquis](../../../translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.fr.png) -> Sketchnote par [Tomomi Imura](https://twitter.com/girlie_mac) +> Croquis par [Tomomi Imura](https://twitter.com/girlie_mac) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/X-Extras/X1-MultiModal/README.md b/translations/fr/lessons/X-Extras/X1-MultiModal/README.md index 6be7e4b0..e8b3065b 100644 --- a/translations/fr/lessons/X-Extras/X1-MultiModal/README.md +++ b/translations/fr/lessons/X-Extras/X1-MultiModal/README.md @@ -1,74 +1,83 @@ -# Réseaux Multi-Modal + +# Réseaux Multi-Modalités -Après le succès des modèles de transformateurs pour résoudre des tâches de traitement du langage naturel (NLP), des architectures similaires ont été appliquées aux tâches de vision par ordinateur. Il y a un intérêt croissant à construire des modèles qui combinent les capacités de vision et de langage naturel. Une de ces tentatives a été réalisée par OpenAI, et elle s'appelle CLIP et DALL.E. +Après le succès des modèles transformateurs pour résoudre des tâches de traitement du langage naturel (NLP), les mêmes architectures ou des architectures similaires ont été appliquées aux tâches de vision par ordinateur. Il y a un intérêt croissant pour la création de modèles qui *combinent* les capacités de vision et de langage naturel. Une des tentatives dans ce domaine a été réalisée par OpenAI, et elle s'appelle CLIP et DALL.E. -## Pré-Formation d'Image Contrastive (CLIP) +## Apprentissage Contrastif d'Images (CLIP) -L'idée principale de CLIP est de pouvoir comparer des invites textuelles avec une image et déterminer à quel point l'image correspond bien à l'invite. +L'idée principale de CLIP est de pouvoir comparer des descriptions textuelles avec une image et déterminer à quel point l'image correspond à la description. ![Architecture CLIP](../../../../../translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.fr.png) -> *Image tirée [de cet article de blog](https://openai.com/blog/clip/)* +> *Image tirée de [cet article de blog](https://openai.com/blog/clip/)* -Le modèle est entraîné sur des images obtenues sur Internet et leurs légendes. Pour chaque lot, nous prenons N paires de (image, texte), et les convertissons en certaines représentations vectorielles I et T. Ces représentations sont ensuite mises en correspondance. La fonction de perte est définie pour maximiser la similarité cosinus entre les vecteurs correspondant à une paire (par exemple, I et T), et minimiser la similarité cosinus entre toutes les autres paires. C'est la raison pour laquelle cette approche est appelée **contrastive**. +Le modèle est entraîné sur des images obtenues sur Internet et leurs légendes. Pour chaque lot, nous prenons N paires (image, texte) et les convertissons en représentations vectorielles I, ..., I / T, ..., T. Ces représentations sont ensuite associées ensemble. La fonction de perte est définie pour maximiser la similarité cosinus entre les vecteurs correspondant à une paire (par exemple, I et T) et minimiser la similarité cosinus entre toutes les autres paires. C'est pourquoi cette approche est appelée **contrastive**. -Le modèle/bibliothèque CLIP est disponible sur [OpenAI GitHub](https://github.com/openai/CLIP). L'approche est décrite [dans cet article de blog](https://openai.com/blog/clip/), et plus en détail dans [cet article](https://arxiv.org/pdf/2103.00020.pdf). +La bibliothèque/modèle CLIP est disponible sur [GitHub d'OpenAI](https://github.com/openai/CLIP). L'approche est décrite dans [cet article de blog](https://openai.com/blog/clip/) et plus en détail dans [cet article scientifique](https://arxiv.org/pdf/2103.00020.pdf). -Une fois ce modèle pré-entraîné, nous pouvons lui donner un lot d'images et un lot d'invites textuelles, et il retournera un tenseur avec des probabilités. CLIP peut être utilisé pour plusieurs tâches : +Une fois ce modèle pré-entraîné, nous pouvons lui fournir un lot d'images et un lot de descriptions textuelles, et il renverra un tenseur avec des probabilités. CLIP peut être utilisé pour plusieurs tâches : **Classification d'Images** -Supposons que nous devons classifier des images entre, disons, des chats, des chiens et des humains. Dans ce cas, nous pouvons donner au modèle une image et une série d'invites textuelles : "*une image d'un chat*", "*une image d'un chien*", "*une image d'un humain*". Dans le vecteur résultant de 3 probabilités, il suffit de sélectionner l'index avec la valeur la plus élevée. +Supposons que nous devons classer des images entre, par exemple, des chats, des chiens et des humains. Dans ce cas, nous pouvons donner au modèle une image et une série de descriptions textuelles : "*une image d'un chat*", "*une image d'un chien*", "*une image d'un humain*". Dans le vecteur résultant de 3 probabilités, il suffit de sélectionner l'indice avec la valeur la plus élevée. ![CLIP pour la Classification d'Images](../../../../../translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.fr.png) -> *Image tirée [de cet article de blog](https://openai.com/blog/clip/)* +> *Image tirée de [cet article de blog](https://openai.com/blog/clip/)* -**Recherche d'Images Basée sur le Texte** +**Recherche d'Images Basée sur du Texte** -Nous pouvons également faire l'inverse. Si nous avons une collection d'images, nous pouvons passer cette collection au modèle, et une invite textuelle - cela nous donnera l'image qui est la plus similaire à l'invite donnée. +Nous pouvons également faire l'inverse. Si nous avons une collection d'images, nous pouvons passer cette collection au modèle, ainsi qu'une description textuelle - cela nous donnera l'image la plus similaire à la description donnée. -## ✍️ Exemple : [Utilisation de CLIP pour la Classification d'Images et la Recherche d'Images](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) +## ✍️ Exemple : [Utilisation de CLIP pour la Classification et la Recherche d'Images](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) Ouvrez le notebook [Clip.ipynb](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) pour voir CLIP en action. -## Génération d'Images avec VQGAN+ CLIP +## Génération d'Images avec VQGAN+CLIP -CLIP peut également être utilisé pour la **génération d'images** à partir d'une invite textuelle. Pour ce faire, nous avons besoin d'un **modèle générateur** capable de générer des images basées sur un certain vecteur d'entrée. Un de ces modèles s'appelle [VQGAN](https://compvis.github.io/taming-transformers/) (GAN quantifié par vecteur). +CLIP peut également être utilisé pour **générer des images** à partir d'une description textuelle. Pour ce faire, nous avons besoin d'un **modèle générateur** capable de générer des images basées sur une entrée vectorielle. Un de ces modèles s'appelle [VQGAN](https://compvis.github.io/taming-transformers/) (GAN Quantifié par Vecteurs). -Les principales idées de VQGAN qui le différencient d'un [GAN](../../4-ComputerVision/10-GANs/README.md) ordinaire sont les suivantes : -* Utilisation d'une architecture de transformateur autoregressive pour générer une séquence de parties visuelles riches en contexte qui composent l'image. Ces parties visuelles sont à leur tour apprises par [CNN](../../4-ComputerVision/07-ConvNets/README.md). -* Utilisation d'un discriminateur de sous-image qui détecte si des parties de l'image sont "réelles" ou "fausses" (contrairement à l'approche "tout ou rien" des GAN traditionnels). +Les idées principales de VQGAN qui le différencient des [GAN classiques](../../4-ComputerVision/10-GANs/README.md) sont les suivantes : +* Utilisation d'une architecture de transformateur autorégressif pour générer une séquence de parties visuelles riches en contexte qui composent l'image. Ces parties visuelles sont à leur tour apprises par un [CNN](../../4-ComputerVision/07-ConvNets/README.md). +* Utilisation d'un discriminateur de sous-images qui détecte si les parties de l'image sont "réelles" ou "fausses" (contrairement à l'approche "tout ou rien" des GAN traditionnels). -En savoir plus sur VQGAN sur le site web [Taming Transformers](https://compvis.github.io/taming-transformers/). +Apprenez-en davantage sur VQGAN sur le site [Taming Transformers](https://compvis.github.io/taming-transformers/). -Une des différences importantes entre VQGAN et les GAN traditionnels est que ces derniers peuvent produire une image décente à partir de n'importe quel vecteur d'entrée, tandis que VQGAN est susceptible de produire une image qui ne serait pas cohérente. Ainsi, nous devons guider davantage le processus de création d'images, ce qui peut être fait en utilisant CLIP. +Une des différences importantes entre VQGAN et les GAN traditionnels est que ces derniers peuvent produire une image correcte à partir de n'importe quel vecteur d'entrée, tandis que VQGAN est susceptible de produire une image incohérente. Ainsi, nous devons guider davantage le processus de création d'image, ce qui peut être fait en utilisant CLIP. ![Architecture VQGAN+CLIP](../../../../../translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.fr.png) -Pour générer une image correspondant à une invite textuelle, nous commençons par un certain vecteur d'encodage aléatoire qui est passé à travers VQGAN pour produire une image. Ensuite, CLIP est utilisé pour produire une fonction de perte qui montre à quel point l'image correspond à l'invite textuelle. L'objectif est alors de minimiser cette perte, en utilisant la rétropropagation pour ajuster les paramètres du vecteur d'entrée. +Pour générer une image correspondant à une description textuelle, nous commençons par un vecteur d'encodage aléatoire qui est passé à travers VQGAN pour produire une image. Ensuite, CLIP est utilisé pour produire une fonction de perte qui montre à quel point l'image correspond à la description textuelle. L'objectif est alors de minimiser cette perte, en utilisant la rétropropagation pour ajuster les paramètres du vecteur d'entrée. Une excellente bibliothèque qui implémente VQGAN+CLIP est [Pixray](http://github.com/pixray/pixray). ![Image produite par Pixray](../../../../../translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.fr.png) | ![Image produite par Pixray](../../../../../translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.fr.png) | ![Image produite par Pixray](../../../../../translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.fr.png) ----|----|---- -Image générée à partir de l'invite *un portrait aquarelle en gros plan d'un jeune enseignant de littérature avec un livre* | Image générée à partir de l'invite *un portrait à l'huile en gros plan d'une jeune enseignante d'informatique avec un ordinateur* | Image générée à partir de l'invite *un portrait à l'huile en gros plan d'un ancien enseignant de mathématiques devant un tableau noir* +Image générée à partir de la description *un portrait en gros plan à l'aquarelle d'un jeune professeur de littérature avec un livre* | Image générée à partir de la description *un portrait en gros plan à l'huile d'une jeune professeure d'informatique avec un ordinateur* | Image générée à partir de la description *un portrait en gros plan à l'huile d'un vieux professeur de mathématiques devant un tableau noir* -> Images de la collection **Enseignants Artificiels** par [Dmitry Soshnikov](http://soshnikov.com) +> Images tirées de la collection **Artificial Teachers** par [Dmitry Soshnikov](http://soshnikov.com) ## DALL-E ### [DALL-E 1](https://openai.com/research/dall-e) -DALL-E est une version de GPT-3 entraînée pour générer des images à partir d'invites. Il a été entraîné avec 12 milliards de paramètres. +DALL-E est une version de GPT-3 entraînée pour générer des images à partir de descriptions textuelles. Il a été entraîné avec 12 milliards de paramètres. -Contrairement à CLIP, DALL-E reçoit à la fois du texte et de l'image comme un seul flux de tokens pour les images et le texte. Par conséquent, à partir de plusieurs invites, vous pouvez générer des images basées sur le texte. +Contrairement à CLIP, DALL-E reçoit à la fois du texte et des images sous forme d'un flux unique de tokens pour les deux. Ainsi, à partir de plusieurs descriptions, vous pouvez générer des images basées sur le texte. ### [DALL-E 2](https://openai.com/dall-e-2) -La principale différence entre DALL-E 1 et 2 est qu'il génère des images et de l'art plus réalistes. +La principale différence entre DALL-E 1 et 2 est que ce dernier génère des images et des œuvres d'art plus réalistes. -Exemples de générations d'images avec DALL-E : -![Image produite par Pixray](../../../../../translated_images/DALL·E%202023-06-20%2015.56.56%20-%20a%20closeup%20watercolor%20portrait%20of%20young%20male%20teacher%20of%20literature%20with%20a%20book.6c235e8271d9ed10ce985d86aeb241a58518958647973af136912116b9518fce.fr.png) | ![Image produite par Pixray](../../../../../translated_images/DALL·E%202023-06-20%2015.57.43%20-%20a%20closeup%20oil%20portrait%20of%20young%20female%20teacher%20of%20computer%20science%20with%20a%20computer.f21dc4166340b6c8b4d1cb57efd1e22127407f9b28c9ac7afe11344065369e64.fr.png) | ![Image produite par Pixray](../../../../../translated_images/DALL·E%202023-06-20%2015.58.42%20-%20%20a%20closeup%20oil%20portrait%20of%20old%20male%20teacher%20of%20mathematics%20in%20front%20of%20blackboard.d331c2dfbdc3f7c46aa65c0809066f5e7ed4b49609cd259852e760df21051e4a.fr.png) +Exemples de génération d'images avec DALL-E : +![Image produite par DALL-E](../../../../../translated_images/DALL·E%202023-06-20%2015.56.56%20-%20a%20closeup%20watercolor%20portrait%20of%20young%20male%20teacher%20of%20literature%20with%20a%20book.6c235e8271d9ed10ce985d86aeb241a58518958647973af136912116b9518fce.fr.png) | ![Image produite par DALL-E](../../../../../translated_images/DALL·E%202023-06-20%2015.57.43%20-%20a%20closeup%20oil%20portrait%20of%20young%20female%20teacher%20of%20computer%20science%20with%20a%20computer.f21dc4166340b6c8b4d1cb57efd1e22127407f9b28c9ac7afe11344065369e64.fr.png) | ![Image produite par DALL-E](../../../../../translated_images/DALL·E%202023-06-20%2015.58.42%20-%20%20a%20closeup%20oil%20portrait%20of%20old%20male%20teacher%20of%20mathematics%20in%20front%20of%20blackboard.d331c2dfbdc3f7c46aa65c0809066f5e7ed4b49609cd259852e760df21051e4a.fr.png) ----|----|---- -Image générée à partir de l'invite *un portrait aquarelle en gros plan d'un jeune enseignant de littérature avec un livre* | Image générée à partir de l'invite *un portrait à l'huile en gros plan d'une jeune enseignante d'informatique avec un ordinateur* | Image générée à partir de l'invite *un portrait à l'huile en gros plan d'un ancien enseignant de mathématiques devant un tableau noir* +Image générée à partir de la description *un portrait en gros plan à l'aquarelle d'un jeune professeur de littérature avec un livre* | Image générée à partir de la description *un portrait en gros plan à l'huile d'une jeune professeure d'informatique avec un ordinateur* | Image générée à partir de la description *un portrait en gros plan à l'huile d'un vieux professeur de mathématiques devant un tableau noir* ## Références @@ -76,4 +85,4 @@ Image générée à partir de l'invite *un portrait aquarelle en gros plan d'un * Article sur CLIP : [Learning Transferable Visual Models From Natural Language Supervision](https://arxiv.org/pdf/2103.00020.pdf) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/sketchnotes/LICENSE.md b/translations/fr/lessons/sketchnotes/LICENSE.md index 749f3d52..0a8e1d25 100644 --- a/translations/fr/lessons/sketchnotes/LICENSE.md +++ b/translations/fr/lessons/sketchnotes/LICENSE.md @@ -1,158 +1,206 @@ -# Attribution-ShareAlike 4.0 International + +Attribution-ShareAlike 4.0 International ======================================================================= -La Creative Commons Corporation ("Creative Commons") n'est pas un cabinet d'avocats et ne fournit pas de services juridiques ni de conseils juridiques. La distribution des licences publiques Creative Commons ne crée pas de relation avocat-client ou autre. Creative Commons met ses licences et les informations connexes à disposition sur une base "tel quel". Creative Commons ne donne aucune garantie concernant ses licences, tout matériel licencié en vertu de leurs termes et conditions, ou toute information connexe. Creative Commons décline toute responsabilité pour les dommages résultant de leur utilisation dans toute la mesure permise par la loi. +Creative Commons Corporation ("Creative Commons") n'est pas un cabinet d'avocats et ne fournit pas de services ou de conseils juridiques. La distribution des licences publiques Creative Commons ne crée pas de relation avocat-client ou autre. Creative Commons met ses licences et les informations associées à disposition "en l'état". Creative Commons ne donne aucune garantie concernant ses licences, les matériaux sous licence selon leurs termes et conditions, ou les informations associées. Creative Commons décline toute responsabilité pour les dommages résultant de leur utilisation dans la mesure maximale permise par la loi. -## Utilisation des Licences Publiques Creative Commons +Utilisation des licences publiques Creative Commons -Les licences publiques Creative Commons fournissent un ensemble standard de termes et conditions que les créateurs et autres titulaires de droits peuvent utiliser pour partager des œuvres originales d'auteur et d'autres matériaux soumis au droit d'auteur et à certains autres droits spécifiés dans la licence publique ci-dessous. Les considérations suivantes sont à titre informatif uniquement, ne sont pas exhaustives et ne font pas partie de nos licences. +Les licences publiques Creative Commons fournissent un ensemble standard de termes et conditions que les créateurs et autres titulaires de droits peuvent utiliser pour partager des œuvres originales protégées par le droit d'auteur et d'autres droits spécifiés dans la licence publique ci-dessous. Les considérations suivantes sont uniquement à titre informatif, ne sont pas exhaustives et ne font pas partie de nos licences. -### Considérations pour les donneurs de licence : + Considérations pour les concédants : Nos licences publiques sont + destinées à être utilisées par ceux qui sont autorisés à donner au + public la permission d'utiliser des matériaux de manière + autrement restreinte par le droit d'auteur et certains autres + droits. Nos licences sont irrévocables. Les concédants doivent + lire et comprendre les termes et conditions de la licence qu'ils + choisissent avant de l'appliquer. Les concédants doivent également + s'assurer de disposer de tous les droits nécessaires avant + d'appliquer nos licences afin que le public puisse réutiliser le + matériel comme prévu. Les concédants doivent clairement marquer + tout matériel non soumis à la licence. Cela inclut d'autres + matériaux sous licence CC ou des matériaux utilisés en vertu + d'une exception ou limitation au droit d'auteur. Plus de + considérations pour les concédants : + wiki.creativecommons.org/Considerations_for_licensors -Nos licences publiques sont destinées à être utilisées par ceux qui sont autorisés à donner au public la permission d'utiliser des matériaux de manière autrement restreinte par le droit d'auteur et certains autres droits. Nos licences sont irrévocables. Les donneurs de licence doivent lire et comprendre les termes et conditions de la licence qu'ils choisissent avant de l'appliquer. Les donneurs de licence doivent également sécuriser tous les droits nécessaires avant d'appliquer nos licences afin que le public puisse réutiliser le matériel comme prévu. Les donneurs de licence doivent clairement marquer tout matériel non soumis à la licence. Cela inclut d'autres matériaux sous licence CC, ou des matériaux utilisés en vertu d'une exception ou d'une limitation au droit d'auteur. Plus de considérations pour les donneurs de licence : -wiki.creativecommons.org/Considerations_for_licensors - -### Considérations pour le public : - -En utilisant l'une de nos licences publiques, un donneur de licence accorde au public la permission d'utiliser le matériel sous licence selon les termes et conditions spécifiés. Si la permission du donneur de licence n'est pas nécessaire pour une raison quelconque — par exemple, en raison d'une exception ou d'une limitation applicable au droit d'auteur — alors cette utilisation n'est pas régulée par la licence. Nos licences n'accordent que des permissions en vertu du droit d'auteur et de certains autres droits que le donneur de licence a l'autorité d'accorder. L'utilisation du matériel sous licence peut encore être restreinte pour d'autres raisons, y compris parce que d'autres détiennent des droits d'auteur ou d'autres droits sur le matériel. Un donneur de licence peut faire des demandes spéciales, comme demander que tous les changements soient marqués ou décrits. Bien que non exigé par nos licences, il est conseillé de respecter ces demandes lorsque cela est raisonnable. Plus de considérations pour le public : -wiki.creativecommons.org/Considerations_for_licensees + Considérations pour le public : En utilisant l'une de nos licences + publiques, un concédant accorde au public la permission d'utiliser + le matériel sous licence selon les termes et conditions spécifiés. + Si la permission du concédant n'est pas nécessaire pour une + raison quelconque, par exemple en raison d'une exception ou + limitation applicable au droit d'auteur, alors cette utilisation + n'est pas régie par la licence. Nos licences n'accordent que des + permissions en vertu du droit d'auteur et de certains autres + droits que le concédant a l'autorité d'accorder. L'utilisation du + matériel sous licence peut encore être restreinte pour d'autres + raisons, notamment parce que d'autres détiennent des droits + d'auteur ou d'autres droits sur le matériel. Un concédant peut + faire des demandes spéciales, comme demander que toutes les + modifications soient marquées ou décrites. Bien que cela ne soit + pas requis par nos licences, vous êtes encouragé à respecter ces + demandes lorsqu'elles sont raisonnables. Plus de considérations + pour le public : + wiki.creativecommons.org/Considerations_for_licensees ======================================================================= -## Licence Publique Creative Commons Attribution-ShareAlike 4.0 International +Licence publique internationale Creative Commons Attribution-ShareAlike 4.0 + +En exerçant les Droits Concédés (définis ci-dessous), Vous acceptez et convenez d'être lié par les termes et conditions de cette Licence Publique Internationale Creative Commons Attribution-ShareAlike 4.0 ("Licence Publique"). Dans la mesure où cette Licence Publique peut être interprétée comme un contrat, Vous êtes accordé les Droits Concédés en contrepartie de Votre acceptation de ces termes et conditions, et le Concédant Vous accorde ces droits en contrepartie des avantages que le Concédant reçoit en mettant le Matériel sous Licence à disposition selon ces termes et conditions. + +Section 1 -- Définitions. + + a. Matériel Adapté désigne le matériel soumis au Droit d'Auteur et + Droits Similaires qui est dérivé ou basé sur le Matériel sous + Licence et dans lequel le Matériel sous Licence est traduit, + modifié, arrangé, transformé ou autrement altéré d'une manière + nécessitant une permission en vertu du Droit d'Auteur et Droits + Similaires détenus par le Concédant. Aux fins de cette Licence + Publique, lorsque le Matériel sous Licence est une œuvre musicale, + une performance ou un enregistrement sonore, un Matériel Adapté + est toujours produit lorsque le Matériel sous Licence est + synchronisé en relation temporelle avec une image animée. -En exerçant les Droits Licenciés (définis ci-dessous), vous acceptez et convenez d'être lié par les termes et conditions de cette Licence Publique Creative Commons Attribution-ShareAlike 4.0 International ("Licence Publique"). Dans la mesure où cette Licence Publique peut être interprétée comme un contrat, vous vous voyez accorder les Droits Licenciés en contrepartie de votre acceptation de ces termes et conditions, et le Donneur de Licence vous accorde ces droits en contrepartie des avantages que le Donneur de Licence reçoit en rendant le Matériel Licencié disponible selon ces termes et conditions. + b. Licence de l'Adaptateur désigne la licence que Vous appliquez à + Vos Droits d'Auteur et Droits Similaires dans Vos contributions au + Matériel Adapté conformément aux termes et conditions de cette + Licence Publique. -### Section 1 -- Définitions. + c. Licence Compatible BY-SA désigne une licence répertoriée sur + creativecommons.org/compatiblelicenses, approuvée par Creative + Commons comme étant essentiellement équivalente à cette Licence + Publique. - a. Matériel Adapté désigne le matériel soumis au Droit d'Auteur et aux Droits Similaires qui est dérivé ou basé sur le Matériel Licencié et dans lequel le Matériel Licencié est traduit, modifié, arrangé, transformé ou autrement modifié d'une manière nécessitant une permission en vertu des Droits d'Auteur et Droits Similaires détenus par le Donneur de Licence. Aux fins de cette Licence Publique, lorsque le Matériel Licencié est une œuvre musicale, une performance ou un enregistrement sonore, le Matériel Adapté est toujours produit lorsque le Matériel Licencié est synchronisé en relation temporelle avec une image animée. + d. Droit d'Auteur et Droits Similaires désignent le droit d'auteur + et/ou des droits similaires étroitement liés au droit d'auteur, + y compris, sans limitation, les droits de performance, de + diffusion, d'enregistrement sonore et les Droits Sui Generis sur + les Bases de Données, sans tenir compte de la manière dont les + droits sont étiquetés ou catégorisés. Aux fins de cette Licence + Publique, les droits spécifiés dans la Section 2(b)(1)-(2) ne sont + pas des Droits d'Auteur et Droits Similaires. - b. Licence de l'Adaptateur signifie la licence que vous appliquez à vos Droits d'Auteur et Droits Similaires dans vos contributions au Matériel Adapté conformément aux termes et conditions de cette Licence Publique. + e. Mesures Technologiques Efficaces désignent les mesures qui, en + l'absence d'une autorité appropriée, ne peuvent pas être + contournées en vertu des lois remplissant les obligations de + l'Article 11 du Traité de l'OMPI sur le Droit d'Auteur adopté le + 20 décembre 1996, et/ou d'accords internationaux similaires. - c. Licence Compatible BY-SA désigne une licence répertoriée sur creativecommons.org/compatiblelicenses, approuvée par Creative Commons comme essentiellement équivalente à cette Licence Publique. + f. Exceptions et Limitations désignent l'utilisation équitable, le + fair dealing, et/ou toute autre exception ou limitation au Droit + d'Auteur et Droits Similaires qui s'applique à Votre utilisation + du Matériel sous Licence. - d. Droits d'Auteur et Droits Similaires désignent le droit d'auteur et/ou des droits similaires étroitement liés au droit d'auteur, y compris, sans limitation, la performance, la diffusion, l'enregistrement sonore et les Droits de Base de Données Sui Generis, sans égard à la manière dont les droits sont étiquetés ou catégorisés. Aux fins de cette Licence Publique, les droits spécifiés dans la Section 2(b)(1)-(2) ne sont pas des Droits d'Auteur et Droits Similaires. + g. Éléments de la Licence désignent les attributs de licence énumérés + dans le nom d'une Licence Publique Creative Commons. Les Éléments + de la Licence de cette Licence Publique sont Attribution et + Partage dans les Mêmes Conditions. - e. Mesures Technologiques Effectives désignent les mesures qui, en l'absence d'une autorité appropriée, ne peuvent pas être contournées en vertu des lois remplissant des obligations en vertu de l'Article 11 du Traité de l'OMPI sur le droit d'auteur adopté le 20 décembre 1996, et/ou des accords internationaux similaires. + h. Matériel sous Licence désigne l'œuvre artistique ou littéraire, la + base de données ou tout autre matériel auquel le Concédant a + appliqué cette Licence Publique. - f. Exceptions et Limitations désignent l'utilisation équitable, le traitement équitable et/ou toute autre exception ou limitation au Droit d'Auteur et Droits Similaires qui s'applique à votre utilisation du Matériel Licencié. + i. Droits Concédés désignent les droits qui Vous sont accordés sous + réserve des termes et conditions de cette Licence Publique, qui + se limitent à tous les Droits d'Auteur et Droits Similaires qui + s'appliquent à Votre utilisation du Matériel sous Licence et que + le Concédant a l'autorité de concéder. - g. Éléments de Licence désignent les attributs de licence énumérés dans le nom d'une Licence Publique Creative Commons. Les Éléments de Licence de cette Licence Publique sont Attribution et ShareAlike. + j. Concédant désigne la ou les personnes physiques ou morales + accordant des droits en vertu de cette Licence Publique. - h. Matériel Licencié désigne l'œuvre artistique ou littéraire, la base de données ou tout autre matériel auquel le Donneur de Licence a appliqué cette Licence Publique. + k. Partager signifie fournir du matériel au public par tout moyen ou + processus nécessitant une permission en vertu des Droits + Concédés, tels que la reproduction, l'affichage public, la + performance publique, la distribution, la diffusion, la + communication ou l'importation, et rendre le matériel disponible + au public, y compris de manière à ce que les membres du public + puissent accéder au matériel depuis un lieu et à un moment + individuellement choisis par eux. - i. Droits Licenciés désignent les droits qui vous sont accordés sous réserve des termes et conditions de cette Licence Publique, qui sont limités à tous les Droits d'Auteur et Droits Similaires qui s'appliquent à votre utilisation du Matériel Licencié et que le Donneur de Licence a l'autorité de licencier. + l. Droits Sui Generis sur les Bases de Données désignent des droits + autres que le droit d'auteur résultant de la Directive 96/9/CE du + Parlement Européen et du Conseil du 11 mars 1996 sur la protection + juridique des bases de données, telle que modifiée et/ou remplacée, + ainsi que d'autres droits essentiellement équivalents partout dans + le monde. - j. Donneur de Licence désigne la ou les personnes ou entités accordant des droits en vertu de cette Licence Publique. + m. Vous désigne la personne physique ou morale exerçant les Droits + Concédés en vertu de cette Licence Publique. Votre a une + signification correspondante. - k. Partager signifie fournir du matériel au public par tout moyen ou processus nécessitant une permission en vertu des Droits Licenciés, tel que la reproduction, l'affichage public, la performance publique, la distribution, la diffusion, la communication ou l'importation, et rendre le matériel disponible au public, y compris de manière à ce que les membres du public puissent accéder au matériel d'un endroit et à un moment individuellement choisis par eux. +... +Droits, puis la base de données dans laquelle vous avez des droits de base de données sui generis (mais pas son contenu individuel) est un matériel adapté, - l. Droits de Base de Données Sui Generis désignent des droits autres que le droit d'auteur résultant de la Directive 96/9/CE du Parlement européen et du Conseil du 11 mars 1996 sur la protection juridique des bases de données, telle que modifiée et/ou remplacée, ainsi que d'autres droits essentiellement équivalents dans le monde entier. +y compris aux fins de la section 3(b) ; et +c. Vous devez respecter les conditions de la section 3(a) si vous partagez tout ou une partie substantielle du contenu de la base de données. - m. Vous désigne l'individu ou l'entité exerçant les Droits Licenciés en vertu de cette Licence Publique. Votre a une signification correspondante. +Pour éviter tout doute, cette section 4 complète et ne remplace pas vos obligations en vertu de cette licence publique lorsque les droits concédés incluent d'autres droits d'auteur et droits similaires. +--- -### Section 2 -- Portée. +Section 5 -- Déni de garanties et limitation de responsabilité. - a. Accord de licence. +a. SAUF SI LE CONCÉDANT S'ENGAGE AUTREMENT SÉPARÉMENT, DANS LA MESURE DU POSSIBLE, LE CONCÉDANT OFFRE LE MATÉRIEL SOUS LICENCE TEL QUEL ET TEL QUE DISPONIBLE, ET NE FAIT AUCUNE DÉCLARATION NI GARANTIE DE QUELQUE NATURE QUE CE SOIT CONCERNANT LE MATÉRIEL SOUS LICENCE, QU'ELLE SOIT EXPRESSE, IMPLICITE, LÉGALE OU AUTRE. CELA INCLUT, SANS LIMITATION, LES GARANTIES DE TITRE, DE QUALITÉ MARCHANDE, D'ADÉQUATION À UN USAGE PARTICULIER, DE NON-VIOLATION, D'ABSENCE DE DÉFAUTS LATENTS OU AUTRES, D'EXACTITUDE, OU DE PRÉSENCE OU ABSENCE D'ERREURS, QU'ELLES SOIENT CONNUES OU DÉCOUVRABLES. LÀ OÙ LES DÉNIS DE GARANTIES NE SONT PAS AUTORISÉS EN TOTALITÉ OU EN PARTIE, CE DÉNI PEUT NE PAS S'APPLIQUER À VOUS. - 1. Sous réserve des termes et conditions de cette Licence Publique, le Donneur de Licence vous accorde par la présente une licence mondiale, gratuite de redevances, non sous-licenciable, non exclusive et irrévocable pour exercer les Droits Licenciés dans le Matériel Licencié afin de : +b. DANS LA MESURE DU POSSIBLE, EN AUCUN CAS LE CONCÉDANT NE SERA RESPONSABLE ENVERS VOUS, SUR TOUTE THÉORIE JURIDIQUE (Y COMPRIS, SANS LIMITATION, LA NÉGLIGENCE) OU AUTREMENT, POUR TOUTE PERTE DIRECTE, SPÉCIALE, INDIRECTE, ACCESSOIRE, CONSÉCUTIVE, PUNITIVE, EXEMPLAIRE OU AUTRE, COÛTS, DÉPENSES OU DOMMAGES DÉCOULANT DE CETTE LICENCE PUBLIQUE OU DE L'UTILISATION DU MATÉRIEL SOUS LICENCE, MÊME SI LE CONCÉDANT A ÉTÉ INFORMÉ DE LA POSSIBILITÉ DE TELS PERTES, COÛTS, DÉPENSES OU DOMMAGES. LÀ OÙ UNE LIMITATION DE RESPONSABILITÉ N'EST PAS AUTORISÉE EN TOTALITÉ OU EN PARTIE, CETTE LIMITATION PEUT NE PAS S'APPLIQUER À VOUS. - a. reproduire et partager le Matériel Licencié, en tout ou en partie ; et +c. Le déni de garanties et la limitation de responsabilité ci-dessus doivent être interprétés de manière à, dans la mesure du possible, se rapprocher le plus d'un déni absolu et d'une renonciation à toute responsabilité. - b. produire, reproduire et partager du Matériel Adapté. +--- - 2. Exceptions et Limitations. Pour éviter toute ambiguïté, lorsque des Exceptions et Limitations s'appliquent à votre utilisation, cette Licence Publique ne s'applique pas, et vous n'avez pas besoin de respecter ses termes et conditions. +Section 6 -- Durée et résiliation. - 3. Durée. La durée de cette Licence Publique est spécifiée dans la Section 6(a). +a. Cette licence publique s'applique pendant la durée des droits d'auteur et droits similaires concédés ici. Cependant, si vous ne respectez pas cette licence publique, vos droits en vertu de cette licence publique sont automatiquement résiliés. - 4. Médias et formats ; modifications techniques autorisées. Le Donneur de Licence vous autorise à exercer les Droits Licenciés dans tous les médias et formats, qu'ils soient connus maintenant ou créés ultérieurement, et à apporter les modifications techniques nécessaires pour ce faire. Le Donneur de Licence renonce et/ou convient de ne pas faire valoir tout droit ou autorité pour vous interdire de faire des modifications techniques nécessaires pour exercer les Droits Licenciés, y compris les modifications techniques nécessaires pour contourner les Mesures Technologiques Effectives. Aux fins de cette Licence Publique, le fait de simplement apporter des modifications autorisées par cette Section 2(a)(4) ne produit jamais de Matériel Adapté. +b. Lorsque votre droit d'utiliser le matériel sous licence a été résilié en vertu de la section 6(a), il est rétabli : - 5. Destinataires en aval. +1. automatiquement à la date où la violation est corrigée, à condition qu'elle soit corrigée dans les 30 jours suivant votre découverte de la violation ; ou +2. sur rétablissement exprès par le concédant. - a. Offre du Donneur de Licence -- Matériel Licencié. Chaque destinataire du Matériel Licencié reçoit automatiquement une offre du Donneur de Licence pour exercer les Droits Licenciés selon les termes et conditions de cette Licence Publique. +Pour éviter tout doute, cette section 6(b) n'affecte pas le droit du concédant de chercher des recours pour vos violations de cette licence publique. - b. Offre supplémentaire du Donneur de Licence -- Matériel Adapté. Chaque destinataire de Matériel Adapté de votre part reçoit automatiquement une offre du Donneur de Licence pour exercer les Droits Licenciés dans le Matériel Adapté selon les conditions de la Licence de l'Adaptateur que vous appliquez. +c. Pour éviter tout doute, le concédant peut également offrir le matériel sous licence sous des termes ou conditions distincts ou arrêter de distribuer le matériel sous licence à tout moment ; cependant, cela ne mettra pas fin à cette licence publique. - c. Pas de restrictions en aval. Vous ne pouvez pas offrir ou imposer des termes ou conditions supplémentaires ou différents sur, ou appliquer des Mesures Technologiques Effectives à, le Matériel Licencié si cela restreint l'exercice des Droits Licenciés par tout destinataire du Matériel Licencié. +d. Les sections 1, 5, 6, 7 et 8 survivent à la résiliation de cette licence publique. - 6. Pas d'approbation. Rien dans cette Licence Publique ne constitue ou ne peut être interprété comme une permission d'affirmer ou d'impliquer que vous êtes, ou que votre utilisation du Matériel Licencié est, connectée avec, ou sponsorisée, approuvée ou accordée un statut officiel par, le Donneur de Licence ou d'autres désignés pour recevoir une attribution comme prévu dans la Section 3(a)(1)(A)(i). +--- - b. Autres droits. +Section 7 -- Autres termes et conditions. - 1. Les droits moraux, tels que le droit à l'intégrité, ne sont pas licenciés en vertu de cette Licence Publique, ni les droits de publicité, de confidentialité et/ou d'autres droits de personnalité similaires ; cependant, dans la mesure du possible, le Donneur de Licence renonce et/ou convient de ne pas faire valoir de tels droits détenus par le Donneur de Licence dans la mesure limitée nécessaire pour vous permettre d'exercer les Droits Licenciés, mais pas autrement. +a. Le concédant ne sera pas lié par des termes ou conditions supplémentaires ou différents communiqués par vous, sauf s'il y consent expressément. - 2. Les droits de brevet et de marque ne sont pas licenciés en vertu de cette Licence Publique. +b. Tout arrangement, compréhension ou accord concernant le matériel sous licence non mentionné ici est distinct et indépendant des termes et conditions de cette licence publique. - 3. Dans la mesure du possible, le Donneur de Licence renonce à tout droit de percevoir des redevances de votre part pour l'exercice des Droits Licenciés, que ce soit directement ou par l'intermédiaire d'une société de perception dans le cadre de tout schéma de licence statutaire ou obligatoire volontaire ou renonçable. Dans tous les autres cas, le Donneur de Licence se réserve expressément tout droit de percevoir de telles redevances. +--- +Section 8 -- Interprétation. -### Section 3 -- Conditions de Licence. +a. Pour éviter tout doute, cette licence publique ne réduit pas, ne limite pas, ne restreint pas et n'impose pas de conditions à toute utilisation du matériel sous licence qui pourrait être légalement faite sans autorisation en vertu de cette licence publique. -Votre exercice des Droits Licenciés est expressément soumis aux conditions suivantes. +b. Dans la mesure du possible, si une disposition de cette licence publique est jugée inapplicable, elle sera automatiquement réformée dans la mesure minimale nécessaire pour la rendre applicable. Si la disposition ne peut pas être réformée, elle sera séparée de cette licence publique sans affecter la validité des autres termes et conditions. - a. Attribution. +c. Aucun terme ou condition de cette licence publique ne sera renoncé et aucun manquement ne sera consenti sauf si expressément convenu par le concédant. - 1. Si vous partagez le Matériel Licencié (y compris sous une forme modifiée), vous devez : +d. Rien dans cette licence publique ne constitue ou ne peut être interprété comme une limitation ou une renonciation à tout privilège ou immunité applicable au concédant ou à vous, y compris vis-à-vis des processus juridiques de toute juridiction ou autorité. - a. conserver ce qui suit s'il est fourni par le Donneur de Licence avec le Matériel Licencié : +--- - i. identification des créateurs du Matériel Licencié et de tout autre désigné pour recevoir une attribution, de toute manière raisonnable demandée par le Donneur de Licence (y compris par pseudonyme si désigné) ; +======================================================================= - ii. un avis de droit d'auteur ; +Creative Commons n'est pas partie à ses licences publiques. Néanmoins, Creative Commons peut choisir d'appliquer l'une de ses licences publiques au matériel qu'il publie et, dans ces cas, sera considéré comme le "concédant". Le texte des licences publiques Creative Commons est dédié au domaine public sous la Déclaration de domaine public CC0. À l'exception du but limité d'indiquer que le matériel est partagé sous une licence publique Creative Commons ou tel qu'autorisé par les politiques de Creative Commons publiées sur creativecommons.org/policies, Creative Commons n'autorise pas l'utilisation de la marque "Creative Commons" ou de toute autre marque ou logo de Creative Commons sans son consentement écrit préalable, y compris, sans limitation, en lien avec toute modification non autorisée de ses licences publiques ou tout autre arrangement, compréhension ou accord concernant l'utilisation du matériel sous licence. Pour éviter tout doute, ce paragraphe ne fait pas partie des licences publiques. - iii. un avis qui fait référence à cette Licence Publique ; - - iv. un avis qui fait référence à la clause de non-responsabilité ; - - v. un URI ou un lien hypertexte vers le Matériel Licencié dans la mesure raisonnablement praticable ; - - b. indiquer si vous avez modifié le Matériel Licencié et conserver une indication de toute modification précédente ; et - - c. indiquer que le Matériel Licencié est sous licence en vertu de cette Licence Publique, et inclure le texte de, ou l'URI ou le lien hypertexte vers, cette Licence Publique. - - 2. Vous pouvez satisfaire les conditions de la Section 3(a)(1) de toute manière raisonnable en fonction du média, des moyens et du contexte dans lequel vous partagez le Matériel Licencié. Par exemple, il peut être raisonnable de satisfaire les conditions en fournissant un URI ou un lien hypertexte vers une ressource qui inclut les informations requises. - - 3. Si le Donneur de Licence le demande, vous devez retirer toute information requise par la Section 3(a)(1)(A) dans la mesure raisonnablement praticable. - - b. ShareAlike. - - En plus des conditions de la Section 3(a), si vous partagez du Matériel Adapté que vous produisez, les conditions suivantes s'appliquent également. - - 1. La Licence de l'Adaptateur que vous appliquez doit être une licence Creative Commons avec les mêmes Éléments de Licence, cette version ou une version ultérieure, ou une Licence Compatible BY-SA. - - 2. Vous devez inclure le texte de, ou l'URI ou le lien hypertexte vers, la Licence de l'Adaptateur que vous appliquez. Vous pouvez satisfaire cette condition de toute manière raisonnable en fonction du média, des moyens et du contexte dans lequel vous partagez du Matériel Adapté. - - 3. Vous ne pouvez pas offrir ou imposer des termes ou conditions supplémentaires ou différents sur, ou appliquer des Mesures Technologiques Effectives à, le Matériel Adapté qui restreignent l'exercice des droits accordés en vertu de la Licence de l'Adaptateur que vous appliquez. - - -### Section 4 -- Droits de Base de Données Sui Generis. - -Lorsque les Droits Licenciés incluent des Droits de Base de Données Sui Generis qui s'appliquent à votre utilisation du Matériel Licencié : - - a. pour éviter toute ambiguïté, la Section 2(a)(1) vous accorde le droit d'extraire, réutiliser, reproduire et partager tout ou une partie substantielle du contenu de la base de données ; - - b. si vous incluez tout ou une partie substantielle du contenu de la base de données dans une base de données dans laquelle vous détenez des Droits de Base de Données Sui Generis, alors la base de données dans laquelle vous détenez des Droits de Base de Données Sui Generis (mais pas son contenu individuel) est du Matériel Adapté, - - y compris aux fins de la Section 3(b) ; et - c. vous devez respecter les conditions de la Section 3(a) si vous partagez tout ou une partie substantielle du contenu de la base de données. - -Pour éviter toute ambiguïté, cette Section 4 complète et ne remplace pas vos obligations en vertu de cette Licence Publique lorsque les Droits Licenciés incluent d'autres Droits d'Auteur et Droits Similaires. - - -### Section 5 -- Clause de non-responsabilité et limitation de responsabilité. - - a. À MOINS QUE CE SOIT AUTREMENT ENTREPRIS PAR LE DONNEUR DE LICENCE, DANS LA MESURE DU POSSIBLE, LE DONNEUR DE LICENCE OFFRE LE MATÉRIEL LICENCIÉ TEL QUEL ET TEL QUE DISPONIBLE, ET NE FAIT AUCUNE DÉCLARATION OU GARANTIE DE QUELQUE NATURE CONCERNANT LE MATÉRIEL LICENCIÉ, QU'ELLE SOIT EXPRESSE, IMPLICITE, STATUTAIRE OU AUTRE. CECI INCLUT, SANS LIMITATION, DES GARANTIES DE TITRE, DE COMMERCIALISATION, D'ADÉQUATION À UN OBJECTIF PARTICULIER, DE NON-VIOLATION, D'ABSENCE DE DÉFAUTS LATENTS OU AUTRES, D'EXACTITUDE, OU DE LA PRÉSENCE OU DE L'ABSENCE D'ERREURS, QU'ELLES SOIENT OU NON CONNUES OU DÉCOUVRABLES. LORSQUE DES CLAUSES DE NON-RESPONSABILITÉ NE SONT PAS AUTORISÉES EN TOTALITÉ OU EN PARTIE, CETTE CLAUSE DE NON-RESPONSABILITÉ PEUT NE PAS S'APPLIQUER À VOUS. - - b. DANS LA MESURE DU POSSIBLE, EN AUCUN CAS LE DONNEUR DE LICENCE NE SERA RESPONSABLE ENVERS VOUS SUR UNE BASE JURIDIQUE (Y COMPRIS, SANS LIMITATION, LA NÉGLIGENCE) OU AUTRE POUR TOUTE PERTE DIRECTE, SPÉCIALE, INDIRECTE, ACCESSOIRE, CONSÉCUTIVE, PÉNALE, EXEMPLAIRE OU AUTRE, COÛTS, DÉPENSES OU DOMMAGES RÉSULTANT DE CETTE LICENCE PUBLIQUE OU DE L'UTILISATION DU MATÉRIEL LICENCIÉ, MÊME SI LE DONNEUR DE LICENCE A ÉTÉ AVISÉ DE LA POSSIBILITÉ DE TELS PERTES, COÛTS, DÉPENSES OU DOMMAGES. LORSQU'UNE LIMITATION DE RESPONSABILITÉ N'EST PAS AUTORISÉE EN TOTALITÉ OU EN PARTIE, CETTE LIMITATION PEUT NE PAS S'APPLIQUER À VOUS. - - c. La clause de non-responsabilité et la limitation de responsabilité fournies ci-dessus doivent être interprétées de manière à, dans la mesure du possible, approcher le plus possible une renonciation absolue et une renonciation à toute responsabilité. - - -### Section 6 -- Durée et Résiliation. - - a. Cette Licence Publique s'applique pour la durée des Droits d'Auteur et Droits Similaires licenciés ici. Cependant, si vous +Creative Commons peut être contacté à creativecommons.org. **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/lessons/sketchnotes/README.md b/translations/fr/lessons/sketchnotes/README.md index cf057bd3..e9b93c07 100644 --- a/translations/fr/lessons/sketchnotes/README.md +++ b/translations/fr/lessons/sketchnotes/README.md @@ -1,8 +1,17 @@ -Tous les croquis du programme peuvent être téléchargés ici. + +Tous les sketchnotes du programme peuvent être téléchargés ici. 🎨 Créé par : Tomomi Imura (Twitter : [@girlie_mac](https://twitter.com/girlie_mac), GitHub : [girliemac](https://github.com/girliemac)) [![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) **Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/hk/README.md b/translations/hk/README.md new file mode 100644 index 00000000..baf9526d --- /dev/null +++ b/translations/hk/README.md @@ -0,0 +1,156 @@ + +[![GitHub license](https://img.shields.io/github/license/microsoft/AI-For-Beginners.svg)](https://github.com/microsoft/AI-For-Beginners/blob/main/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/AI-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/AI-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD) +[![Gitter](https://badges.gitter.im/Microsoft/ai-for-beginners.svg)](https://gitter.im/Microsoft/ai-for-beginners?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) + +[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) + +# 初學者人工智能課程 - 課程大綱 + +|![ 由 [(@girlie_mac)](https://twitter.com/girlie_mac) 繪製的手繪筆記 ](./lessons/sketchnotes/ai-overview.png)| +|:---:| +| 初學者人工智能 - _手繪筆記由 [@girlie_mac](https://twitter.com/girlie_mac) 繪製_ | + +透過我們為期 12 週、共 24 節課的課程,探索**人工智能**(AI)的世界!課程包括實用的教學、測驗和實驗室練習。這是一個適合初學者的課程,涵蓋了 TensorFlow 和 PyTorch 等工具,以及 AI 的倫理問題。 + +## 你將學到什麼 + +**[課程思維導圖](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)** + +在這個課程中,你將學到: + +* 不同的人工智能方法,包括傳統的符號方法,使用**知識表示**和推理([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence))。 +* **神經網絡**和**深度學習**,這是現代 AI 的核心。我們將使用兩個最受歡迎的框架 [TensorFlow](http://Tensorflow.org) 和 [PyTorch](http://pytorch.org) 的代碼來說明這些重要主題背後的概念。 +* 用於處理圖像和文本的**神經架構**。我們將涵蓋一些近期的模型,但可能不包括最前沿的技術。 +* 不太流行的 AI 方法,例如**遺傳算法**和**多代理系統**。 + +我們不會在這個課程中涵蓋: + +> [在 Microsoft Learn 集合中找到本課程的所有額外資源](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) + +* **AI 在商業中的應用案例**。建議參加 [Introduction to AI for business users](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) 的學習路徑,或 [AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum),這是與 [INSEAD](https://www.insead.edu/) 合作開發的。 +* **經典機器學習**,這在我們的 [Machine Learning for Beginners Curriculum](http://github.com/Microsoft/ML-for-Beginners) 中有詳細描述。 +* 使用 **[Cognitive Services](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)** 構建的實際 AI 應用。建議從 Microsoft Learn 的模組開始,例如 [vision](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum)、[natural language processing](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum)、**[Generative AI with Azure OpenAI Service](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** 等。 +* 特定的 ML **雲框架**,例如 [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum)、[Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum) 或 [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum)。建議參考 [Build and operate machine learning solutions with Azure Machine Learning](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) 和 [Build and Operate Machine Learning Solutions with Azure Databricks](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) 的學習路徑。 +* **對話式 AI** 和 **聊天機器人**。有一個單獨的 [Create conversational AI solutions](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) 學習路徑,你也可以參考 [這篇博客文章](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/) 獲取更多細節。 +* **深度學習的數學基礎**。建議參考 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 的 [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618),該書也可以在線獲取:[https://www.deeplearningbook.org/](https://www.deeplearningbook.org/)。 + +如果想要輕鬆入門 _雲端 AI_ 主題,可以考慮參加 [Get started with artificial intelligence on Azure](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) 的學習路徑。 + +# 課程內容 + +| | 課程連結 | PyTorch/Keras/TensorFlow | 實驗室 | +| :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ | +| 0 | [課程設置](./lessons/0-course-setup/setup.md) | [設置開發環境](./lessons/0-course-setup/how-to-run.md) | | +| I | [**AI 簡介**](./lessons/1-Intro/README.md) | | | +| 01 | [AI 的簡介與歷史](./lessons/1-Intro/README.md) | - | - | +| II | **符號 AI** | +| 02 | [知識表示與專家系統](./lessons/2-Symbolic/README.md) | [專家系統](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) / [本體論](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) /[概念圖](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) | | +| III | [**神經網絡簡介**](./lessons/3-NeuralNetworks/README.md) ||| +| 03 | [感知器](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [實驗室](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) | +| 04 | [多層感知器與創建我們自己的框架](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [實驗室](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) | +| 05 | [框架簡介 (PyTorch/TensorFlow) 與過擬合](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [實驗室](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) | +| IV | [**計算機視覺**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [探索 Microsoft Azure 上的計算機視覺](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) | +| 06 | [計算機視覺簡介. OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [實驗室](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) | +| 07 | [卷積神經網絡](./lessons/4-ComputerVision/07-ConvNets/README.md) & [CNN 架構](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [實驗室](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) | +| 08 | [預訓練網絡與遷移學習](./lessons/4-ComputerVision/08-TransferLearning/README.md) 和 [訓練技巧](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [實驗室](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) | +| 09 | [自編碼器與變分自編碼器 (VAEs)](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | | +| 10 | [生成對抗網絡 (GANs) 與藝術風格遷移](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | | +| 11 | [物件檢測](./lessons/4-ComputerVision/11-ObjectDetection/README.md) | [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) | [實驗室](./lessons/4-ComputerVision/11-ObjectDetection/lab/README.md) | +| 12 | [語義分割. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](../../(https:/github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb)) | | +| V | [**自然語言處理**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [在 Microsoft Azure 上探索自然語言處理](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)| +| 13 | [文本表示. Bow/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | | +| 14 | [語義詞嵌入. Word2Vec 和 GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | | +| 15 | [語言建模. 訓練自己的嵌入](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [實驗室](./lessons/5-NLP/15-LanguageModeling/lab/README.md) | +| 16 | [循環神經網絡 (RNN)](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | | +| 17 | [生成型循環網絡](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.md) / [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.md) | [實驗室](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) | +| 18 | [變壓器. BERT.](./lessons/5-NLP/18-Transformers/READMEtransformers.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | | +| 19 | [命名實體識別 (NER)](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [實驗室](./lessons/5-NLP/19-NER/lab/README.md) | +| 20 | [大型語言模型、提示編程與少樣本任務](./lessons/5-NLP/20-LangModels/READMELargeLang.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | | +| VI | **其他 AI 技術** || | +| 21 | [遺傳算法](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | | +| 22 | [深度強化學習](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [實驗室](./lessons/6-Other/22-DeepRL/lab/README.md) | +| 23 | [多代理系統](./lessons/6-Other/23-MultiagentSystems/README.md) | | | +| VII | **AI 倫理** | | | +| 24 | [AI 倫理與負責任的 AI](./lessons/7-Ethics/README.md) | [Microsoft Learn: 負責任的 AI 原則](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | | +| IX | **附加內容** | | | +| 25 | [多模態網絡、CLIP 和 VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) | | + +## 每節課包含 + +* 預讀材料 +* 可執行的 Jupyter Notebook,通常針對特定框架(**PyTorch** 或 **TensorFlow**)。可執行的 Notebook 也包含大量理論材料,因此要理解主題,您需要至少閱讀一個版本的 Notebook(PyTorch 或 TensorFlow)。 +* **實驗室**(部分主題提供),讓您有機會將所學材料應用於特定問題。 +* 部分章節包含指向 [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) 模組的鏈接,涵蓋相關主題。 + +## 開始學習 + +- 我們已經創建了一個 [設置課程](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/setup.md),幫助您設置開發環境。 +- 對於教育工作者,我們還創建了一個 [課程設置指南](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/for-teachers.md)! +- 如何 [在 VSCode 或 Codepace 中運行代碼](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/how-to-run.md) + +按照以下步驟操作: + +Fork 此倉庫:點擊此頁面右上角的 "Fork" 按鈕。 + +克隆此倉庫:`git clone https://github.com/microsoft/AI-For-Beginners.git` + +別忘了給這個倉庫加星標 (🌟),以便日後更容易找到。 + +## 與其他學習者交流 + +加入我們的 [官方 AI Discord 伺服器](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum),與其他學習者交流並獲得支持。 + +如果您在構建過程中有產品反饋或問題,請訪問我們的 [Azure AI Foundry 開發者論壇](https://aka.ms/foundry/forum) + +## 測驗 +> **關於測驗的注意事項**:所有測驗都存放在 Quiz-app 資料夾內,路徑為 etc\quiz-app。這些測驗已經從課程中連結起來,測驗應用程式可以在本地執行,或者部署到 Azure;請按照 `quiz-app` 資料夾中的指引操作。測驗內容正在逐步進行本地化。 +## 尋求協助 + +有任何建議或發現拼寫或程式碼錯誤?請提出問題或建立拉取請求。 + +## 特別感謝 + +* **✍️ 主要作者:** [Dmitry Soshnikov](http://soshnikov.com),博士 +* **🔥 編輯:** [Jen Looper](https://twitter.com/jenlooper),博士 +* **🎨 手繪筆記插畫師:** [Tomomi Imura](https://twitter.com/girlie_mac) +* **✅ 測驗創作者:** [Lateefah Bello](https://github.com/CinnamonXI),[MLSA](https://studentambassadors.microsoft.com/) +* **🙏 核心貢獻者:** [Evgenii Pishchik](https://github.com/Pe4enIks) + +## 其他課程 + +我們的團隊還製作了其他課程!查看以下內容: + +- [初學者的生成式 AI](https://aka.ms/genai-beginners) +- [初學者的生成式 AI .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [使用 JavaScript 的生成式 AI](https://github.com/microsoft/generative-ai-with-javascript) +- [使用 Java 的生成式 AI](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [初學者的 AI](https://aka.ms/ai-beginners) +- [初學者的數據科學](https://aka.ms/datascience-beginners) +- [初學者的機器學習](https://aka.ms/ml-beginners) +- [初學者的網絡安全](https://github.com/microsoft/Security-101) +- [初學者的網頁開發](https://aka.ms/webdev-beginners) +- [初學者的物聯網](https://aka.ms/iot-beginners) +- [初學者的 XR 開發](https://github.com/microsoft/xr-development-for-beginners) +- [精通 GitHub Copilot 用於代理性使用](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [精通 GitHub Copilot 用於 C#/.NET 開發者](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [選擇你的 Copilot 冒險](https://github.com/microsoft/CopilotAdventures) + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/SECURITY.md b/translations/hk/SECURITY.md new file mode 100644 index 00000000..82939b44 --- /dev/null +++ b/translations/hk/SECURITY.md @@ -0,0 +1,49 @@ + +## 安全性 + +Microsoft 非常重視我們軟件產品和服務的安全性,包括透過我們的 GitHub 組織管理的所有原始碼庫,這些組織包括 [Microsoft](https://github.com/Microsoft)、[Azure](https://github.com/Azure)、[DotNet](https://github.com/dotnet)、[AspNet](https://github.com/aspnet)、[Xamarin](https://github.com/xamarin) 和 [我們的 GitHub 組織](https://opensource.microsoft.com/)。 + +如果您認為在任何 Microsoft 擁有的原始碼庫中發現了符合 [Microsoft 安全漏洞定義](https://aka.ms/opensource/security/definition) 的安全漏洞,請按照以下說明向我們報告。 + +## 報告安全問題 + +**請勿透過公開的 GitHub 問題報告安全漏洞。** + +相反,請透過 Microsoft 安全響應中心 (MSRC) 報告,網址為 [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report)。 + +如果您希望在不登入的情況下提交報告,請發送電子郵件至 [secure@microsoft.com](mailto:secure@microsoft.com)。如果可能,請使用我們的 PGP 密鑰加密您的訊息;您可以從 [Microsoft 安全響應中心 PGP 密鑰頁面](https://aka.ms/opensource/security/pgpkey) 下載密鑰。 + +您應在 24 小時內收到回覆。如果因某些原因未收到回覆,請透過電子郵件跟進,以確保我們收到您的原始訊息。更多資訊可參考 [microsoft.com/msrc](https://aka.ms/opensource/security/msrc)。 + +請提供以下所需資訊(盡可能提供完整),以幫助我們更好地了解問題的性質和範圍: + + * 問題類型(例如:緩衝區溢出、SQL 注入、跨站腳本攻擊等) + * 與問題相關的原始碼文件的完整路徑 + * 受影響原始碼的位置(標籤/分支/提交或直接 URL) + * 重現問題所需的任何特殊配置 + * 重現問題的逐步指引 + * 概念驗證或漏洞利用代碼(如果可能) + * 問題的影響,包括攻擊者可能如何利用該問題 + +這些資訊將幫助我們更快速地處理您的報告。 + +如果您是為漏洞賞金計劃報告,提供更完整的報告可能會獲得更高的賞金獎勵。請訪問我們的 [Microsoft 漏洞賞金計劃](https://aka.ms/opensource/security/bounty) 頁面,了解更多有關我們現行計劃的詳情。 + +## 優先語言 + +我們偏好所有溝通使用英文。 + +## 政策 + +Microsoft 遵循 [協調漏洞披露](https://aka.ms/opensource/security/cvd) 的原則。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/etc/CODE_OF_CONDUCT.md b/translations/hk/etc/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..8f6a3006 --- /dev/null +++ b/translations/hk/etc/CODE_OF_CONDUCT.md @@ -0,0 +1,21 @@ + +# Microsoft 開源行為準則 + +此項目已採用 [Microsoft 開源行為準則](https://opensource.microsoft.com/codeofconduct/)。 + +資源: + +- [Microsoft 開源行為準則](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft 行為準則常見問題](https://opensource.microsoft.com/codeofconduct/faq/) +- 如有疑問或關注,請聯絡 [opencode@microsoft.com](mailto:opencode@microsoft.com) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/etc/CONTRIBUTING.md b/translations/hk/etc/CONTRIBUTING.md new file mode 100644 index 00000000..9ace6f11 --- /dev/null +++ b/translations/hk/etc/CONTRIBUTING.md @@ -0,0 +1,29 @@ + +# 貢獻指南 + +此項目歡迎各種貢獻和建議。大多數貢獻需要您同意一份貢獻者許可協議 (CLA),聲明您擁有權利並實際授予我們使用您貢獻的權利。詳情請訪問 https://cla.microsoft.com。 + +當您提交拉取請求時,CLA 機器人會自動判斷您是否需要提供 CLA,並適當地標記 PR(例如,添加標籤或評論)。只需按照機器人提供的指示操作即可。您只需在所有使用我們 CLA 的倉庫中完成一次此操作。 + +此項目採用了 [Microsoft 開源行為準則](https://opensource.microsoft.com/codeofconduct/)。如需更多資訊,請參閱 [行為準則常見問題](https://opensource.microsoft.com/codeofconduct/faq/) 或聯繫 [opencode@microsoft.com](mailto:opencode@microsoft.com) 提出其他問題或意見。 + +# 尋求貢獻 + +我們目前正在積極尋求以下主題的貢獻: + +- [ ] 撰寫有關深度強化學習的章節 +- [ ] 改進物件檢測的章節和筆記本 +- [ ] PyTorch Lightning(針對[此章節](https://github.com/microsoft/AI-For-Beginners/blob/main/3-NeuralNetworks/05-Frameworks/README.md)) +- [ ] 撰寫有關命名實體識別的章節和範例 +- [ ] 為[此章節](https://github.com/microsoft/AI-For-Beginners/tree/main/5-NLP/15-LanguageModeling) 創建訓練自定義嵌入的範例 + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/etc/Mindmap.md b/translations/hk/etc/Mindmap.md new file mode 100644 index 00000000..1c6be3f5 --- /dev/null +++ b/translations/hk/etc/Mindmap.md @@ -0,0 +1,87 @@ + +# 人工智能 + +## [人工智能簡介](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/1-Intro/README.md) + - 人工智能的定義 + - 人工智能的歷史 + - 人工智能的方法 + - 自上而下/符號式 + - 自下而上/神經網絡 + - 演化式 + - 協同/湧現式人工智能 + - [Microsoft AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-cacaste) + +## [符號式人工智能](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/README.md) + - 知識表示 + - [專家系統](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) + - [本體論](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) + - 語義網 + +## [神經網絡](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/README.md) + - [感知器](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/README.md) + - [多層網絡](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/README.md) + - [框架簡介](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/README.md) + - [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) + - [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.md) + - [過擬合](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/Overfitting.md) + +## [計算機視覺](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/README.md) + - 在 Microsoft Learn 上 + - [人工智能基礎:探索計算機視覺](https://docs.microsoft.com/learn/paths/explore-computer-vision-microsoft-azure/?WT.mc_id=academic-77998-cacaste) + - [使用 PyTorch 的計算機視覺](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) + - [使用 TensorFlow 的計算機視覺](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste) + - [計算機視覺簡介:OpenCV](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/README.md) + - [卷積網絡](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/README.md) + - [卷積神經網絡架構](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) + - [遷移學習](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/README.md) + - [訓練技巧](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) + - [自編碼器和變分自編碼器](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/README.md) + - [生成對抗網絡](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/README.md) + - [風格遷移](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) + - [物體檢測](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/README.md) + - [分割](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/README.md) + +## [自然語言處理](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/README.md) + - 在 Microsoft Learn 上 + - [人工智能基礎:探索自然語言處理](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-cacaste) + - [使用 PyTorch 的自然語言處理](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) + - [使用 TensorFlow 的自然語言處理](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) + - [文本表示](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/README.md) + - 詞袋模型 + - TF/IDF + - [語義嵌入](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/README.md) + - Word2Vec + - GloVE + - [語言建模](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling) + - [循環神經網絡](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/README.md) + - LSTM + - GRU + - [生成式循環網絡](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/README.md) + - [Transformer 和 BERT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/README.md) + - [命名實體識別](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/19-NER/README.md) + - [文本生成和 GPT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/20-LanguageModels/README.md) + +## 其他技術 + - [遺傳算法](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/README.md) + - [深度強化學習](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/README.md) + - [多代理系統](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/23-MultiagentSystems/README.md) + +## [人工智能倫理](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/7-Ethics/README.md) + - [Microsoft Learn 負責任的人工智能](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) + +## 附加內容 + - [多模態網絡](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/README.md) + - [CLIP](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) + - DALL-E + - VQ-GAN + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/etc/SUPPORT.md b/translations/hk/etc/SUPPORT.md new file mode 100644 index 00000000..9dd3099a --- /dev/null +++ b/translations/hk/etc/SUPPORT.md @@ -0,0 +1,23 @@ + +# 支援 + +## 如何提交問題及獲取協助 + +此項目使用 GitHub Issues 來追蹤錯誤及功能需求。在提交新問題之前,請先搜尋現有問題以避免重複。若需提交新問題,請將您的錯誤或功能需求作為新 Issue 提交。 + +如需使用此項目時的協助或有任何疑問,請使用討論板。 + +## Microsoft 支援政策 + +此項目的支援僅限於上述列出的資源。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/etc/TRANSLATIONS.md b/translations/hk/etc/TRANSLATIONS.md new file mode 100644 index 00000000..5b8c6ce4 --- /dev/null +++ b/translations/hk/etc/TRANSLATIONS.md @@ -0,0 +1,45 @@ + +# 參與翻譯課程 + +我們歡迎您為這個課程的課程內容進行翻譯! + +## 指引 + +每個課程資料夾和課程介紹資料夾中都有包含翻譯後的 Markdown 文件的資料夾。 + +> 注意,請不要翻譯任何程式碼範例文件中的程式碼;唯一需要翻譯的是 README、作業和測驗。謝謝! + +翻譯後的文件應遵循以下命名規則: + +**README._[language]_.md** + +其中 _[language]_ 是根據 ISO 639-1 標準的兩位字母語言縮寫(例如,西班牙文為 `README.es.md`,荷蘭文為 `README.nl.md`)。 + +**assignment._[language]_.md** + +與 README 類似,請翻譯作業文件。 + +**測驗** + +1. 將您的翻譯新增到測驗應用程式中,方法是將文件新增到這裡:https://github.com/microsoft/AI-For-Beginners/tree/main/etc/quiz-app/src/assets/translations,並遵循正確的命名規則(例如 en.json、fr.json)。**請不要翻譯 'true' 或 'false' 這些詞語。謝謝!** + +2. 在測驗應用程式的 App.vue 文件中新增您的語言代碼到下拉選單中。 + +3. 編輯測驗應用程式的 [translations index.js 文件](https://github.com/microsoft/AI-For-Beginners/blob/main/etc/quiz-app/src/assets/translations/index.js),以新增您的語言。 + +4. 最後,編輯您翻譯後的 README.md 文件中的所有測驗連結,讓它們直接指向您的翻譯測驗,例如:https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1 改為 https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1?loc=id + +**感謝您** + +我們由衷感謝您的努力! + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/etc/quiz-app/README.md b/translations/hk/etc/quiz-app/README.md new file mode 100644 index 00000000..5bb12f87 --- /dev/null +++ b/translations/hk/etc/quiz-app/README.md @@ -0,0 +1,137 @@ + +# 測驗 + +這些測驗是 AI 課程(https://aka.ms/ai-beginners)的課前和課後測驗。 + +## 新增翻譯測驗集 + +透過在 `assets/translations` 資料夾中建立相應的測驗結構來新增測驗翻譯。原始測驗位於 `assets/translations/en`。測驗依據課程分為多個組別。請確保編號與正確的測驗部分對齊。整個課程共有 40 個測驗,編號從 0 開始。 + +編輯翻譯後,請編輯翻譯資料夾中的 `index.js` 檔案,按照 `en` 的慣例匯入所有檔案。 + +接著,編輯 `assets/translations` 中的 `index.js` 檔案,匯入新的翻譯檔案。 + +然後,編輯此應用程式中的 `App.vue` 下拉選單,新增您的語言。將本地化縮寫與您的語言資料夾名稱匹配。 + +最後,編輯翻譯課程中的所有測驗連結(如果存在),以包含此本地化作為查詢參數,例如:`?loc=fr`。 + +## 專案設定 + +``` +npm install +``` + +### 編譯並熱重載以進行開發 + +``` +npm run serve +``` + +### 編譯並壓縮以進行生產環境 + +``` +npm run build +``` + +### 檢查並修復檔案 + +``` +npm run lint +``` + +### 自訂配置 + +請參閱 [配置參考](https://cli.vuejs.org/config/)。 + +致謝:感謝此測驗應用程式的原始版本:https://github.com/arpan45/simple-quiz-vue + +## 部署到 Azure + +以下是幫助您開始的逐步指南: + +1. Fork GitHub 儲存庫 +確保您的靜態網站應用程式程式碼位於您的 GitHub 儲存庫中。Fork 此儲存庫。 + +2. 建立 Azure 靜態網站應用程式 +- 建立 [Azure 帳戶](http://azure.microsoft.com) +- 前往 [Azure 入口網站](https://portal.azure.com) +- 點擊「建立資源」,然後搜尋「靜態網站應用程式」。 +- 點擊「建立」。 + +3. 配置靜態網站應用程式 +- 基本設定: + - 訂閱:選擇您的 Azure 訂閱。 + - 資源群組:建立新的資源群組或使用現有的資源群組。 + - 名稱:為您的靜態網站應用程式提供一個名稱。 + - 區域:選擇最接近您使用者的區域。 + +- #### 部署詳細資訊: + - 原始碼:選擇「GitHub」。 + - GitHub 帳戶:授權 Azure 存取您的 GitHub 帳戶。 + - 組織:選擇您的 GitHub 組織。 + - 儲存庫:選擇包含靜態網站應用程式的儲存庫。 + - 分支:選擇您要部署的分支。 + +- #### 建置詳細資訊: + - 建置預設值:選擇您的應用程式所使用的框架(例如 React、Angular、Vue 等)。 + - 應用程式位置:指定包含應用程式程式碼的資料夾(例如,如果在根目錄,則為 /)。 + - API 位置:如果有 API,請指定其位置(可選)。 + - 輸出位置:指定生成輸出的資料夾(例如 build 或 dist)。 + +4. 檢查並建立 +檢查您的設定,然後點擊「建立」。Azure 將設置必要的資源,並在您的儲存庫中建立 GitHub Actions 工作流程。 + +5. GitHub Actions 工作流程 +Azure 會自動在您的儲存庫中建立一個 GitHub Actions 工作流程檔案(.github/workflows/azure-static-web-apps-.yml)。此工作流程將處理建置和部署過程。 + +6. 監控部署 +前往您的 GitHub 儲存庫中的「Actions」標籤。 +您應該會看到一個正在運行的工作流程。此工作流程將建置並部署您的靜態網站應用程式到 Azure。 +一旦工作流程完成,您的應用程式將在提供的 Azure URL 上線。 + +### 範例工作流程檔案 + +以下是 GitHub Actions 工作流程檔案的範例: +name: Azure Static Web Apps CI/CD +``` +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v2 + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} + repo_token: ${{ secrets.GITHUB_TOKEN }} + action: "upload" + app_location: "etc/quiz-app # App source code path" + api_location: ""API source code path optional + output_location: "dist" #Built app content directory - optional +``` + +### 其他資源 +- [Azure 靜態網站應用程式文件](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [GitHub Actions 文件](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/0-course-setup/for-teachers.md b/translations/hk/lessons/0-course-setup/for-teachers.md new file mode 100644 index 00000000..0245eaab --- /dev/null +++ b/translations/hk/lessons/0-course-setup/for-teachers.md @@ -0,0 +1,35 @@ + +# 給教育工作者 + +想在課堂上使用這套課程嗎?請隨意使用! + +事實上,你可以直接在 GitHub 上使用,透過 GitHub Classroom 來進行。 + +要做到這一點,請先 fork 此 repo。你需要為每一課建立一個 repo,因此需要將每個文件夾提取到一個獨立的 repo。這樣,[GitHub Classroom](https://classroom.github.com/classrooms) 就可以分別處理每一課。 + +這些[完整指引](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/)可以幫助你了解如何設置你的課堂。 + +## 按原樣使用此 repo + +如果你希望直接使用目前的 repo,而不使用 GitHub Classroom,也可以這樣做。你需要與學生溝通,告訴他們一起學習哪一課。 + +在網上教學形式(例如 Zoom、Teams 或其他平台)中,你可以為測驗設置分組討論室,並指導學生準備學習。然後邀請學生參加測驗,並在指定時間以 "issues" 的形式提交答案。如果你希望學生公開合作完成作業,也可以採用同樣的方式。 + +如果你更喜歡私密的形式,可以要求學生逐課 fork 課程到他們自己的 GitHub 私人 repo,並授予你訪問權限。這樣他們可以私下完成測驗和作業,並通過 classroom repo 的 issues 提交給你。 + +在網上課堂中有很多方法可以讓這套課程運作起來。請告訴我們哪種方式最適合你! + +## 請分享你的想法 + +我們希望這套課程能夠滿足你和學生的需求。請在討論區提供你的反饋意見! + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/0-course-setup/how-to-run.md b/translations/hk/lessons/0-course-setup/how-to-run.md new file mode 100644 index 00000000..0f7b3adc --- /dev/null +++ b/translations/hk/lessons/0-course-setup/how-to-run.md @@ -0,0 +1,76 @@ + +# 如何執行程式碼 + +這份課程包含許多可執行的範例和實驗室,您可能會希望執行它們。為了做到這一點,您需要能夠在課程提供的 Jupyter Notebooks 中執行 Python 程式碼。以下是幾種執行程式碼的選項: + +## 在本地電腦上執行 + +若要在本地電腦上執行程式碼,您需要安裝某個版本的 Python。我個人推薦安裝 **[miniconda](https://conda.io/en/latest/miniconda.html)** —— 它是一個輕量級的安裝包,支援 `conda` 套件管理器,用於建立不同的 Python **虛擬環境**。 + +安裝 miniconda 後,您需要克隆此課程的存儲庫並建立一個虛擬環境以供使用: + +```bash +git clone http://github.com/microsoft/ai-for-beginners +cd ai-for-beginners +conda env create --name ai4beg --file .devcontainer/environment.yml +conda activate ai4beg +``` + +### 使用 Visual Studio Code 和 Python 擴展 + +使用課程的最佳方式可能是透過 [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) 和 [Python 擴展](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) 打開課程。 + +> **注意**:當您克隆並在 VS Code 中打開目錄時,它會自動建議您安裝 Python 擴展。您還需要按照上述步驟安裝 miniconda。 + +> **注意**:如果 VS Code 建議您在容器中重新打開存儲庫,請拒絕此建議以使用本地的 Python 安裝。 + +### 在瀏覽器中使用 Jupyter + +您也可以直接在瀏覽器中使用 Jupyter 環境。事實上,傳統的 Jupyter 和 Jupyter Hub 都提供了相當方便的開發環境,包括自動完成、程式碼高亮等功能。 + +若要在本地啟動 Jupyter,請進入課程目錄並執行以下指令: + +```bash +jupyter notebook +``` +或 +```bash +jupyterhub +``` +接著,您可以導航到任何 `.ipynb` 文件,打開並開始工作。 + +### 在容器中執行 + +另一個替代 Python 安裝的方式是使用容器執行程式碼。由於我們的存儲庫包含特殊的 `.devcontainer` 資料夾,指示如何為此存儲庫建立容器,VS Code 會建議您在容器中重新打開程式碼。這需要安裝 Docker,並且操作會更複雜,因此我們建議有經驗的使用者使用此方法。 + +## 在雲端執行 + +如果您不想在本地安裝 Python,並且擁有一些雲端資源,另一個不錯的選擇是在雲端執行程式碼。有幾種方式可以做到: + +* 使用 **[GitHub Codespaces](https://github.com/features/codespaces)**,這是一個在 GitHub 上為您建立的虛擬環境,可透過 VS Code 的瀏覽器介面訪問。如果您有 Codespaces 的使用權限,只需點擊存儲庫中的 **Code** 按鈕,啟動一個 Codespace,即可快速開始使用。 +* 使用 **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**。 [Binder](https://mybinder.org) 是一個免費的雲端計算資源,供像您這樣的使用者在 GitHub 上測試程式碼。首頁上有一個按鈕可以在 Binder 中打開存儲庫——這會快速將您帶到 Binder 網站,並無縫啟動 Jupyter 網頁介面。 + +> **注意**:為了防止濫用,Binder 對某些網路資源的訪問進行了限制。這可能會導致某些程式碼無法正常運行,特別是那些從公共互聯網抓取模型和/或數據集的程式碼。您可能需要找到一些替代方法。此外,Binder 提供的計算資源相對基本,因此在後期更複雜的課程中,訓練速度可能會很慢。 + +## 在雲端使用 GPU 執行 + +課程中的某些後期章節會因 GPU 支援而受益匪淺,否則訓練速度會非常慢。如果您透過 [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) 或您的機構擁有雲端資源,以下是幾個選項: + +* 建立 [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste),並透過 Jupyter 連接到它。您可以直接在該機器上克隆存儲庫並開始學習。NC 系列虛擬機器支援 GPU。 + +> **注意**:某些訂閱(包括 Azure for Students)並未預設提供 GPU 支援。您可能需要透過技術支援請求額外的 GPU 核心。 + +* 建立 [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste),然後使用其中的 Notebook 功能。[這段影片](https://azure-for-academics.github.io/quickstart/azureml-papers/) 顯示如何將存儲庫克隆到 Azure ML Notebook 並開始使用。 + +您也可以使用 Google Colab,它提供一些免費的 GPU 支援,並將 Jupyter Notebooks 上傳到其中逐一執行。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/0-course-setup/setup.md b/translations/hk/lessons/0-course-setup/setup.md new file mode 100644 index 00000000..30d0cb60 --- /dev/null +++ b/translations/hk/lessons/0-course-setup/setup.md @@ -0,0 +1,54 @@ + +# 開始使用此課程 + +## 你是學生嗎? + +可以從以下資源開始: + +* [學生中心頁面](https://docs.microsoft.com/learn/student-hub?WT.mc_id=academic-77998-cacaste) 在這個頁面,你可以找到入門資源、學生套件,甚至有機會獲得免費認證券。這是一個值得收藏並定期查看的頁面,因為我們至少每月會更新內容。 +* [Microsoft 學生學習大使](https://studentambassadors.microsoft.com?WT.mc_id=academic-77998-cacaste) 加入一個全球性的學生大使社群,這可能是你進入 Microsoft 的途徑。 + +**學生們**,有幾種方式可以使用這個課程。首先,你可以直接在 GitHub 上閱讀文本並查看程式碼。如果你想在任何筆記本中執行程式碼,請[閱讀我們的指引](./etc/how-to-run.md),並在[這篇部落格文章](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)中找到更多建議。 + +> **注意**: [如何執行此課程中的程式碼的指引](./how-to-run.md) + +## 自學 + +然而,如果你想將這門課程作為自學項目,我們建議你將整個倉庫 fork 到自己的 GitHub 帳戶,並自行或與小組一起完成練習: + +* 從課前測驗開始。 +* 閱讀課程的介紹文本。 +* 如果課程有額外的筆記本,請閱讀並執行其中的程式碼。如果同時提供 TensorFlow 和 PyTorch 筆記本,你可以專注於其中一個,選擇你喜歡的框架。 +* 筆記本通常包含一些挑戰,要求你稍微調整程式碼以進行實驗。 +* 完成課後測驗。 +* 如果模組附有實驗室,請完成作業。 +* 參觀 [討論區](https://github.com/microsoft/AI-For-Beginners/discussions) 來「公開學習」。 + +> 為了進一步學習,我們建議你跟隨這些 [Microsoft Learn](https://docs.microsoft.com/en-us/users/dmitrysoshnikov-9132/collections/31zgizg2p418yo/?WT.mc_id=academic-77998-cacaste) 模組和學習路徑。 + +**教師們**,我們已[提供一些建議](/for-teachers.md)來幫助你使用這個課程。 + +--- + +## 教學法 + +在設計這個課程時,我們選擇了兩個教學原則:確保它是**基於項目**的實踐課程,並且包含**頻繁的測驗**。 + +通過確保內容與項目對應,學習過程對學生來說更具吸引力,並且能增強概念的記憶。此外,課前的低壓力測驗可以幫助學生專注於學習主題,而課後的第二次測驗則進一步鞏固記憶。這個課程設計靈活有趣,可以整體學習,也可以部分學習。項目從簡單開始,並在 12 週的課程結束時逐漸變得更複雜。 + +> **關於測驗的說明**: 所有測驗都包含在[這個應用程式](https://red-field-0a6ddfd03.1.azurestaticapps.net/)中,共有 50 個測驗,每個測驗包含三個問題。測驗在課程中有連結,但測驗應用程式也可以在本地運行;請按照 `etc/quiz-app` 資料夾中的指引操作。 + +## 離線訪問 + +你可以使用 [Docsify](https://docsify.js.org/#/) 離線運行此文檔。Fork 此倉庫,在本地機器上[安裝 Docsify](https://docsify.js.org/#/quickstart),然後在此倉庫的根目錄中輸入 `docsify serve`。網站將在本地端的 3000 埠上運行:`localhost:3000`。課程的 PDF 版本可在[此連結](../../../../../../../../../etc/pdf/readme.pdf)中獲取。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/1-Intro/README.md b/translations/hk/lessons/1-Intro/README.md new file mode 100644 index 00000000..dee45907 --- /dev/null +++ b/translations/hk/lessons/1-Intro/README.md @@ -0,0 +1,163 @@ + +# 人工智能簡介 + +![人工智能簡介內容的手繪圖](../../../../translated_images/ai-intro.bf28d1ac4235881c096f0ffdb320ba4102940eafcca4e9d7a55a03914361f8f3.hk.png) + +> 手繪筆記由 [Tomomi Imura](https://twitter.com/girlie_mac) 提供 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/101) + +**人工智能** 是一門令人興奮的科學學科,研究如何讓電腦表現出智能行為,例如執行人類擅長的事情。 + +最初,電腦是由 [Charles Babbage](https://en.wikipedia.org/wiki/Charles_Babbage) 發明的,用於按照明確定義的程序(算法)處理數字。現代電腦雖然比19世紀提出的原型先進得多,但仍然遵循受控計算的理念。因此,如果我們知道實現目標所需的精確步驟序列,就可以編程讓電腦完成某些事情。 + +![一個人的照片](../../../../translated_images/dsh_age.d212a30d4e54fb5f68b94a624aad64bc086124bcbbec9561ae5bd5da661e22d8.hk.png) + +> 照片由 [Vickie Soshnikova](http://twitter.com/vickievalerie) 提供 + +> ✅ 從一張照片中判斷一個人的年齡是一項無法明確編程的任務,因為我們無法解釋當我們做出判斷時,腦海中是如何得出這個數字的。 + +--- + +然而,有些任務我們並不知道如何明確解決。例如,從一張照片中判斷一個人的年齡。我們能夠學會這樣做,是因為我們看過許多年齡不同的人的例子,但我們無法明確解釋我們是如何做到的,也無法編程讓電腦完成這項任務。這正是 **人工智能**(簡稱 AI)感興趣的任務類型。 + +✅ 想一想有哪些任務可以交給電腦處理,並且能從 AI 中受益。考慮金融、醫療和藝術領域——這些領域今天是如何從 AI 中受益的? + +## 弱人工智能與強人工智能 + +弱人工智能 | 強人工智能 +---------------------------------------|------------------------------------- +弱人工智能指的是為特定任務或一組狹窄任務設計和訓練的 AI 系統。|強人工智能,或稱人工通用智能(AGI),指的是具有與人類相當的智能和理解能力的 AI 系統。 +這些 AI 系統並不具備普遍的智能;它們在執行預定義的任務上表現出色,但缺乏真正的理解或意識。|這些 AI 系統能夠執行人類可以完成的任何智力任務,適應不同的領域,並擁有某種形式的意識或自我認知。 +弱人工智能的例子包括像 Siri 或 Alexa 這樣的虛擬助手、流媒體服務使用的推薦算法,以及專為特定客戶服務任務設計的聊天機器人。|實現強人工智能是 AI 研究的長期目標,這需要開發能夠在廣泛任務和情境中進行推理、學習、理解和適應的 AI 系統。 +弱人工智能高度專業化,並不具備類似人類的認知能力或超出其狹窄領域的通用問題解決能力。|強人工智能目前仍是一個理論概念,尚無 AI 系統達到這種通用智能的水平。 + +更多信息請參考 **[人工通用智能](https://en.wikipedia.org/wiki/Artificial_general_intelligence)** (AGI)。 + +## 智能的定義與圖靈測試 + +在討論 **[智能](https://en.wikipedia.org/wiki/Intelligence)** 這個術語時,問題之一是我們對這個術語沒有明確的定義。有人認為智能與 **抽象思維** 或 **自我意識** 有關,但我們無法準確定義它。 + +![貓的照片](../../../../translated_images/photo-cat.8c8e8fb760ffe45725c5b9f6b0d954e9bf114475c01c55adf0303982851b7eae.hk.jpg) + +> [照片](https://unsplash.com/photos/75715CVEJhI) 由 [Amber Kipp](https://unsplash.com/@sadmax) 提供,來自 Unsplash + +為了看出“智能”這個術語的模糊性,試著回答這個問題:“貓是智能的嗎?”不同的人往往會給出不同的答案,因為沒有普遍接受的測試來證明這一說法是真還是假。如果你認為有,那就試著讓你的貓參加智商測試吧…… + +✅ 花一分鐘思考你如何定義智能。一隻能解開迷宮並獲得食物的烏鴉是智能的嗎?一個小孩是智能的嗎? + +--- + +在談論 AGI 時,我們需要某種方法來判斷我們是否創造了一個真正智能的系統。[Alan Turing](https://en.wikipedia.org/wiki/Alan_Turing) 提出了一種方法,稱為 **[圖靈測試](https://en.wikipedia.org/wiki/Turing_test)**,這也可以作為智能的定義。該測試將給定的系統與某些本質上智能的東西(如真人)進行比較,並且由於任何自動比較都可能被計算機程序繞過,我們使用人類審問者。因此,如果一個人無法在基於文本的對話中區分真人和計算機系統,那麼該系統就被認為是智能的。 + +> 一個名為 [Eugene Goostman](https://en.wikipedia.org/wiki/Eugene_Goostman) 的聊天機器人於 2014 年在聖彼得堡開發,通過使用一個巧妙的個性化技巧接近通過圖靈測試。它一開始就聲稱自己是一個 13 歲的烏克蘭男孩,這可以解釋知識的缺乏和文本中的一些不一致之處。該機器人在 5 分鐘的對話後說服了 30% 的評委相信它是人類,這是一個圖靈認為機器到 2000 年能夠通過的指標。然而,應該明白,這並不意味著我們創造了一個智能系統,或者計算機系統欺騙了人類審問者——實際上是機器人的創造者欺騙了人類! + +✅ 你是否曾經被聊天機器人欺騙,認為你在與人類交談?它是如何說服你的? + +## 不同的 AI 方法 + +如果我們希望計算機像人類一樣行事,我們需要在計算機內部模擬我們的思維方式。因此,我們需要嘗試理解什麼使人類具有智能。 + +> 為了能夠將智能編程到機器中,我們需要理解我們自己做決策的過程是如何運作的。如果你進行一些自我反思,你會意識到有些過程是潛意識發生的——例如,我們可以在不思考的情況下區分貓和狗——而另一些則涉及推理。 + +對於這個問題,有兩種可能的方法: + +自上而下方法(符號推理) | 自下而上方法(神經網絡) +---------------------------------------|------------------------------------- +自上而下的方法模擬人類解決問題的推理方式。它涉及從人類中提取 **知識**,並以計算機可讀的形式表示。我們還需要開發一種方法來在計算機內部模擬 **推理**。|自下而上的方法模擬人腦的結構,由大量簡單的單元組成,稱為 **神經元**。每個神經元的作用類似於其輸入的加權平均值,我們可以通過提供 **訓練數據** 來訓練神經元網絡解決有用的問題。 + +此外,還有一些其他可能的智能方法: + +* **湧現式**、**協同式** 或 **多代理方法** 基於這樣一個事實,即通過大量簡單代理的交互可以獲得複雜的智能行為。根據 [進化控制論](https://en.wikipedia.org/wiki/Global_brain#Evolutionary_cybernetics),智能可以在 *元系統轉變* 的過程中從更簡單的反應行為中 *湧現*。 + +* **進化方法** 或 **遺傳算法** 是基於進化原則的優化過程。 + +我們將在課程後續中考慮這些方法,但現在我們將重點放在兩個主要方向:自上而下和自下而上。 + +### 自上而下方法 + +在 **自上而下方法** 中,我們嘗試模擬我們的推理過程。由於我們在推理時可以跟隨自己的思路,我們可以嘗試將這一過程形式化並編程到計算機中。這被稱為 **符號推理**。 + +人們往往在頭腦中有一些指導其決策過程的規則。例如,當醫生診斷病人時,他或她可能意識到一個人發燒了,因此可能身體內部有某種炎症。通過將大量規則應用於特定問題,醫生可能最終得出診斷結論。 + +這種方法高度依賴於 **知識表示** 和 **推理**。從人類專家那裡提取知識可能是最困難的部分,因為醫生在許多情況下並不知道自己為什麼會得出特定的診斷。有時解決方案只是突然出現在他的腦海中,沒有明確的思考。有些任務,例如從照片中判斷一個人的年齡,根本無法簡化為知識的操作。 + +### 自下而上方法 + +或者,我們可以嘗試模擬我們大腦中最簡單的元素——神經元。我們可以在計算機內部構建所謂的 **人工神經網絡**,然後通過提供例子來教它解決問題。這個過程類似於新生兒通過觀察學習周圍環境的方式。 + +✅ 做一些研究,了解嬰兒是如何學習的。嬰兒大腦的基本元素是什麼? + +> | 關於機器學習? | | +> |--------------|-----------| +> | 基於計算機通過一些數據學習解決問題的人工智能部分被稱為 **機器學習**。我們不會在本課程中考慮經典的機器學習——我們建議你參考單獨的 [機器學習初學者課程](http://aka.ms/ml-beginners)。 | ![機器學習初學者](../../../../translated_images/ml-for-beginners.9e4fed176fd5817d7d1f7d358302515186579cbf09b2a6c5bd8092b345da7f22.hk.png) | + +## 人工智能的簡史 + +人工智能作為一個領域始於20世紀中期。最初,符號推理是一種流行的方法,並且在一些重要的成功中發揮了作用,例如專家系統——能夠在某些有限問題領域中充當專家的計算機程序。然而,很快就發現這種方法的可擴展性不佳。從專家那裡提取知識、將其表示在計算機中並保持知識庫的準確性,事實證明這是一項非常複雜且在許多情況下成本過高的任務。這導致了20世紀70年代所謂的 [人工智能寒冬](https://en.wikipedia.org/wiki/AI_winter)。 + +> 圖片由 [Dmitry Soshnikov](http://soshnikov.com) 提供 + +隨著時間的推移,計算資源變得更便宜,數據也變得更加豐富,因此神經網絡方法在許多領域(如計算機視覺或語音理解)中開始展現出與人類競爭的卓越性能。在過去十年中,“人工智能”這個術語大多被用作神經網絡的同義詞,因為我們聽到的大多數 AI 成功案例都基於它們。 + +我們可以觀察到方法的變化,例如在創建下棋程序時: + +* 早期的下棋程序基於搜索——程序明確嘗試估計對手在接下來幾步中的可能走法,並根據幾步內可以達到的最佳位置選擇最佳走法。這導致了所謂的 [alpha-beta 剪枝](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning) 搜索算法的發展。 +* 搜索策略在遊戲結束時效果很好,因為此時搜索空間受到少量可能走法的限制。然而,在遊戲開始時,搜索空間非常龐大,算法可以通過學習人類玩家之間的現有對局來改進。隨後的實驗採用了所謂的 [基於案例的推理](https://en.wikipedia.org/wiki/Case-based_reasoning),程序在知識庫中尋找與當前棋局非常相似的案例。 +* 現代能夠擊敗人類玩家的程序基於神經網絡和 [強化學習](https://en.wikipedia.org/wiki/Reinforcement_learning),程序通過長時間與自己對弈並從自己的錯誤中學習來學會下棋——這與人類學習下棋的方式非常相似。然而,計算機程序可以在更短的時間內進行更多的對局,因此學習速度更快。 + +✅ 做一些研究,了解其他由 AI 玩的遊戲。 + +同樣,我們也可以看到創建“會說話的程序”(可能通過圖靈測試)的方法如何改變: + +* 這類早期程序,例如 [Eliza](https://en.wikipedia.org/wiki/ELIZA),基於非常簡單的語法規則和將輸入句子重新表述為問題。 +* 現代助手,例如 Cortana、Siri 或 Google Assistant,都是混合系統,使用神經網絡將語音轉換為文本並識別我們的意圖,然後使用一些推理或明確的算法執行所需的操作。 +* 未來,我們可能會期待一個完全基於神經網絡的模型能夠自行處理對話。最近的 GPT 和 [Turing-NLG](https://turing.microsoft.com/) 神經網絡系列在這方面表現出色。 + +> 圖片由 Dmitry Soshnikov 提供,[照片](https://unsplash.com/photos/r8LmVbUKgns) 由 [Marina Abrosimova](https://unsplash.com/@abrosimova_marina_foto) 提供,Unsplash + +## 最近的人工智能研究 + +神經網絡研究的巨大增長始於2010年左右,當時大型公共數據集開始變得可用。一個名為 [ImageNet](https://en.wikipedia.org/wiki/ImageNet) 的龐大圖像集合,包含約1400萬張註解圖像,催生了 [ImageNet 大規模視覺識別挑戰賽](https://image-net.org/challenges/LSVRC/)。 + +![ILSVRC 準確率](../../../../lessons/1-Intro/images/ilsvrc.gif) + +> 圖片由 [Dmitry Soshnikov](http://soshnikov.com) 提供 + +2012年,[卷積神經網絡](../4-ComputerVision/07-ConvNets/README.md) 首次被用於圖像分類,導致分類錯誤率顯著下降(從接近30%降至16.4%)。2015年,微軟研究院的 ResNet 架構 [達到人類級別的準確率](https://doi.org/10.1109/ICCV.2015.123)。 + +自此之後,神經網絡在許多任務中展現了非常成功的表現: + +--- + +年份 | 達到人類水平 +-----|-------- +2015 | [圖像分類](https://doi.org/10.1109/ICCV.2015.123) +2016 | [對話式語音識別](https://arxiv.org/abs/1610.05256) +2018 | [自動機器翻譯](https://arxiv.org/abs/1803.05567)(中英翻譯) +2020 | [圖像標註](https://arxiv.org/abs/2009.13682) + +在過去幾年中,我們見證了大型語言模型的巨大成功,例如 BERT 和 GPT-3。這主要是因為有大量的通用文本數據可用,這使得我們能夠訓練模型以捕捉文本的結構和意義,先在通用文本集合上進行預訓練,然後再使這些模型專注於更具體的任務。我們將在本課程稍後部分學習更多關於 [自然語言處理](../5-NLP/README.md) 的內容。 + +## 🚀 挑戰 + +在互聯網上進行探索,判斷在你看來人工智能在哪些領域最有效地被使用。是地圖應用程式、語音轉文字服務還是某款電子遊戲?研究該系統是如何構建的。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/201) + +## 回顧與自學 + +通過閱讀 [這節課](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/2-history-of-ML) 回顧人工智能和機器學習的歷史。從該課程頂部的手繪筆記或本課程中選取一個元素,深入研究以了解其演變背後的文化背景。 + +**作業**: [遊戲開發挑戰](assignment.md) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/1-Intro/assignment.md b/translations/hk/lessons/1-Intro/assignment.md new file mode 100644 index 00000000..455fa87c --- /dev/null +++ b/translations/hk/lessons/1-Intro/assignment.md @@ -0,0 +1,15 @@ + +# 遊戲開發馬拉松 + +遊戲是一個深受人工智能(AI)和機器學習(ML)發展影響的領域。在這次作業中,請撰寫一篇短文,討論一款你喜歡的遊戲,並探討它如何受到AI演變的影響。這款遊戲應該足夠古老,以便能夠展示多種計算處理系統的影響。一個不錯的例子是象棋或圍棋,但也可以考慮像乒乓球或吃豆人這樣的電子遊戲。撰寫一篇文章,分析該遊戲的過去、現在以及AI的未來發展。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/2-Symbolic/README.md b/translations/hk/lessons/2-Symbolic/README.md new file mode 100644 index 00000000..2a23e9f8 --- /dev/null +++ b/translations/hk/lessons/2-Symbolic/README.md @@ -0,0 +1,248 @@ + +# 知識表達與專家系統 + +![符號式人工智能內容摘要](../../../../translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.hk.png) + +> 手繪筆記由 [Tomomi Imura](https://twitter.com/girlie_mac) 提供 + +人工智能的探索基於對知識的追求,目的是像人類一樣理解世界。但要如何實現這一目標呢? + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/102) + +在人工智能的早期,採用自上而下的方法來創建智能系統(在上一課中討論過)非常流行。這種方法的核心思想是將人類的知識提取為機器可讀的形式,然後用它來自動解決問題。這種方法基於兩個重要的概念: + +* 知識表達 +* 推理 + +## 知識表達 + +符號式人工智能中的一個重要概念是**知識**。需要將知識與*信息*或*數據*區分開來。例如,我們可以說書本包含知識,因為我們可以通過學習書本成為專家。然而,書本實際上包含的是*數據*,而我們通過閱讀書本並將這些數據整合到我們的世界模型中,將數據轉化為知識。 + +> ✅ **知識**是我們頭腦中所包含的,代表我們對世界的理解。它是通過主動的**學習**過程獲得的,這個過程將我們接收到的信息片段整合到我們的世界模型中。 + +通常,我們不會嚴格定義知識,而是通過 [DIKW 金字塔](https://en.wikipedia.org/wiki/DIKW_pyramid) 將其與其他相關概念對齊。該金字塔包含以下概念: + +* **數據**是以物理媒介表示的內容,例如書面文字或口語。數據獨立於人類存在,可以在人與人之間傳遞。 +* **信息**是我們在頭腦中對數據的解釋。例如,當我們聽到“電腦”這個詞時,我們對它有一定的理解。 +* **知識**是將信息整合到我們的世界模型中。例如,一旦我們學會了什麼是電腦,我們就會對它的工作原理、價格以及用途有一些想法。這些相互關聯的概念網絡構成了我們的知識。 +* **智慧**是我們對世界理解的更高層次,代表了*元知識*,例如關於如何以及何時使用知識的概念。 + +*圖片 [來自維基百科](https://commons.wikimedia.org/w/index.php?curid=37705247),作者 Longlivetheux - 自製作品,CC BY-SA 4.0* + +因此,**知識表達**的問題在於找到一種有效的方法,將知識以數據的形式表示在計算機中,使其能夠自動使用。這可以被視為一個光譜: + +![知識表達光譜](../../../../translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.hk.png) + +> 圖片由 [Dmitry Soshnikov](http://soshnikov.com) 提供 + +* 在左側,有非常簡單的知識表達方式,計算機可以有效使用。最簡單的是算法式的,當知識以計算機程序的形式表示時。然而,這並不是表達知識的最佳方式,因為它缺乏靈活性。我們頭腦中的知識通常是非算法式的。 +* 在右側,有像自然文本這樣的表達方式。這是最強大的,但無法用於自動推理。 + +> ✅ 想一想你是如何在頭腦中表達知識並將其轉化為筆記的。是否有某種特定的格式能幫助你更好地記住內容? + +## 計算機知識表達的分類 + +我們可以將不同的計算機知識表達方法分為以下幾類: + +* **網絡表達**基於我們頭腦中存在一個相互關聯的概念網絡。我們可以嘗試在計算機中以圖的形式重現這些網絡,這被稱為**語義網絡**。 + +1. **對象-屬性-值三元組**或**屬性-值對**。由於圖可以在計算機中表示為節點和邊的列表,我們可以用三元組的列表來表示語義網絡,包含對象、屬性和值。例如,我們可以為編程語言構建以下三元組: + +對象 | 屬性 | 值 +-----|------|---- +Python | 是 | 無類型語言 +Python | 發明者 | Guido van Rossum +Python | 區塊語法 | 縮排 +無類型語言 | 沒有 | 類型定義 + +> ✅ 想一想三元組如何用於表示其他類型的知識。 + +2. **層次結構表達**強調我們經常在頭腦中創建對象的層次結構。例如,我們知道金絲雀是一種鳥類,所有鳥類都有翅膀。我們還知道金絲雀通常是什麼顏色,以及它們的飛行速度。 + + - **框架表達**基於將每個對象或對象類表示為一個**框架**,框架包含**槽位**。槽位可以有默認值、值限制或存儲的程序,這些程序可以被調用以獲取槽位的值。所有框架形成一個類似於面向對象編程語言中的對象層次結構。 + - **場景**是一種特殊的框架,表示可以隨時間展開的複雜情境。 + +**Python** + +槽位 | 值 | 默認值 | 範圍 | +-----|----|--------|------ +名稱 | Python | | | +是 | 無類型語言 | | | +變量命名 | | 駝峰式命名 | | +程序長度 | | | 5-5000行 | +區塊語法 | 縮排 | | | + +3. **程序性表達**基於通過一系列在特定條件下執行的動作來表示知識。 + - 產生式規則是 if-then 語句,允許我們得出結論。例如,一位醫生可能有一條規則說,**如果**患者有高燒**或**血液檢測中 C 反應蛋白水平高,**那麼**他有炎症。一旦我們遇到其中一個條件,我們就可以得出關於炎症的結論,然後在進一步推理中使用它。 + - 算法可以被視為另一種程序性表達形式,儘管它們幾乎從未直接用於基於知識的系統中。 + +4. **邏輯**最初由亞里士多德提出,作為表示普遍人類知識的一種方式。 + - 謂詞邏輯作為一種數學理論過於豐富而無法計算,因此通常使用它的一些子集,例如 Prolog 中使用的霍恩子句。 + - 描述邏輯是一系列邏輯系統,用於表示和推理對象層次結構以及分佈式知識表達,例如*語義網*。 + +## 專家系統 + +符號式人工智能的一個早期成功案例是所謂的**專家系統**——設計用於在某些有限問題領域中充當專家的計算機系統。它們基於從一位或多位人類專家中提取的**知識庫**,並包含一個在其基礎上進行推理的**推理引擎**。 + +![人類架構](../../../../translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.hk.png) | ![基於知識的系統架構](../../../../translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.hk.png) +----------------------------------|-------------------------------------------- +人類神經系統的簡化結構 | 基於知識的系統的架構 + +專家系統的構建類似於人類的推理系統,其中包含**短期記憶**和**長期記憶**。同樣,在基於知識的系統中,我們區分以下組件: + +* **問題記憶**:包含當前正在解決的問題的知識,例如患者的體溫或血壓,是否有炎症等。這些知識也被稱為**靜態知識**,因為它包含了我們目前對問題的了解的快照——所謂的*問題狀態*。 +* **知識庫**:表示關於問題領域的長期知識。它是從人類專家手動提取的,並且不會在每次諮詢中改變。由於它允許我們從一個問題狀態導航到另一個問題狀態,因此也被稱為**動態知識**。 +* **推理引擎**:協調整個在問題狀態空間中搜索的過程,必要時向用戶提問。它還負責為每個狀態找到應用的正確規則。 + +例如,讓我們考慮以下基於動物物理特徵進行判斷的專家系統: + +![AND-OR 樹](../../../../translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.hk.png) + +> 圖片由 [Dmitry Soshnikov](http://soshnikov.com) 提供 + +此圖稱為**AND-OR 樹**,它是產生式規則集的圖形表示。在從專家提取知識的初期,繪製樹是有用的。為了在計算機中表示知識,使用規則會更方便: + +``` +IF the animal eats meat +OR (animal has sharp teeth + AND animal has claws + AND animal has forward-looking eyes +) +THEN the animal is a carnivore +``` + +你會注意到,規則左側的每個條件和動作本質上都是對象-屬性-值(OAV)三元組。**工作記憶**包含與當前正在解決的問題相對應的 OAV 三元組集合。一個**規則引擎**會尋找條件滿足的規則並應用它們,將另一個三元組添加到工作記憶中。 + +> ✅ 試著畫一個你感興趣主題的 AND-OR 樹! + +### 前向推理與後向推理 + +上述過程稱為**前向推理**。它從工作記憶中可用的初始數據開始,然後執行以下推理循環: + +1. 如果目標屬性已存在於工作記憶中——停止並給出結果 +2. 查找所有條件當前滿足的規則——獲得**衝突集**規則。 +3. 執行**衝突解決**——選擇一條將在此步驟中執行的規則。可能的衝突解決策略包括: + - 選擇知識庫中第一條適用的規則 + - 隨機選擇一條規則 + - 選擇*更具體的*規則,即滿足左側條件最多的規則 +4. 應用選定的規則並將新知識插入問題狀態 +5. 從第 1 步重複。 + +然而,在某些情況下,我們可能希望從對問題的空白知識開始,並通過提問來幫助我們得出結論。例如,在進行醫學診斷時,我們通常不會在診斷患者之前提前進行所有醫學分析。我們更希望在需要做出決定時進行分析。 + +這一過程可以用**後向推理**建模。它由**目標**驅動——即我們希望找到的屬性值: + +1. 選擇所有可以給出目標值的規則(即目標在右側的規則)——形成衝突集 +2. 如果該屬性沒有規則,或者有規則表明我們應該向用戶詢問該值——詢問用戶,否則: +3. 使用衝突解決策略選擇一條規則作為*假設*——我們將嘗試證明它 +4. 對規則左側的所有屬性遞歸重複該過程,嘗試將它們作為目標證明 +5. 如果過程在任何時候失敗——在第 3 步使用另一條規則。 + +> ✅ 在哪些情況下前向推理更合適?後向推理又適用於哪些情況? + +### 實現專家系統 + +專家系統可以使用不同的工具實現: + +* 直接用某種高級編程語言編寫它們。這不是最好的方法,因為基於知識的系統的主要優勢在於知識與推理的分離,並且理論上問題領域的專家應該能夠在不了解推理過程細節的情況下編寫規則。 +* 使用**專家系統外殼**,即專門設計用於通過某種知識表達語言填充知識的系統。 + +## ✍️ 練習:動物推理 + +參見 [Animals.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb),了解實現前向和後向推理專家系統的示例。 +> **注意**:這個例子相對簡單,只是用來展示專家系統的基本概念。當你開始建立這樣的系統時,只有當規則數量達到一定規模(大約200條以上)時,你才會開始注意到一些*智能*行為。在某個階段,規則會變得過於複雜,難以全部記住,而在這個時候,你可能會開始疑惑系統為什麼會做出某些決策。然而,知識型系統的一個重要特徵是,你總是可以*準確解釋*任何決策是如何做出的。 +## 本體論與語義網 + +在20世紀末,有一項倡議旨在利用知識表示來標註互聯網資源,從而能夠找到符合非常特定查詢的資源。這項運動被稱為**語義網**,它依賴於以下幾個概念: + +- 基於**[描述邏輯](https://en.wikipedia.org/wiki/Description_logic)**(DL)的特殊知識表示。它類似於框架知識表示,因為它構建了一個具有屬性的對象層次結構,但它具有形式邏輯語義和推理能力。描述邏輯有一整個家族,它們在表達能力和推理的算法複雜性之間取得平衡。 +- 分佈式知識表示,其中所有概念都由全局 URI 標識符表示,使得能夠創建跨互聯網的知識層次結構。 +- 一系列基於 XML 的知識描述語言:RDF(資源描述框架)、RDFS(RDF 架構)、OWL(本體網絡語言)。 + +語義網中的核心概念是**本體論**。它指的是使用某種形式化知識表示對問題領域進行明確規範。最簡單的本體論可以僅僅是問題領域中的對象層次結構,但更複雜的本體論將包括可用於推理的規則。 + +在語義網中,所有表示都基於三元組。每個對象和每個關係都由 URI 唯一標識。例如,如果我們想陳述這份 AI 課程是由 Dmitry Soshnikov 在 2022 年 1 月 1 日開發的事實,我們可以使用以下三元組: + + + +``` +http://github.com/microsoft/ai-for-beginners http://www.example.com/terms/creation-date “Jan 13, 2007” +http://github.com/microsoft/ai-for-beginners http://purl.org/dc/elements/1.1/creator http://soshnikov.com +``` + +> ✅ 這裡的 `http://www.example.com/terms/creation-date` 和 `http://purl.org/dc/elements/1.1/creator` 是一些公認且普遍接受的 URI,用於表達*創建者*和*創建日期*的概念。 + +在更複雜的情況下,如果我們想定義一個創建者列表,我們可以使用 RDF 中定義的一些數據結構。 + + + +> 上圖由 [Dmitry Soshnikov](http://soshnikov.com) 提供 + +語義網的發展因搜索引擎和自然語言處理技術的成功而有所放緩,這些技術能夠從文本中提取結構化數據。然而,在某些領域,仍然有重要的努力來維護本體論和知識庫。一些值得注意的項目包括: + +* [WikiData](https://wikidata.org/) 是與維基百科相關的機器可讀知識庫集合。大多數數據來自維基百科的*信息框*,即維基百科頁面中的結構化內容片段。你可以使用 SPARQL(一種語義網的特殊查詢語言)[查詢](https://query.wikidata.org/) WikiData。以下是一個顯示人類中最常見眼睛顏色的示例查詢: + +```sparql +#defaultView:BubbleChart +SELECT ?eyeColorLabel (COUNT(?human) AS ?count) +WHERE +{ + ?human wdt:P31 wd:Q5. # human instance-of homo sapiens + ?human wdt:P1340 ?eyeColor. # human eye-color ?eyeColor + SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } +} +GROUP BY ?eyeColorLabel +``` + +* [DBpedia](https://www.dbpedia.org/) 是另一個類似於 WikiData 的努力。 + +> ✅ 如果你想嘗試構建自己的本體論,或打開現有的本體論,有一個很棒的可視化本體編輯器叫 [Protégé](https://protege.stanford.edu/)。下載它,或者在線使用。 + + + +*Web Protégé 編輯器打開了 Romanov 家族的本體。截圖由 Dmitry Soshnikov 提供* + +## ✍️ 練習:家庭本體論 + +參見 [FamilyOntology.ipynb](https://github.com/Ezana135/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb),了解如何使用語義網技術推理家庭關係。我們將採用以常見 GEDCOM 格式表示的家譜和家庭關係的本體論,並為給定的一組個體構建所有家庭關係的圖。 + +## 微軟概念圖 + +在大多數情況下,本體論是由人工精心創建的。然而,也可以從非結構化數據中**挖掘**本體論,例如從自然語言文本中。 + +微軟研究院曾進行過這樣的一次嘗試,並產生了 [Microsoft Concept Graph](https://blogs.microsoft.com/ai/microsoft-researchers-release-graph-that-helps-machines-conceptualize/?WT.mc_id=academic-77998-cacaste)。 + +這是一個使用 `is-a` 繼承關係將實體分組的大型集合。它可以回答像「什麼是微軟?」這樣的問題——答案可能是「一家公司,概率為 0.87;一個品牌,概率為 0.75」。 + +該圖可以通過 REST API 獲取,也可以作為一個大型可下載文本文件,列出所有實體對。 + +## ✍️ 練習:概念圖 + +嘗試 [MSConceptGraph.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) 筆記本,看看我們如何使用微軟概念圖將新聞文章分組到幾個類別中。 + +## 結論 + +如今,AI 通常被認為是*機器學習*或*神經網絡*的同義詞。然而,人類也表現出明確的推理能力,而這是目前神經網絡無法處理的。在現實世界的項目中,明確的推理仍然被用來執行需要解釋或能夠以可控方式修改系統行為的任務。 + +## 🚀 挑戰 + +在與本課程相關的家庭本體論筆記本中,有機會嘗試其他家庭關係。試著發現家譜中人物之間的新聯繫。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/202) + +## 回顧與自學 + +在互聯網上進行一些研究,了解人類嘗試量化和編碼知識的領域。看看布魯姆分類法,回顧歷史,了解人類如何試圖理解他們的世界。探索林奈斯創建生物分類法的工作,觀察德米特里·門捷列夫如何創建描述和分組化學元素的方法。你還能找到哪些有趣的例子? + +**作業**:[構建一個本體論](assignment.md) + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/2-Symbolic/assignment.md b/translations/hk/lessons/2-Symbolic/assignment.md new file mode 100644 index 00000000..5dc02311 --- /dev/null +++ b/translations/hk/lessons/2-Symbolic/assignment.md @@ -0,0 +1,15 @@ + +# 建立本體 + +建立知識庫的核心在於為某個主題建立一個模型,並對該模型中的事實進行分類。選擇一個主題,例如一個人、一個地方或一件事物,然後為該主題建立一個模型。運用本課中描述的一些技術和模型構建策略。一個例子可以是建立一個客廳的本體,包括家具、燈光等等。客廳與廚房有什麼不同?與浴室呢?你怎麼知道這是客廳而不是飯廳?使用 [Protégé](https://protege.stanford.edu/) 來建立你的本體。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/3-NeuralNetworks/03-Perceptron/README.md b/translations/hk/lessons/3-NeuralNetworks/03-Perceptron/README.md new file mode 100644 index 00000000..79cff4bd --- /dev/null +++ b/translations/hk/lessons/3-NeuralNetworks/03-Perceptron/README.md @@ -0,0 +1,104 @@ + +# 神經網絡簡介:感知器 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/103) + +1957年,康奈爾航空實驗室的Frank Rosenblatt首次嘗試實現類似現代神經網絡的模型。他設計了一個名為"Mark-1"的硬件系統,用於識別基本幾何圖形,例如三角形、正方形和圓形。 + +| | | +|--------------|-----------| +|Frank Rosenblatt | The Mark 1 Perceptron| + +> 圖片來源:[維基百科](https://en.wikipedia.org/wiki/Perceptron) + +輸入圖像由20x20的光電陣列表示,因此神經網絡有400個輸入和一個二進制輸出。簡單的網絡包含一個神經元,也稱為**閾值邏輯單元**。神經網絡的權重類似於電位器,在訓練階段需要手動調整。 + +> ✅ 電位器是一種可以調節電路阻抗的設備。 + +> 《紐約時報》當時對感知器的描述是:*一種電子計算機的胚胎,[海軍]期望它能夠行走、說話、看見、書寫、自我複製並意識到自己的存在。* + +## 感知器模型 + +假設我們的模型有N個特徵,那麼輸入向量將是一個大小為N的向量。感知器是一種**二元分類**模型,即它可以區分兩類輸入數據。我們假設對於每個輸入向量x,感知器的輸出將是+1或-1,取決於其所屬的類別。輸出通過以下公式計算: + +y(x) = f(wTx) + +其中f是一個階梯激活函數 + + + + +## 訓練感知器 + +為了訓練感知器,我們需要找到一個權重向量w,使得大部分數據能夠被正確分類,即使**錯誤**最小化。這個錯誤E通過**感知器準則**定義如下: + +E(w) = -∑wTxiti + +其中: + +* 求和僅針對那些分類錯誤的訓練數據點i +* xi是輸入數據,ti對應於負例和正例分別為-1或+1。 + +這個準則被視為權重w的函數,我們需要對其進行最小化。通常使用一種稱為**梯度下降**的方法,我們從某個初始權重w(0)開始,然後在每一步根據以下公式更新權重: + +w(t+1) = w(t) - η∇E(w) + +其中η是所謂的**學習率**,∇E(w)表示E的**梯度**。計算梯度後,我們得到: + +w(t+1) = w(t) + ∑ηxiti + +Python中的算法如下: + +```python +def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): + + weights = [0,0,0] # Initialize weights (almost randomly :) + + for i in range(num_iterations): + pos = random.choice(positive_examples) + neg = random.choice(negative_examples) + + z = np.dot(pos, weights) # compute perceptron output + if z < 0: # positive example classified as negative + weights = weights + eta*weights.shape + + z = np.dot(neg, weights) + if z >= 0: # negative example classified as positive + weights = weights - eta*weights.shape + + return weights +``` + +## 結論 + +在本課中,你學習了感知器,它是一種二元分類模型,以及如何通過使用權重向量來訓練它。 + +## 🚀 挑戰 + +如果你想嘗試自己構建感知器,可以參考[Microsoft Learn上的這個實驗](https://docs.microsoft.com/en-us/azure/machine-learning/component-reference/two-class-averaged-perceptron?WT.mc_id=academic-77998-cacaste),它使用了[Azure ML設計器](https://docs.microsoft.com/en-us/azure/machine-learning/concept-designer?WT.mc_id=academic-77998-cacaste)。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/203) + +## 回顧與自學 + +要了解如何使用感知器解決玩具問題以及實際問題,並繼續學習,請參考[感知器](../../../../../lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb)筆記本。 + +這裡還有一篇有趣的[關於感知器的文章](https://towardsdatascience.com/what-is-a-perceptron-basics-of-neural-networks-c4cfea20c590)。 + +## [作業](lab/README.md) + +在本課中,我們實現了一個用於二元分類任務的感知器,並使用它來區分兩個手寫數字。在本實驗中,你需要完全解決數字分類問題,即判斷給定圖像最可能對應的數字。 + +* [指引](lab/README.md) +* [筆記本](../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md b/translations/hk/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md new file mode 100644 index 00000000..c068837d --- /dev/null +++ b/translations/hk/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md @@ -0,0 +1,31 @@ + +# 使用感知器進行多類別分類 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +使用我們在本課中為 MNIST 手寫數字進行二元分類所開發的程式碼,創建一個多類別分類器,能夠識別任何數字。計算訓練集和測試集的分類準確率,並輸出混淆矩陣。 + +## 提示 + +1. 對於每個數字,創建一個二元分類器的數據集,將其設為「該數字 vs. 其他所有數字」 +1. 訓練 10 個不同的感知器進行二元分類(每個數字一個感知器) +1. 定義一個函數來分類輸入的數字 + +> **提示**:如果我們將所有 10 個感知器的權重組合成一個矩陣,我們應該能夠通過一次矩陣乘法將所有 10 個感知器應用到輸入數字上。最有可能的數字可以通過對輸出應用 `argmax` 操作來找到。 + +## 起始筆記本 + +通過打開 [PerceptronMultiClass.ipynb](../../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) 開始實驗。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/3-NeuralNetworks/04-OwnFramework/README.md b/translations/hk/lessons/3-NeuralNetworks/04-OwnFramework/README.md new file mode 100644 index 00000000..66e11157 --- /dev/null +++ b/translations/hk/lessons/3-NeuralNetworks/04-OwnFramework/README.md @@ -0,0 +1,98 @@ + +# 神經網絡簡介:多層感知器 + +在上一節中,你已經學習了最簡單的神經網絡模型——單層感知器,一種線性二分類模型。 + +在本節中,我們將擴展這個模型,形成一個更靈活的框架,使我們能夠: + +* 執行**多分類**,而不僅僅是二分類 +* 解決**回歸問題**,而不僅僅是分類問題 +* 區分非線性可分的類別 + +我們還將在 Python 中開發自己的模塊化框架,讓我們能夠構建不同的神經網絡架構。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/104) + +## 機器學習的形式化 + +讓我們從形式化機器學習問題開始。假設我們有一個訓練數據集 **X** 和標籤 **Y**,我們需要構建一個模型 *f*,以便能夠做出最準確的預測。預測的質量由**損失函數** ℒ 來衡量。以下是常用的損失函數: + +* 對於回歸問題,當我們需要預測一個數值時,可以使用**絕對誤差** ∑i|f(x(i))-y(i)|,或**平方誤差** ∑i(f(x(i))-y(i))2 +* 對於分類問題,我們使用**0-1損失**(本質上與模型的**準確率**相同),或**邏輯損失**。 + +對於單層感知器,函數 *f* 被定義為線性函數 *f(x)=wx+b*(其中 *w* 是權重矩陣,*x* 是輸入特徵向量,*b* 是偏置向量)。對於不同的神經網絡架構,這個函數可以採用更複雜的形式。 + +> 在分類的情況下,通常希望網絡輸出是對應類別的概率。為了將任意數字轉換為概率(例如,對輸出進行正規化),我們通常使用**softmax**函數 σ,函數 *f* 變為 *f(x)=σ(wx+b)* + +在上述 *f* 的定義中,*w* 和 *b* 被稱為**參數** θ=⟨*w,b*⟩。給定數據集 ⟨**X**,**Y**⟩,我們可以計算整個數據集上的總誤差,作為參數 θ 的函數。 + +> ✅ **神經網絡訓練的目標是通過調整參數 θ 來最小化誤差** + +## 梯度下降優化 + +有一種著名的函數優化方法叫做**梯度下降**。其核心思想是,我們可以計算損失函數對參數的導數(在多維情況下稱為**梯度**),並以使誤差減少的方式調整參數。這可以形式化為以下步驟: + +* 用一些隨機值初始化參數 w(0), b(0) +* 重複以下步驟多次: + - w(i+1) = w(i)-η∂ℒ/∂w + - b(i+1) = b(i)-η∂ℒ/∂b + +在訓練過程中,優化步驟應基於整個數據集進行計算(記住損失是通過所有訓練樣本的總和計算的)。然而,在實際操作中,我們會取數據集的小部分,稱為**小批量**,並基於數據子集計算梯度。由於每次隨機選取子集,這種方法被稱為**隨機梯度下降**(SGD)。 + +## 多層感知器與反向傳播 + +如上所述,單層網絡能夠分類線性可分的類別。為了構建更豐富的模型,我們可以將網絡的多層結合起來。數學上,這意味著函數 *f* 將具有更複雜的形式,並通過多個步驟計算: +* z1=w1x+b1 +* z2=w2α(z1)+b2 +* f = σ(z2) + +其中,α 是**非線性激活函數**,σ 是 softmax 函數,參數 θ=<*w1,b1,w2,b2*>。 + +梯度下降算法保持不變,但計算梯度會更加困難。根據鏈式求導法則,我們可以計算導數如下: + +* ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2) +* ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1) + +> ✅ 鏈式求導法則用於計算損失函數對參數的導數。 + +注意,所有這些表達式的最左部分是相同的,因此我們可以有效地從損失函數開始計算導數,並沿著計算圖“向後”進行。因此,多層感知器的訓練方法被稱為**反向傳播**,或“backprop”。 + +計算圖 + +> TODO: 圖片來源 + +> ✅ 我們將在筆記本示例中更詳細地介紹反向傳播。 + +## 結論 + +在本課中,我們構建了自己的神經網絡庫,並使用它完成了一個簡單的二維分類任務。 + +## 🚀 挑戰 + +在配套的筆記本中,你將實現自己的框架,用於構建和訓練多層感知器。你將能夠詳細了解現代神經網絡的運作方式。 + +前往 [OwnFramework](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) 筆記本並完成其中的內容。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/204) + +## 回顧與自學 + +反向傳播是人工智能和機器學習中常用的算法,值得[深入研究](https://wikipedia.org/wiki/Backpropagation)。 + +## [作業](lab/README.md) + +在本次實驗中,你需要使用本課中構建的框架來解決 MNIST 手寫數字分類問題。 + +* [說明](lab/README.md) +* [筆記本](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md b/translations/hk/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md new file mode 100644 index 00000000..fb1ab32a --- /dev/null +++ b/translations/hk/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md @@ -0,0 +1,32 @@ + +# 使用我們自己的框架進行 MNIST 分類 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗課題。 + +## 任務 + +使用 1 層、2 層和 3 層的感知器解決 MNIST 手寫數字分類問題。使用我們在課堂中開發的神經網絡框架。 + +## 啟動筆記本 + +通過打開 [MyFW_MNIST.ipynb](../../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb) 開始實驗。 + +## 問題 + +完成此實驗後,嘗試回答以下問題: + +- 層間的激活函數是否會影響網絡性能? +- 這個任務是否需要 2 層或 3 層的網絡? +- 在訓練網絡時是否遇到任何問題?尤其是當層數增加時。 +- 網絡的權重在訓練過程中如何變化?你可以繪製權重的最大絕對值與 epoch 的關係圖來理解它們之間的關聯。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/3-NeuralNetworks/05-Frameworks/README.md b/translations/hk/lessons/3-NeuralNetworks/05-Frameworks/README.md new file mode 100644 index 00000000..26ca883a --- /dev/null +++ b/translations/hk/lessons/3-NeuralNetworks/05-Frameworks/README.md @@ -0,0 +1,132 @@ + +# 神經網絡框架 + +正如我們已經學習過的,要有效地訓練神經網絡,我們需要做到以下兩點: + +* 操作張量,例如進行乘法、加法,並計算一些函數如 sigmoid 或 softmax +* 計算所有表達式的梯度,以便進行梯度下降優化 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/105) + +雖然 `numpy` 庫可以完成第一部分,但我們需要某種機制來計算梯度。在[我們的框架](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb)中,我們在上一節中開發的框架需要手動在 `backward` 方法中編寫所有導數函數,該方法負責反向傳播。理想情況下,一個框架應該讓我們能夠計算我們定義的*任何表達式*的梯度。 + +另一個重要的事情是能夠在 GPU 或其他專用計算單元(如 [TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit))上執行計算。深度神經網絡的訓練需要*大量*的計算,能夠在 GPU 上並行化這些計算非常重要。 + +> ✅ 「並行化」這個術語是指將計算分配到多個設備上。 + +目前,最受歡迎的兩個神經網絡框架是:[TensorFlow](http://TensorFlow.org) 和 [PyTorch](https://pytorch.org/)。這兩者都提供了低階 API,用於在 CPU 和 GPU 上操作張量。在低階 API 之上,還有高階 API,分別稱為 [Keras](https://keras.io/) 和 [PyTorch Lightning](https://pytorchlightning.ai/)。 + +低階 API | [TensorFlow](http://TensorFlow.org) | [PyTorch](https://pytorch.org/) +---------|-------------------------------------|-------------------------------- +高階 API | [Keras](https://keras.io/) | [PyTorch Lightning](https://pytorchlightning.ai/) + +**低階 API** 在這兩個框架中允許構建所謂的**計算圖**。該圖定義了如何使用給定的輸入參數計算輸出(通常是損失函數),並且可以在 GPU 上執行計算(如果可用)。這些框架提供了區分計算圖和計算梯度的功能,這些梯度可以用於優化模型參數。 + +**高階 API** 將神經網絡視為**層的序列**,使得構建大多數神經網絡變得更加簡單。訓練模型通常需要準備數據,然後調用 `fit` 函數來完成工作。 + +高階 API 允許快速構建典型的神經網絡,而不需要擔心太多細節。同時,低階 API 提供了對訓練過程的更多控制,因此在研究新型神經網絡架構時經常使用。 + +還需要理解的是,這兩種 API 可以一起使用。例如,你可以使用低階 API 開發自己的網絡層架構,然後將其用於由高階 API 構建和訓練的更大網絡中。或者,你可以使用高階 API 將網絡定義為層的序列,然後使用自己的低階訓練循環進行優化。這兩種 API 使用相同的基本概念,並且設計為能夠很好地協同工作。 + +## 學習 + +在本課程中,我們為 PyTorch 和 TensorFlow 提供了大部分內容。你可以選擇自己喜歡的框架,並只學習相應的筆記本。如果你不確定選擇哪個框架,可以在網上查閱一些關於 **PyTorch vs. TensorFlow** 的討論。你也可以查看這兩個框架以更好地理解它們。 + +在可能的情況下,我們將使用高階 API 以簡化學習。然而,我們認為從基礎理解神經網絡的工作原理非常重要,因此在開始時,我們將從低階 API 和張量開始學習。然而,如果你想快速入門,不想花太多時間學習這些細節,可以跳過這些部分,直接進入高階 API 的筆記本。 + +## ✍️ 練習:框架 + +在以下筆記本中繼續學習: + +低階 API | [TensorFlow+Keras 筆記本](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [PyTorch](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) +---------|-------------------------------------|-------------------------------- +高階 API | [Keras](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) | *PyTorch Lightning* + +掌握框架後,讓我們回顧一下過擬合的概念。 + +# 過擬合 + +過擬合是機器學習中一個極其重要的概念,理解它非常關鍵! + +考慮以下近似 5 個點的問題(圖中的 `x` 表示點): + +![線性模型](../../../../../translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.hk.jpg) | ![過擬合模型](../../../../../translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.hk.jpg) +-------------------------|-------------------------- +**線性模型,2 個參數** | **非線性模型,7 個參數** +訓練誤差 = 5.3 | 訓練誤差 = 0 +驗證誤差 = 5.1 | 驗證誤差 = 20 + +* 左圖中,我們看到了一條良好的直線近似。由於參數數量適當,模型正確地捕捉了點的分佈規律。 +* 右圖中,模型過於強大。由於我們只有 5 個點,而模型有 7 個參數,它可以調整到通過所有點,使得訓練誤差為 0。然而,這阻止了模型理解數據背後的正確模式,因此驗證誤差非常高。 + +在模型的複雜度(參數數量)和訓練樣本數量之間找到正確的平衡非常重要。 + +## 為什麼會發生過擬合 + + * 訓練數據不足 + * 模型過於強大 + * 輸入數據中噪聲過多 + +## 如何檢測過擬合 + +從上圖可以看出,過擬合可以通過非常低的訓練誤差和非常高的驗證誤差來檢測。通常在訓練過程中,我們會看到訓練和驗證誤差都開始下降,但某個時候驗證誤差可能停止下降並開始上升。這將是過擬合的跡象,表明我們應該停止訓練(或者至少保存模型的快照)。 + +![過擬合](../../../../../translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.hk.png) + +## 如何防止過擬合 + +如果你發現過擬合發生,可以採取以下措施: + + * 增加訓練數據量 + * 降低模型的複雜度 + * 使用一些[正則化技術](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md),例如 [Dropout](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md#Dropout),我們稍後會討論。 + +## 過擬合與偏差-方差權衡 + +過擬合實際上是統計學中一個更通用問題的案例,稱為[偏差-方差權衡](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff)。如果我們考慮模型中可能的誤差來源,可以看到兩種類型的誤差: + +* **偏差誤差** 是由於我們的算法無法正確捕捉訓練數據之間的關係而引起的。這可能是因為我們的模型不夠強大(**欠擬合**)。 +* **方差誤差** 是由於模型近似了輸入數據中的噪聲而不是有意義的關係(**過擬合**)。 + +在訓練過程中,偏差誤差會減少(因為模型學會了近似數據),而方差誤差會增加。為了防止過擬合,重要的是在檢測到過擬合時手動停止訓練,或者通過引入正則化自動停止訓練。 + +## 總結 + +在本課中,你學習了兩個最受歡迎的 AI 框架 TensorFlow 和 PyTorch 的不同 API。此外,你還學習了一個非常重要的主題——過擬合。 + +## 🚀 挑戰 + +在配套的筆記本中,你會發現一些「任務」在底部;請完成這些筆記本中的任務。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/205) + +## 回顧與自學 + +研究以下主題: + +- TensorFlow +- PyTorch +- 過擬合 + +問問自己以下問題: + +- TensorFlow 和 PyTorch 有什麼區別? +- 過擬合和欠擬合有什麼區別? + +## [作業](lab/README.md) + +在這個實驗中,你需要使用 PyTorch 或 TensorFlow 解決兩個分類問題,分別使用單層和多層全連接網絡。 + +* [說明](lab/README.md) +* [筆記本](../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md b/translations/hk/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md new file mode 100644 index 00000000..ab72dd01 --- /dev/null +++ b/translations/hk/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md @@ -0,0 +1,28 @@ + +# 使用 PyTorch/TensorFlow 進行分類 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +使用 PyTorch 或 TensorFlow 解決兩個分類問題,分別使用單層和多層全連接網絡: + +1. **[鳶尾花分類](https://en.wikipedia.org/wiki/Iris_flower_data_set)** 問題 - 這是一個以表格輸入數據為基礎的問題範例,可以用傳統機器學習方法處理。你的目標是根據 4 個數值參數將鳶尾花分類為 3 個類別。 +2. **MNIST** 手寫數字分類問題,我們之前已經見過。 + +嘗試不同的網絡架構,以獲得最佳的準確率。 + +## 起始 Notebook + +通過打開 [LabFrameworks.ipynb](../../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb) 開始實驗。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/3-NeuralNetworks/README.md b/translations/hk/lessons/3-NeuralNetworks/README.md new file mode 100644 index 00000000..6b4e402a --- /dev/null +++ b/translations/hk/lessons/3-NeuralNetworks/README.md @@ -0,0 +1,60 @@ + +# 神經網絡簡介 + +![神經網絡內容摘要的手繪圖](../../../../translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.hk.png) + +如我們在介紹中所討論的,實現智能的一種方法是訓練一個**電腦模型**或**人工大腦**。自20世紀中期以來,研究人員嘗試了不同的數學模型,直到最近這個方向被證明是非常成功的。這些模仿大腦的數學模型被稱為**神經網絡**。 + +> 有時神經網絡被稱為*人工神經網絡*(Artificial Neural Networks,ANNs),以表明我們討論的是模型,而不是實際的神經元網絡。 + +## 機器學習 + +神經網絡屬於一個更大的學科,稱為**機器學習**,其目標是利用數據訓練能夠解決問題的電腦模型。機器學習是人工智能的一大部分,但我們在這個課程中不會涵蓋傳統的機器學習。 + +> 請參閱我們的獨立課程 **[機器學習入門](http://github.com/microsoft/ml-for-beginners)**,了解更多關於傳統機器學習的內容。 + +在機器學習中,我們假設有一些例子數據集 **X** 和相應的輸出值 **Y**。例子通常是由**特徵**組成的 N 維向量,而輸出被稱為**標籤**。 + +我們將探討兩種最常見的機器學習問題: + +* **分類**,我們需要將輸入對象分類到兩個或多個類別中。 +* **回歸**,我們需要為每個輸入樣本預測一個數值。 + +> 當以張量表示輸入和輸出時,輸入數據集是一個大小為 M×N 的矩陣,其中 M 是樣本數量,N 是特徵數量。輸出標籤 **Y** 是大小為 M 的向量。 + +在這個課程中,我們將只專注於神經網絡模型。 + +## 神經元的模型 + +從生物學中我們知道,我們的大腦由神經細胞組成,每個神經細胞有多個“輸入”(軸突)和一個輸出(樹突)。軸突和樹突可以傳導電信號,而軸突和樹突之間的連接可以表現出不同程度的導電性(由神經遞質控制)。 + +![神經元模型](../../../../translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.hk.jpg) | ![人工神經元模型](../../../../translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.hk.png) +----|---- +真實神經元 *([圖片](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg) 來自維基百科)* | 人工神經元 *(作者提供的圖片)* + +因此,神經元的最簡單數學模型包含幾個輸入 X1, ..., XN 和一個輸出 Y,以及一系列權重 W1, ..., WN。輸出計算公式為: + +Y = f\left(\sum_{i=1}^N X_iW_i\right) + +其中 f 是某種非線性的**激活函數**。 + +> 早期的神經元模型在 Warren McCullock 和 Walter Pitts 於 1943 年的經典論文 [A logical calculus of the ideas immanent in nervous activity](https://www.cs.cmu.edu/~./epxing/Class/10715/reading/McCulloch.and.Pitts.pdf) 中被描述。Donald Hebb 在他的書 "[The Organization of Behavior: A Neuropsychological Theory](https://books.google.com/books?id=VNetYrB8EBoC)" 中提出了這些網絡的訓練方法。 + +## 本章內容 + +在本章中,我們將學習以下內容: +* [感知器](03-Perceptron/README.md),一種最早的用於二分類的神經網絡模型 +* [多層網絡](04-OwnFramework/README.md),以及配套的筆記本 [如何構建我們自己的框架](../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) +* [神經網絡框架](05-Frameworks/README.md),包括以下筆記本:[PyTorch](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) 和 [Keras/Tensorflow](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) +* [過擬合](../../../../lessons/3-NeuralNetworks/05-Frameworks) + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/06-IntroCV/README.md b/translations/hk/lessons/4-ComputerVision/06-IntroCV/README.md new file mode 100644 index 00000000..5b673713 --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/06-IntroCV/README.md @@ -0,0 +1,121 @@ + +# 電腦視覺簡介 + +[電腦視覺](https://wikipedia.org/wiki/Computer_vision) 是一個學科,其目標是讓電腦能夠對數碼圖像進行高層次的理解。這是一個相當廣泛的定義,因為*理解*可以意味著很多不同的事情,包括在圖片中找到物體(**物體檢測**)、理解發生了什麼(**事件檢測**)、用文字描述圖片,或者重建3D場景。還有一些與人類圖像相關的特殊任務,例如年齡和情緒估算、人臉檢測與識別,以及3D姿態估算等。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/106) + +電腦視覺最簡單的任務之一是**圖像分類**。 + +電腦視覺通常被認為是人工智能的一個分支。如今,大多數電腦視覺任務都是通過神經網絡解決的。我們將在本節中學習更多關於用於電腦視覺的特殊神經網絡類型,[卷積神經網絡](../07-ConvNets/README.md)。 + +然而,在將圖像傳遞給神經網絡之前,在許多情況下,使用一些算法技術來增強圖像是有意義的。 + +以下是一些可用於圖像處理的 Python 庫: + +* **[imageio](https://imageio.readthedocs.io/en/stable/)** 可用於讀取/寫入不同的圖像格式。它還支持 ffmpeg,一個將視頻幀轉換為圖像的有用工具。 +* **[Pillow](https://pillow.readthedocs.io/en/stable/index.html)**(也稱為 PIL)功能更強大,還支持一些圖像操作,例如變形、調整調色板等。 +* **[OpenCV](https://opencv.org/)** 是一個用 C++ 編寫的強大圖像處理庫,已成為圖像處理的*事實標準*。它有一個方便的 Python 接口。 +* **[dlib](http://dlib.net/)** 是一個 C++ 庫,實現了許多機器學習算法,包括一些電腦視覺算法。它也有一個 Python 接口,可用於如人臉和面部特徵點檢測等挑戰性任務。 + +## OpenCV + +[OpenCV](https://opencv.org/) 被認為是圖像處理的*事實標準*。它包含許多有用的算法,這些算法是用 C++ 實現的。你也可以從 Python 調用 OpenCV。 + +學習 OpenCV 的一個好地方是 [這個 Learn OpenCV 課程](https://learnopencv.com/getting-started-with-opencv/)。在我們的課程中,我們的目標不是學習 OpenCV,而是向你展示一些可以使用它的例子以及如何使用。 + +### 加載圖像 + +在 Python 中,圖像可以方便地表示為 NumPy 陣列。例如,大小為 320x200 像素的灰度圖像將存儲在一個 200x320 的陣列中,而相同尺寸的彩色圖像將具有 200x320x3 的形狀(對應3個顏色通道)。要加載圖像,可以使用以下代碼: + +```python +import cv2 +import matplotlib.pyplot as plt + +im = cv2.imread('image.jpeg') +plt.imshow(im) +``` + +傳統上,OpenCV 使用 BGR(藍-綠-紅)編碼來表示彩色圖像,而其他 Python 工具則使用更傳統的 RGB(紅-綠-藍)。為了使圖像顯示正確,你需要將其轉換為 RGB 色彩空間,可以通過在 NumPy 陣列中交換維度,或者調用 OpenCV 函數來完成: + +```python +im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB) +``` + +同樣的 `cvtColor` 函數還可以用於執行其他色彩空間轉換,例如將圖像轉換為灰度或 HSV(色調-飽和度-亮度)色彩空間。 + +你還可以使用 OpenCV 逐幀加載視頻——在練習 [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) 中提供了一個示例。 + +### 圖像處理 + +在將圖像傳遞給神經網絡之前,你可能需要應用幾個預處理步驟。OpenCV 可以執行許多操作,包括: + +* 使用 `im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)` **調整圖像大小** +* 使用 `im = cv2.medianBlur(im,3)` 或 `im = cv2.GaussianBlur(im, (3,3), 0)` **模糊圖像** +* 通過 NumPy 陣列操作更改圖像的**亮度和對比度**,具體方法參見 [這篇 Stackoverflow 筆記](https://stackoverflow.com/questions/39308030/how-do-i-increase-the-contrast-of-an-image-in-python-opencv)。 +* 使用 [閾值處理](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html),通過調用 `cv2.threshold`/`cv2.adaptiveThreshold` 函數,這通常比調整亮度或對比度更可取。 +* 對圖像應用不同的[變換](https://docs.opencv.org/4.5.5/da/d6e/tutorial_py_geometric_transformations.html): + - **[仿射變換](https://docs.opencv.org/4.5.5/d4/d61/tutorial_warp_affine.html)** 如果你需要對圖像進行旋轉、調整大小和傾斜,並且知道圖像中三個點的源位置和目標位置,仿射變換會保持平行線的平行性。 + - **[透視變換](https://medium.com/analytics-vidhya/opencv-perspective-transformation-9edffefb2143)** 當你知道圖像中四個點的源位置和目標位置時非常有用。例如,如果你用智能手機從某個角度拍攝了一張矩形文件的照片,並希望將其轉換為矩形圖像。 +* 使用 **[光流](https://docs.opencv.org/4.5.5/d4/dee/tutorial_optical_flow.html)** 理解圖像中的運動。 + +## 電腦視覺的應用示例 + +在我們的 [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) 中,我們提供了一些電腦視覺用於執行特定任務的示例: + +* **預處理盲文書籍的照片**。我們專注於如何使用閾值處理、特徵檢測、透視變換和 NumPy 操作來分離單個盲文符號,以便神經網絡進一步分類。 + +![盲文圖像](../../../../../translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.hk.jpeg) | ![盲文圖像預處理後](../../../../../translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.hk.png) | ![盲文符號](../../../../../translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.hk.png) +----|-----|----- + +> 圖片來自 [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) + +* **使用幀差檢測視頻中的運動**。如果攝像機是固定的,那麼來自攝像機的幀應該彼此非常相似。由於幀被表示為陣列,只需對兩個連續幀的陣列進行減法運算,我們就可以得到像素差異,靜態幀的差異應該很小,而當圖像中有顯著運動時,差異會變大。 + +![視頻幀和幀差的圖像](../../../../../translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.hk.png) + +> 圖片來自 [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) + +* **使用光流檢測運動**。[光流](https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html) 允許我們理解視頻幀中每個像素的運動方式。有兩種類型的光流: + + - **密集光流** 計算顯示每個像素移動方向的向量場 + - **稀疏光流** 基於圖像中的一些顯著特徵(例如邊緣),並從幀到幀構建它們的軌跡。 + +![光流圖像](../../../../../translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.hk.png) + +> 圖片來自 [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) + +## ✍️ 示例筆記本:OpenCV [試試 OpenCV 的實際應用](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) + +讓我們通過探索 [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) 來進行一些 OpenCV 的實驗。 + +## 結論 + +有時,像運動檢測或指尖檢測這樣相對複雜的任務可以純粹通過電腦視覺來解決。因此,了解電腦視覺的基本技術以及像 OpenCV 這樣的庫能做什麼是非常有幫助的。 + +## 🚀 挑戰 + +觀看 [這段視頻](https://docs.microsoft.com/shows/ai-show/ai-show--2021-opencv-ai-competition--grand-prize-winners--cortic-tigers--episode-32?WT.mc_id=academic-77998-cacaste),了解 Cortic Tigers 項目以及他們如何通過機器人構建基於積木的解決方案來普及電腦視覺任務。研究其他類似的項目,了解它們如何幫助新學習者進入這個領域。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/206) + +## 回顧與自學 + +閱讀更多關於光流的內容 [在這篇精彩的教程中](https://learnopencv.com/optical-flow-in-opencv/)。 + +## [作業](lab/README.md) + +在這個實驗中,你將拍攝一段包含簡單手勢的視頻,你的目標是使用光流提取上下左右的運動。 + +手掌運動幀 + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/06-IntroCV/lab/README.md b/translations/hk/lessons/4-ComputerVision/06-IntroCV/lab/README.md new file mode 100644 index 00000000..3483dd44 --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/06-IntroCV/lab/README.md @@ -0,0 +1,31 @@ + +# 使用光流檢測移動 + +來自 [AI for Beginners Curriculum](https://aka.ms/ai-beginners) 的實驗作業。 + +## 任務 + +請參考[這段影片](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4),影片中一個人的手掌在穩定的背景上向左/右/上/下移動。 + +**你的目標**是使用光流技術來判斷影片中哪些部分包含向上/向下/向左/向右的移動。 + +**進階目標**是實際追蹤手掌/手指的移動,使用膚色檢測,如[這篇部落格文章](https://dev.to/amarlearning/finger-detection-and-tracking-using-opencv-and-python-586m)或[這裡](http://www.benmeline.com/finger-tracking-with-opencv-and-python/)所描述。 + +## 起始筆記本 + +開啟 [MovementDetection.ipynb](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb) 開始實驗。 + +## 收穫 + +有時候,像移動檢測或指尖檢測這樣相對複雜的任務,可以純粹透過電腦視覺來解決。因此,了解像 OpenCV 這樣的函式庫能做什麼是非常有幫助的。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md b/translations/hk/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md new file mode 100644 index 00000000..ad619379 --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md @@ -0,0 +1,73 @@ + +# 著名的 CNN 架構 + +### VGG-16 + +VGG-16 是一個在 2014 年 ImageNet top-5 分類中達到 92.7% 準確率的網絡。它的層結構如下: + +![ImageNet Layers](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.hk.jpg) + +如你所見,VGG 採用了傳統的金字塔架構,即一系列的卷積-池化層。 + +![ImageNet Pyramid](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.hk.jpg) + +> 圖片來源:[Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) + +### ResNet + +ResNet 是由 Microsoft Research 在 2015 年提出的一系列模型。ResNet 的核心概念是使用 **殘差塊**: + + + +> 圖片來源:[這篇論文](https://arxiv.org/pdf/1512.03385.pdf) + +使用身份直通的原因是讓我們的層預測 **前一層結果與殘差塊輸出之間的差異**,因此得名 *殘差*。這些塊更容易訓練,並且可以構建包含數百個這些塊的網絡(最常見的變體包括 ResNet-52、ResNet-101 和 ResNet-152)。 + +你也可以將這個網絡理解為能夠根據數據集調整其複雜度。最初,在開始訓練網絡時,權重值較小,大部分信號通過身份直通層。隨著訓練的進行,權重變得更大,網絡參數的重要性增強,網絡會調整以適應所需的表達能力,從而正確分類訓練圖像。 + +### Google Inception + +Google Inception 架構將這個概念更進一步,將每個網絡層構建為多條不同路徑的組合: + + + +> 圖片來源:[Researchgate](https://www.researchgate.net/figure/Inception-module-with-dimension-reductions-left-and-schema-for-Inception-ResNet-v1_fig2_355547454) + +在這裡,我們需要強調 1x1 卷積的作用,因為一開始它似乎沒有意義。為什麼需要用 1x1 濾波器掃描圖像?然而,你需要記住卷積濾波器也會處理多個深度通道(最初是 RGB 顏色,在後續層中是不同濾波器的通道),而 1x1 卷積用於通過不同的可訓練權重將這些輸入通道混合在一起。它也可以被視為在通道維度上的降維(池化)。 + +這裡有一篇[關於 1x1 卷積的好文章](https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578),以及[原始論文](https://arxiv.org/pdf/1312.4400.pdf)。 + +### MobileNet + +MobileNet 是一系列縮小尺寸的模型,適合移動設備使用。如果你的資源有限,並且可以接受稍微降低的準確率,可以使用它們。其核心概念是所謂的 **深度可分離卷積**,它允許通過空間卷積和深度通道上的 1x1 卷積的組合來表示卷積濾波器。這大大減少了參數數量,使網絡尺寸更小,也更容易用較少的數據進行訓練。 + +這裡有一篇[關於 MobileNet 的好文章](https://medium.com/analytics-vidhya/image-classification-with-mobilenet-cc6fbb2cd470)。 + +## 結論 + +在這一單元中,你已經學習了計算機視覺神經網絡的主要概念——卷積網絡。實際應用的架構,例如圖像分類、物體檢測,甚至圖像生成網絡,都是基於 CNN,只是層數更多,並且加入了一些額外的訓練技巧。 + +## 🚀 挑戰 + +在附帶的筆記本中,底部有關於如何獲得更高準確率的筆記。進行一些實驗,看看你是否能達到更高的準確率。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/207) + +## 回顧與自學 + +雖然 CNN 最常用於計算機視覺任務,但它們通常也適合提取固定大小的模式。例如,如果我們處理聲音,我們可能也希望使用 CNN 在音頻信號中尋找一些特定模式——在這種情況下,濾波器將是 1 維的(這種 CNN 被稱為 1D-CNN)。此外,有時也會使用 3D-CNN 來提取多維空間中的特徵,例如視頻中發生的某些事件——CNN 可以捕捉特徵隨時間變化的某些模式。進行一些回顧和自學,了解 CNN 還可以完成哪些其他任務。 + +## [作業](lab/README.md) + +在這次實驗中,你的任務是分類不同的貓和狗品種。這些圖像比 MNIST 數據集更複雜,尺寸更高,並且類別超過 10 種。 + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/07-ConvNets/README.md b/translations/hk/lessons/4-ComputerVision/07-ConvNets/README.md new file mode 100644 index 00000000..a1516505 --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/07-ConvNets/README.md @@ -0,0 +1,67 @@ + +# 卷積神經網絡 + +我們之前已經看到,神經網絡在處理圖像方面表現得相當不錯,即使是一層的感知機也能以合理的準確率識別 MNIST 數據集中的手寫數字。然而,MNIST 數據集非常特殊,所有的數字都被集中在圖像的中心,這使得任務變得更簡單。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/107) + +在現實生活中,我們希望能夠識別圖片中的物體,而不需要考慮它們在圖像中的具體位置。計算機視覺與一般的分類任務不同,因為當我們試圖在圖片中找到某個特定物體時,我們是在掃描圖像,尋找一些特定的**模式**及其組合。例如,當尋找一隻貓時,我們可能會先尋找水平線條,這些線條可能形成貓鬚,然後某些貓鬚的組合可以告訴我們這確實是一張貓的圖片。某些模式的相對位置和存在是重要的,而不是它們在圖像中的精確位置。 + +為了提取模式,我們將使用**卷積濾波器**的概念。如你所知,圖像可以用一個二維矩陣或帶有色彩深度的三維張量來表示。應用濾波器意味著我們使用一個相對較小的**濾波核**矩陣,並對原始圖像中的每個像素與其鄰近點計算加權平均值。我們可以將其視為一個小窗口在整個圖像上滑動,並根據濾波核矩陣中的權重對所有像素進行平均。 + +![垂直邊緣濾波器](../../../../../translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.hk.png) | ![水平邊緣濾波器](../../../../../translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.hk.png) +----|---- + +> 圖片來源:Dmitry Soshnikov + +例如,如果我們對 MNIST 數字應用 3x3 的垂直邊緣和水平邊緣濾波器,我們可以在原始圖像中有垂直和水平邊緣的地方得到高亮(例如高值)。因此,這兩個濾波器可以用來“尋找”邊緣。同樣,我們可以設計不同的濾波器來尋找其他低層次的模式: + +> [Leung-Malik 濾波器組](https://www.robots.ox.ac.uk/~vgg/research/texclass/filters.html)的圖片 + +然而,雖然我們可以手動設計濾波器來提取某些模式,但我們也可以設計網絡,使其能夠自動學習這些模式。這正是 CNN 背後的主要思想之一。 + +## CNN 的主要思想 + +CNN 的工作原理基於以下幾個重要的概念: + +* 卷積濾波器可以提取模式 +* 我們可以設計網絡,使濾波器能夠自動訓練 +* 我們可以使用相同的方法來發現高層次特徵中的模式,而不僅僅是原始圖像中的模式。因此,CNN 的特徵提取是基於特徵的層次結構,從低層次的像素組合開始,到更高層次的圖像部分組合。 + +![層次特徵提取](../../../../../translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.hk.png) + +> 圖片來源:[Hislop-Lynch 的論文](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d),基於[他們的研究](https://dl.acm.org/doi/abs/10.1145/1553374.1553453) + +## ✍️ 練習:卷積神經網絡 + +讓我們繼續探索卷積神經網絡的工作原理,以及如何通過相關的筆記本實現可訓練的濾波器: + +* [卷積神經網絡 - PyTorch](../../../../../lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) +* [卷積神經網絡 - TensorFlow](../../../../../lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) + +## 金字塔結構 + +大多數用於圖像處理的 CNN 都遵循所謂的金字塔結構。應用於原始圖像的第一層卷積通常具有相對較少的濾波器(8-16 個),這些濾波器對應於不同的像素組合,例如水平/垂直線條或筆劃。在下一層,我們減少網絡的空間維度,並增加濾波器的數量,這對應於更多簡單特徵的可能組合。隨著每一層的進展,當我們接近最終分類器時,圖像的空間維度減小,而濾波器的數量增加。 + +例如,讓我們來看看 VGG-16 的結構,這是一個在 2014 年 ImageNet 的 top-5 分類中達到 92.7% 準確率的網絡: + +![ImageNet 層](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.hk.jpg) + +![ImageNet 金字塔](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.hk.jpg) + +> 圖片來源:[Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) + +## 最知名的 CNN 結構 + +[繼續學習最知名的 CNN 結構](CNN_Architectures.md) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/hk/lessons/4-ComputerVision/07-ConvNets/lab/README.md new file mode 100644 index 00000000..4d7c172d --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -0,0 +1,43 @@ + +# 寵物面孔分類 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗課題。 + +## 任務 + +假設你需要開發一個寵物托管應用程式,用來記錄所有的寵物。這個應用程式的一個重要功能是能夠根據照片自動辨識寵物的品種。這可以通過神經網絡成功實現。 + +你需要訓練一個卷積神經網絡,使用 **Pet Faces** 數據集來分類不同品種的貓和狗。 + +## 數據集 + +我們將使用 **Pet Faces** 數據集,該數據集源自 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集。它包含 35 種不同品種的狗和貓。 + +![我們將處理的數據集](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.hk.png) + +要下載數據集,請使用以下代碼片段: + +```python +!wget https://mslearntensorflowlp.blob.core.windows.net/data/petfaces.tar.gz +!tar xfz petfaces.tar.gz +!rm petfaces.tar.gz +``` + +## 啟動筆記本 + +通過打開 [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) 開始實驗。 + +## 收穫 + +你已經成功解決了一個相對複雜的圖像分類問題!儘管有很多類別,你仍然能夠獲得合理的準確率!此外,測量 top-k 準確率也是有意義的,因為有些類別即使對人類來說也不容易區分。 + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/08-TransferLearning/README.md b/translations/hk/lessons/4-ComputerVision/08-TransferLearning/README.md new file mode 100644 index 00000000..285fa242 --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/08-TransferLearning/README.md @@ -0,0 +1,90 @@ + +# 預訓練網絡與遷移學習 + +訓練 CNN 需要花費大量時間,並且需要大量數據。然而,大部分時間都花在學習網絡用於從圖像中提取模式的最佳低層過濾器上。一個自然的問題是:我們是否可以使用在一個數據集上訓練好的神經網絡,並將其適配於分類不同的圖像,而不需要完整的訓練過程? + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/108) + +這種方法被稱為**遷移學習**,因為我們將某些知識從一個神經網絡模型轉移到另一個模型。在遷移學習中,我們通常從一個預訓練模型開始,該模型已經在一些大型圖像數據集(例如 **ImageNet**)上進行了訓練。這些模型已經能夠很好地從通用圖像中提取不同的特徵,在許多情況下,只需在這些提取的特徵之上構建一個分類器就能取得不錯的結果。 + +> ✅ 遷移學習這個術語在其他學術領域(例如教育學)中也能找到。它指的是將一個領域的知識應用到另一個領域的過程。 + +## 預訓練模型作為特徵提取器 + +我們在上一節中討論的卷積網絡包含多層,每一層都旨在從圖像中提取某些特徵,從低層次的像素組合(例如水平/垂直線條或筆劃)開始,到更高層次的特徵組合,對應於像火焰的眼睛這樣的東西。如果我們在足夠大的通用和多樣化的圖像數據集上訓練 CNN,網絡應該能夠學會提取這些常見特徵。 + +Keras 和 PyTorch 都包含了方便的函數,可以輕鬆加載一些常見架構的預訓練神經網絡權重,其中大多數是在 ImageNet 圖像上訓練的。最常用的模型在之前課程的 [CNN 架構](../07-ConvNets/CNN_Architectures.md) 頁面中有描述。特別是,你可能會考慮使用以下模型之一: + +* **VGG-16/VGG-19** 是相對簡單的模型,但仍能提供不錯的準確性。通常使用 VGG 作為首次嘗試是一個不錯的選擇,可以看看遷移學習的效果如何。 +* **ResNet** 是由微軟研究院於 2015 年提出的一系列模型。它們有更多的層,因此需要更多的資源。 +* **MobileNet** 是一系列尺寸較小的模型,適合移動設備。如果資源有限並且可以接受稍微降低的準確性,可以使用它們。 + +以下是 VGG-16 網絡從一張貓的圖片中提取的示例特徵: + +![VGG-16 提取的特徵](../../../../../translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.hk.png) + +## 貓與狗數據集 + +在這個例子中,我們將使用 [貓與狗數據集](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste),這非常接近現實生活中的圖像分類場景。 + +## ✍️ 練習:遷移學習 + +讓我們在相應的筆記本中看看遷移學習的實際應用: + +* [遷移學習 - PyTorch](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) +* [遷移學習 - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb) + +## 可視化對抗性貓 + +預訓練的神經網絡在其「大腦」中包含了不同的模式,包括**理想貓**(以及理想狗、理想斑馬等)的概念。能夠以某種方式**可視化這些圖像**會很有趣。然而,這並不簡單,因為模式分佈在網絡權重的各個部分,並且以層次結構組織。 + +我們可以採取的一種方法是從一張隨機圖像開始,然後嘗試使用**梯度下降優化**技術調整該圖像,使得網絡認為它是一隻貓。 + +![圖像優化循環](../../../../../translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.hk.png) + +然而,如果我們這樣做,我們會得到一些非常類似於隨機噪聲的東西。這是因為*有很多方法可以讓網絡認為輸入圖像是一隻貓*,包括一些在視覺上沒有意義的方式。雖然這些圖像包含了許多典型的貓的模式,但並沒有任何約束使它們在視覺上具有辨識度。 + +為了改善結果,我們可以在損失函數中添加另一個項,稱為**變異損失**。這是一種衡量圖像相鄰像素相似程度的指標。最小化變異損失可以使圖像更平滑,並消除噪聲——從而顯示出更具視覺吸引力的模式。以下是一些這樣的「理想」圖像的例子,它們被高概率分類為貓和斑馬: + +![理想貓](../../../../../translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.hk.png) | ![理想斑馬](../../../../../translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.hk.png) +-----|----- +*理想貓* | *理想斑馬* + +類似的方法可以用於對神經網絡進行所謂的**對抗性攻擊**。假設我們想要欺騙神經網絡,讓一隻狗看起來像一隻貓。如果我們拿一張被網絡識別為狗的狗的圖片,然後稍微調整它,使用梯度下降優化,直到網絡開始將其分類為貓: + +![狗的圖片](../../../../../translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.hk.png) | ![被分類為貓的狗的圖片](../../../../../translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.hk.png) +-----|----- +*原始狗的圖片* | *被分類為貓的狗的圖片* + +查看以下筆記本中的代碼以重現上述結果: + +* [理想與對抗性貓 - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/AdversarialCat_TF.ipynb) + +## 總結 + +通過遷移學習,你可以快速組建一個自定義對象分類任務的分類器,並實現高準確性。你可以看到,我們現在解決的更複雜的任務需要更高的計算能力,並且無法輕易在 CPU 上完成。在下一單元中,我們將嘗試使用更輕量級的實現來訓練相同的模型,使用較低的計算資源,並僅稍微降低準確性。 + +## 🚀 挑戰 + +在附帶的筆記本中,底部有關於遷移知識如何在某些相似的訓練數據(例如新的動物類型)上效果最佳的筆記。嘗試使用完全新類型的圖像進行實驗,看看你的遷移知識模型表現得有多好或多差。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) + +## 回顧與自學 + +閱讀 [TrainingTricks.md](TrainingTricks.md),以加深對其他訓練模型方法的了解。 + +## [作業](lab/README.md) + +在這個實驗中,我們將使用真實的 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集,其中包含 35 種貓和狗的品種,並構建一個遷移學習分類器。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md b/translations/hk/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md new file mode 100644 index 00000000..826127a5 --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md @@ -0,0 +1,117 @@ + +# 深度學習訓練技巧 + +隨著神經網絡變得越來越深,其訓練過程也變得越來越具挑戰性。一個主要問題是所謂的[梯度消失](https://en.wikipedia.org/wiki/Vanishing_gradient_problem)或[梯度爆炸](https://deepai.org/machine-learning-glossary-and-terms/exploding-gradient-problem#:~:text=Exploding%20gradients%20are%20a%20problem,updates%20are%20small%20and%20controlled)。[這篇文章](https://towardsdatascience.com/the-vanishing-exploding-gradient-problem-in-deep-neural-networks-191358470c11)對這些問題進行了很好的介紹。 + +為了讓深層網絡的訓練更高效,可以採用一些技巧。 + +## 保持數值在合理範圍內 + +為了讓數值計算更穩定,我們需要確保神經網絡中的所有數值都在合理的範圍內,通常是 [-1..1] 或 [0..1]。這並不是一個非常嚴格的要求,但浮點數計算的特性使得不同量級的數值無法準確地一起操作。例如,如果我們將 10-10 和 1010 相加,結果很可能是 1010,因為較小的數值會被“轉換”到與較大數值相同的量級,從而導致尾數丟失。 + +大多數激活函數在 [-1..1] 範圍內具有非線性特性,因此將所有輸入數據縮放到 [-1..1] 或 [0..1] 範圍內是有意義的。 + +## 初始權重初始化 + +理想情況下,我們希望數值在通過網絡層後仍然保持在相同的範圍內。因此,初始化權重時需要以某種方式保留數值的分佈。 + +正態分佈 **N(0,1)** 並不是一個好主意,因為如果我們有 *n* 個輸入,輸出的標準差將是 *n*,數值很可能會跳出 [0..1] 範圍。 + +以下是常用的初始化方法: + +- 均勻分佈 -- `uniform` +- **N(0,1/n)** -- `gaussian` +- **N(0,1/√n_in)** 保證對於均值為零且標準差為 1 的輸入,輸出仍然保持相同的均值和標準差 +- **N(0,√2/(n_in+n_out))** -- 所謂的 **Xavier 初始化** (`glorot`),它有助於在前向和後向傳播中保持信號在合理範圍內 + +## 批量正規化 + +即使有了適當的權重初始化,訓練過程中權重仍可能變得過大或過小,從而使信號超出合理範圍。我們可以通過使用某些**正規化**技術將信號拉回合理範圍。雖然有多種正規化技術(如權重正規化、層正規化),但最常用的是批量正規化。 + +**批量正規化**的核心思想是考慮小批量中的所有數值,並基於這些數值進行正規化(即減去均值並除以標準差)。它被實現為一個網絡層,在應用權重後但在激活函數之前執行此正規化。結果是,我們通常可以看到更高的最終準確率和更快的訓練速度。 + +這是批量正規化的[原始論文](https://arxiv.org/pdf/1502.03167.pdf)、[維基百科上的解釋](https://en.wikipedia.org/wiki/Batch_normalization)以及[一篇很好的入門博客文章](https://towardsdatascience.com/batch-normalization-in-3-levels-of-understanding-14c2da90a338)(還有[俄文版](https://habrahabr.ru/post/309302/))。 + +## Dropout + +**Dropout** 是一種有趣的技術,它在訓練過程中隨機移除一定比例的神經元。它被實現為一個層,具有一個參數(要移除的神經元百分比,通常為 10%-50%),在訓練過程中,它會將輸入向量的隨機元素設為零,然後再傳遞到下一層。 + +雖然這聽起來像是一個奇怪的想法,但你可以在 [`Dropout.ipynb`](../../../../../lessons/4-ComputerVision/08-TransferLearning/Dropout.ipynb) 筆記本中看到 Dropout 對訓練 MNIST 數字分類器的效果。它加速了訓練,並使我們能夠在更少的訓練輪次中實現更高的準確率。 + +這種效果可以用幾種方式解釋: + +- 它可以被認為是對模型的一種隨機衝擊,將優化從局部最小值中拉出 +- 它可以被認為是*隱式模型平均化*,因為我們可以說在 Dropout 過程中,我們訓練了稍微不同的模型 + +> *有人說,當一個醉酒的人試圖學習某些東西時,與清醒的人相比,他第二天早上會記得更清楚,因為一個有些神經元失效的大腦會更努力地適應以抓住意義。我們自己從未測試過這是否屬實。* + +## 防止過擬合 + +深度學習的一個非常重要的方面是能夠防止[過擬合](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)。雖然使用非常強大的神經網絡模型可能很有吸引力,但我們應該始終平衡模型參數的數量與訓練樣本的數量。 + +> 確保你理解我們之前介紹的[過擬合](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)概念! + +有幾種方法可以防止過擬合: + +- 提前停止 -- 持續監控驗證集上的錯誤,當驗證錯誤開始增加時停止訓練。 +- 顯式權重衰減 / 正則化 -- 在損失函數中添加一個對權重絕對值的額外懲罰,防止模型產生非常不穩定的結果 +- 模型平均化 -- 訓練多個模型,然後對結果進行平均。這有助於最小化方差。 +- Dropout(隱式模型平均化) + +## 優化器 / 訓練算法 + +訓練的另一個重要方面是選擇好的訓練算法。雖然經典的**梯度下降**是一個合理的選擇,但它有時可能太慢,或者導致其他問題。 + +在深度學習中,我們使用**隨機梯度下降**(SGD),這是一種應用於隨機選擇的小批量數據的梯度下降方法。權重的調整公式如下: + +wt+1 = wt - η∇ℒ + +### 動量 + +在**動量 SGD** 中,我們保留了前幾步的部分梯度。這類似於當我們帶著慣性移動時,受到一個不同方向的衝擊,我們的軌跡不會立即改變,而是保留了一部分原來的運動。這裡我們引入另一個向量 v 來表示*速度*: + +- vt+1 = γ vt - η∇ℒ +- wt+1 = wt + vt+1 + +這裡參數 γ 表示我們考慮慣性的程度:γ=0 對應於經典 SGD;γ=1 是純粹的運動方程。 + +### Adam、Adagrad 等 + +由於在每一層中,我們將信號乘以某個矩陣 Wi,根據 ||Wi||,梯度可能會減小接近於 0,或者無限增大。這正是梯度爆炸/消失問題的本質。 + +解決這個問題的一種方法是僅在公式中使用梯度的方向,而忽略其絕對值,即: + +wt+1 = wt - η(∇ℒ/||∇ℒ||),其中 ||∇ℒ|| = √∑(∇ℒ)2 + +這種算法被稱為 **Adagrad**。其他使用相同思想的算法包括:**RMSProp**、**Adam** + +> **Adam** 被認為是許多應用中非常高效的算法,因此如果你不確定該使用哪一種,選擇 Adam。 + +### 梯度裁剪 + +梯度裁剪是上述思想的擴展。當 ||∇ℒ|| ≤ θ 時,我們在權重優化中考慮原始梯度;而當 ||∇ℒ|| > θ 時,我們將梯度除以其範數。這裡 θ 是一個參數,在大多數情況下我們可以取 θ=1 或 θ=10。 + +### 學習率衰減 + +訓練的成功通常取決於學習率參數 η。可以合理地假設,較大的 η 值會導致更快的訓練,這是我們通常在訓練初期所希望的,而較小的 η 值則允許我們對網絡進行微調。因此,在大多數情況下,我們希望在訓練過程中逐漸減小 η。 + +這可以通過在每個訓練輪次後將 η 乘以某個數字(例如 0.98)來實現,或者使用更複雜的**學習率調度**。 + +## 不同的網絡架構 + +為你的問題選擇合適的網絡架構可能很棘手。通常,我們會選擇一個已被證明適用於我們特定任務(或類似任務)的架構。這裡有一個[神經網絡架構的良好概述](https://www.topbots.com/a-brief-history-of-neural-network-architectures/),適用於計算機視覺。 + +> 選擇一個對於我們擁有的訓練樣本數量來說足夠強大的架構非常重要。選擇過於強大的模型可能會導致[過擬合](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)。 + +另一個不錯的方法是使用一個能自動調整到所需複雜度的架構。在某種程度上,**ResNet** 架構和 **Inception** 是自我調整的。[更多關於計算機視覺架構的信息](../07-ConvNets/CNN_Architectures.md) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/08-TransferLearning/lab/README.md b/translations/hk/lessons/4-ComputerVision/08-TransferLearning/lab/README.md new file mode 100644 index 00000000..53603639 --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/08-TransferLearning/lab/README.md @@ -0,0 +1,39 @@ + +# 使用遷移學習對牛津寵物進行分類 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +想像一下,你需要為一間寵物托兒所開發一個應用程式,用來記錄所有的寵物。這個應用程式的一個很棒的功能就是能夠從照片中自動識別寵物的品種。在這次作業中,我們將使用遷移學習來對 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集中的真實寵物圖片進行分類。 + +## 數據集 + +我們將使用原始的 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集,該數據集包含 35 種不同品種的狗和貓。 + +要下載數據集,請使用以下程式碼片段: + +```python +!wget https://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz +!tar xfz images.tar.gz +!rm images.tar.gz +``` + +## 開始筆記本 + +通過打開 [OxfordPets.ipynb](../../../../../../lessons/4-ComputerVision/08-TransferLearning/lab/OxfordPets.ipynb) 開始這次實驗。 + +## 重點 + +遷移學習和預訓練網絡使我們能夠相對輕鬆地解決現實世界中的圖像分類問題。然而,預訓練網絡在處理類似類型的圖像時效果較好,如果我們開始分類非常不同的圖像(例如醫學圖像),結果可能會差得多。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/09-Autoencoders/README.md b/translations/hk/lessons/4-ComputerVision/09-Autoencoders/README.md new file mode 100644 index 00000000..4e6773a9 --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/09-Autoencoders/README.md @@ -0,0 +1,109 @@ + +# 自動編碼器 + +在訓練 CNN 時,其中一個問題是我們需要大量的標籤數據。在圖像分類的情況下,我們需要將圖像分成不同的類別,這是一項手動工作。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/109) + +然而,我們可能希望使用原始(未標籤)數據來訓練 CNN 特徵提取器,這被稱為**自監督學習**。取代標籤,我們將使用訓練圖像作為網絡的輸入和輸出。**自動編碼器**的主要概念是,我們將有一個**編碼器網絡**,將輸入圖像轉換為某種**潛在空間**(通常只是某種較小尺寸的向量),然後是**解碼器網絡**,其目標是重建原始圖像。 + +> ✅ [自動編碼器](https://wikipedia.org/wiki/Autoencoder) 是“一種用於學習未標籤數據的高效編碼的人工神經網絡。” + +由於我們訓練自動編碼器以捕捉原始圖像中的盡可能多的信息以進行準確重建,網絡嘗試找到最佳的**嵌入**來捕捉輸入圖像的含義。 + +![自動編碼器示意圖](../../../../../translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.hk.jpg) + +> 圖片來源:[Keras 博客](https://blog.keras.io/building-autoencoders-in-keras.html) + +## 使用自動編碼器的場景 + +雖然重建原始圖像本身似乎沒有太大用處,但有一些場景自動編碼器特別有用: + +* **降低圖像的維度以進行可視化**或**訓練圖像嵌入**。通常自動編碼器比 PCA 效果更好,因為它考慮了圖像的空間特性和層次特徵。 +* **去噪**,即去除圖像中的噪點。由於噪點攜帶了大量無用信息,自動編碼器無法將所有噪點壓縮到相對較小的潛在空間,因此它只捕捉圖像的重要部分。在訓練去噪器時,我們以原始圖像開始,並使用人工添加噪點的圖像作為自動編碼器的輸入。 +* **超分辨率**,提高圖像分辨率。我們以高分辨率圖像開始,並使用低分辨率圖像作為自動編碼器的輸入。 +* **生成模型**。一旦我們訓練了自動編碼器,解碼器部分可以用來從隨機潛在向量開始創建新物件。 + +## 變分自動編碼器 (VAE) + +傳統的自動編碼器以某種方式降低輸入數據的維度,找出輸入圖像的重要特徵。然而,潛在向量通常沒有太多意義。換句話說,以 MNIST 數據集為例,找出哪些數字對應於不同的潛在向量並不容易,因為相近的潛在向量不一定對應於相同的數字。 + +另一方面,為了訓練*生成*模型,了解潛在空間會更好。這一想法引導我們到**變分自動編碼器** (VAE)。 + +VAE 是一種自動編碼器,它學習預測潛在參數的*統計分佈*,即所謂的**潛在分佈**。例如,我們可能希望潛在向量以某些均值 zmean 和標準差 zsigma(均值和標準差均為某種維度 d 的向量)呈正態分佈。VAE 的編碼器學習預測這些參數,然後解碼器從該分佈中取隨機向量以重建物件。 + +總結如下: + +* 從輸入向量,我們預測 `z_mean` 和 `z_log_sigma`(不是直接預測標準差,而是預測其對數) +* 我們從分佈 N(zmean,exp(zlog_sigma)) 中抽樣一個向量 `sample` +* 解碼器嘗試使用 `sample` 作為輸入向量解碼原始圖像 + + + +> 圖片來源:[這篇博客文章](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) 作者 Isaak Dykeman + +變分自動編碼器使用一個由兩部分組成的複雜損失函數: + +* **重建損失**是顯示重建圖像與目標圖像有多接近的損失函數(可以是均方誤差,或 MSE)。它與普通自動編碼器的損失函數相同。 +* **KL 損失**,確保潛在變量分佈接近正態分佈。它基於 [Kullback-Leibler 散度](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained) 的概念——一種估算兩個統計分佈相似程度的度量。 + +VAE 的一個重要優勢是它使我們能夠相對容易地生成新圖像,因為我們知道從哪個分佈中抽樣潛在向量。例如,如果我們在 MNIST 上使用 2D 潛在向量訓練 VAE,我們可以改變潛在向量的組件以獲得不同的數字: + +vaemnist + +> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com) + +觀察圖像如何相互融合,當我們開始從潛在參數空間的不同部分獲取潛在向量時。我們還可以在 2D 中可視化此空間: + +vaemnist cluster + +> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com) + +## ✍️ 練習:自動編碼器 + +在以下筆記本中了解更多關於自動編碼器的內容: + +* [TensorFlow 中的自動編碼器](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) +* [PyTorch 中的自動編碼器](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) + +## 自動編碼器的特性 + +* **數據特定** - 它們僅適用於訓練過的圖像類型。例如,如果我們在花卉上訓練超分辨率網絡,它在肖像上效果不佳。這是因為網絡可以通過從訓練數據集中學到的特徵中提取細節來生成高分辨率圖像。 +* **有損** - 重建的圖像與原始圖像不同。損失的性質由訓練期間使用的*損失函數*定義。 +* 適用於**未標籤數據** + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/209) + +## 結論 + +在本課中,您學習了 AI 科學家可用的各種自動編碼器類型。您學習了如何構建它們,以及如何使用它們重建圖像。您還學習了 VAE 以及如何使用它生成新圖像。 + +## 🚀 挑戰 + +在本課中,您學習了如何使用自動編碼器處理圖像。但它們也可以用於音樂!查看 Magenta 項目的 [MusicVAE](https://magenta.tensorflow.org/music-vae) 項目,它使用自動編碼器學習重建音樂。使用此庫進行一些[實驗](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb),看看您能創造出什麼。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) + +## 回顧與自學 + +作為參考,您可以在以下資源中閱讀更多關於自動編碼器的內容: + +* [在 Keras 中構建自動編碼器](https://blog.keras.io/building-autoencoders-in-keras.html) +* [NeuroHive 的博客文章](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/) +* [變分自動編碼器解析](https://kvfrans.com/variational-autoencoders-explained/) +* [條件變分自動編碼器](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) + +## 作業 + +在 [使用 TensorFlow 的筆記本](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) 的末尾,您會找到一個“任務”——將其作為您的作業。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/10-GANs/README.md b/translations/hk/lessons/4-ComputerVision/10-GANs/README.md new file mode 100644 index 00000000..9b6071b4 --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/10-GANs/README.md @@ -0,0 +1,110 @@ + +# 生成對抗網絡 + +在上一節中,我們學習了**生成模型**:能夠生成與訓練數據集中的圖像相似的新圖像的模型。VAE 是生成模型的一個不錯的例子。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/110) + +然而,如果我們嘗試生成一些真正有意義的東西,比如一幅解析度合理的畫作,使用 VAE 進行訓練時可能會發現收斂效果不佳。針對這種情況,我們需要了解另一種專門針對生成模型的架構——**生成對抗網絡**,簡稱 GAN。 + +GAN 的主要思想是使用兩個神經網絡相互對抗進行訓練: + + + +> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com) + +> ✅ 一些術語: +> * **生成器**是一個網絡,它接收一些隨機向量並生成圖像作為結果。 +> * **判別器**是一個網絡,它接收一張圖像並判斷該圖像是真實的(來自訓練數據集)還是由生成器生成的。它本質上是一個圖像分類器。 + +### 判別器 + +判別器的架構與普通的圖像分類網絡並無不同。最簡單的情況下,它可以是一個全連接分類器,但更常見的是使用[卷積網絡](../07-ConvNets/README.md)。 + +> ✅ 基於卷積網絡的 GAN 被稱為 [DCGAN](https://arxiv.org/pdf/1511.06434.pdf) + +一個 CNN 判別器由以下層組成:幾個卷積+池化層(空間尺寸逐漸減小),以及一個或多個全連接層以獲得“特徵向量”,最後是一個二元分類器。 + +> ✅ “池化”在此上下文中是一種減少圖像尺寸的技術。“池化層通過將一層中神經元集群的輸出合併為下一層中的單個神經元來減少數據的維度。” - [來源](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers) + +### 生成器 + +生成器稍微複雜一些。可以將其視為判別器的反向版本。從一個潛在向量(代替特徵向量)開始,它使用一個全連接層將其轉換為所需的尺寸/形狀,接著是反卷積+升尺度。這類似於[自編碼器](../09-Autoencoders/README.md)的*解碼器*部分。 + +> ✅ 由於卷積層是通過線性濾波器遍歷圖像來實現的,反卷積本質上與卷積類似,可以使用相同的層邏輯來實現。 + + + +> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com) + +### 訓練 GAN + +GAN 被稱為**對抗性**網絡,因為生成器和判別器之間存在持續的競爭。在這種競爭中,生成器和判別器都會改進,從而使網絡學習生成越來越好的圖像。 + +訓練分為兩個階段: + +* **訓練判別器**。這個任務相對簡單:生成器生成一批圖像,標記為 0(代表假圖像),並從輸入數據集中取一批圖像(標記為 1,真實圖像)。我們獲得一些*判別器損失*,然後進行反向傳播。 +* **訓練生成器**。這稍微複雜一些,因為我們無法直接知道生成器的期望輸出。我們將整個 GAN 網絡(由生成器和判別器組成)輸入一些隨機向量,期望結果為 1(對應真實圖像)。接著我們凍結判別器的參數(此步驟不希望判別器被訓練),然後進行反向傳播。 + +在此過程中,生成器和判別器的損失通常不會顯著下降。在理想情況下,它們應該呈現振盪,表明兩個網絡都在改進其性能。 + +## ✍️ 練習:GANs + +* [TensorFlow/Keras 的 GAN Notebook](../../../../../lessons/4-ComputerVision/10-GANs/GANTF.ipynb) +* [PyTorch 的 GAN Notebook](../../../../../lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) + +### GAN 訓練的問題 + +GAN 以訓練困難著稱。以下是一些常見問題: + +* **模式崩塌**。這指的是生成器學會生成一個成功欺騙判別器的圖像,而不是生成多樣化的圖像。 +* **對超參數的敏感性**。有時 GAN 可能完全不收斂,然後突然因學習率的降低而收斂。 +* **保持生成器和判別器的平衡**。在許多情況下,判別器的損失可能會迅速降至零,導致生成器無法進一步訓練。為了解決這個問題,我們可以嘗試為生成器和判別器設置不同的學習率,或者在判別器損失已經很低時跳過判別器的訓練。 +* **高解析度訓練**。與自編碼器的問題類似,重建太多層的卷積網絡會導致圖像出現瑕疵。通常通過所謂的**漸進式增長**來解決此問題,先用低解析度圖像訓練幾層,然後“解鎖”或添加更多層。另一種解決方案是在層之間添加額外的連接並同時訓練多個解析度——詳情請參閱這篇[多尺度梯度 GANs 論文](https://arxiv.org/abs/1903.06048)。 + +## 風格遷移 + +GAN 是生成藝術圖像的絕佳方式。另一種有趣的技術是所謂的**風格遷移**,它將一張**內容圖像**重新繪製成不同的風格,應用來自**風格圖像**的濾鏡。 + +其工作原理如下: +* 我們從一張隨機噪聲圖像開始(或者從內容圖像開始,但為了便於理解,從隨機噪聲開始更容易) +* 我們的目標是創建一張既接近內容圖像又接近風格圖像的圖像。這由兩個損失函數決定: + - **內容損失**基於 CNN 從當前圖像和內容圖像的某些層提取的特徵計算 + - **風格損失**通過使用 Gram 矩陣以巧妙的方式在當前圖像和風格圖像之間計算(更多細節請參閱[示例 Notebook](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)) +* 為了使圖像更平滑並去除噪聲,我們還引入**變異損失**,它計算相鄰像素之間的平均距離 +* 主要的優化循環使用梯度下降(或其他優化算法)調整當前圖像以最小化總損失,總損失是所有三個損失的加權和。 + +## ✍️ 示例:[風格遷移](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/210) + +## 結論 + +在本課中,你學習了 GANs 及其訓練方法。你還了解了這類神經網絡可能面臨的特殊挑戰,以及一些解決這些挑戰的策略。 + +## 🚀 挑戰 + +使用你的圖像運行[風格遷移 Notebook](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)。 + +## 回顧與自學 + +作為參考,請閱讀以下資源以了解更多關於 GANs 的內容: + +* Marco Pasini,[我一年訓練 GANs 的 10 個教訓](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628) +* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN),一個值得考慮的 GAN 架構 +* [在 Azure ML 上使用 GAN 創建生成藝術](https://soshnikov.com/scienceart/creating-generative-art-using-gan-on-azureml/) + +## 作業 + +重新訪問本課程相關的兩個 Notebook 中的一個,並使用自己的圖像重新訓練 GAN。你能創造出什麼? + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業的人類翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/11-ObjectDetection/README.md b/translations/hk/lessons/4-ComputerVision/11-ObjectDetection/README.md new file mode 100644 index 00000000..71b48c5d --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/11-ObjectDetection/README.md @@ -0,0 +1,187 @@ + +# 物件偵測 + +我們之前處理的影像分類模型,會接收一張圖片並產生一個分類結果,例如在 MNIST 問題中分類為「數字」的類別。然而,在許多情況下,我們不僅僅想知道圖片中有什麼物件,還希望能夠確定它們的精確位置。這正是**物件偵測**的目的。 + +## [課前小測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/111) + +![物件偵測](../../../../../translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.hk.png) + +> 圖片來源:[YOLO v2 網站](https://pjreddie.com/darknet/yolov2/) + +## 一個簡單的物件偵測方法 + +假設我們想在一張圖片中找到一隻貓,一個非常簡單的物件偵測方法如下: + +1. 將圖片分割成多個小區塊。 +2. 對每個區塊進行影像分類。 +3. 將分類結果中激活值足夠高的區塊視為包含目標物件的區域。 + +![簡單的物件偵測](../../../../../translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.hk.png) + +> *圖片來源:[練習筆記本](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection-TF.ipynb)* + +然而,這種方法遠非理想,因為它只能非常粗略地定位物件的邊界框。若要更精確地定位,我們需要進行某種**回歸分析**來預測邊界框的座標,而這需要特定的數據集。 + +## 用於物件偵測的回歸分析 + +[這篇部落格文章](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491)對於偵測形狀提供了一個很好的入門介紹。 + +## 物件偵測的數據集 + +在執行這項任務時,你可能會遇到以下數據集: + +* [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 包含 20 個類別 +* [COCO](http://cocodataset.org/#home) - 常見物件上下文數據集,包含 80 個類別、邊界框和分割遮罩 + +![COCO](../../../../../translated_images/coco-examples.71bc60380fa6cceb7caad48bd09e35b6028caabd363aa04fee89c414e0870e86.hk.jpg) + +## 物件偵測的評估指標 + +### 交集比聯集 (Intersection over Union, IoU) + +對於影像分類來說,衡量演算法的表現相對簡單;但對於物件偵測,我們需要同時衡量類別的正確性以及推測邊界框位置的精確性。後者使用所謂的**交集比聯集** (IoU) 來衡量,這是一種用來評估兩個框(或任意兩個區域)重疊程度的指標。 + +![IoU](../../../../../translated_images/iou_equation.9a4751d40fff4e119ecd0a7bcca4e71ab1dc83e0d4f2a0d66ff0859736f593cf.hk.png) + +> *圖片來源:[這篇優秀的 IoU 部落格文章](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)* + +概念很簡單:將兩個區域的交集面積除以它們的聯集面積。對於完全相同的區域,IoU 值為 1;對於完全不相交的區域,IoU 值為 0。其他情況下,IoU 值介於 0 到 1 之間。我們通常只考慮 IoU 超過某個值的邊界框。 + +### 平均準確率 (Average Precision, AP) + +假設我們想衡量某個類別 $C$ 的物件被識別的效果。為此,我們使用**平均準確率** (AP) 指標,其計算方式如下: + +1. 考慮準確率-召回率曲線,該曲線顯示了檢測閾值(從 0 到 1)對準確率的影響。 +2. 根據閾值的不同,我們會在圖片中檢測到更多或更少的物件,並得到不同的準確率和召回率值。 +3. 該曲線看起來如下: + + + +> *圖片來源:[NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + +對於給定類別 $C$ 的平均準確率是該曲線下的面積。更精確地說,召回率軸通常被分成 10 個部分,並對這些點的準確率取平均值: + +$$ +AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10}) +$$ + +### AP 與 IoU + +我們只考慮那些 IoU 超過某個值的檢測。例如,在 PASCAL VOC 數據集中,通常假設 $\mbox{IoU Threshold} = 0.5$,而在 COCO 數據集中,AP 是針對不同的 $\mbox{IoU Threshold}$ 值進行測量的。 + + + +> *圖片來源:[NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + +### 平均平均準確率 (Mean Average Precision, mAP) + +物件偵測的主要評估指標是**平均平均準確率** (mAP)。它是所有物件類別的平均準確率,有時也包括不同 $\mbox{IoU Threshold}$ 的平均值。更詳細的 mAP 計算過程可以參考[這篇部落格文章](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3)),以及[這裡的程式碼範例](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734)。 + +## 不同的物件偵測方法 + +物件偵測演算法主要分為兩大類: + +* **區域提議網路** (Region Proposal Networks, R-CNN, Fast R-CNN, Faster R-CNN)。主要的想法是生成**感興趣區域** (ROI),並對其執行 CNN,尋找最大激活值。這與簡單方法有些相似,但 ROI 是以更聰明的方式生成的。這類方法的主要缺點是速度較慢,因為需要對圖片進行多次 CNN 分類。 +* **單次通過** (One-pass) 方法(如 YOLO、SSD、RetinaNet)。這些架構設計為在一次通過中同時預測類別和 ROI。 + +### R-CNN: 基於區域的 CNN + +[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf) 使用 [Selective Search](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf) 生成 ROI 區域的層次結構,然後通過 CNN 特徵提取器和 SVM 分類器來確定物件類別,並使用線性回歸確定*邊界框*座標。[官方論文](https://arxiv.org/pdf/1506.01497v1.pdf) + +![RCNN](../../../../../translated_images/rcnn1.cae407020dfb1d1fb572656e44f75cd6c512cc220591c116c506652c10e47f26.hk.png) + +> *圖片來源:van de Sande et al. ICCV’11* + +![RCNN-1](../../../../../translated_images/rcnn2.2d9530bb83516484ec65b250c22dbf37d3d23244f32864ebcb91d98fe7c3112c.hk.png) + +> *圖片來源:[這篇部落格](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e)* + +### F-RCNN - 快速 R-CNN + +這種方法與 R-CNN 類似,但區域是在應用卷積層後定義的。 + +![FRCNN](../../../../../translated_images/f-rcnn.3cda6d9bb41888754037d2d9763e2298a96de5d9bc2a21db3147357aa5da9b1a.hk.png) + +> 圖片來源:[官方論文](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf),[arXiv](https://arxiv.org/pdf/1504.08083.pdf),2015 + +### Faster R-CNN + +這種方法的主要想法是使用神經網路來預測 ROI,稱為*區域提議網路*。[論文](https://arxiv.org/pdf/1506.01497.pdf),2016 + +![FasterRCNN](../../../../../translated_images/faster-rcnn.8d46c099b87ef30ab2ea26dbc4bdd85b974a57ba8eb526f65dc4cd0a4711de30.hk.png) + +> 圖片來源:[官方論文](https://arxiv.org/pdf/1506.01497.pdf) + +### R-FCN: 基於區域的全卷積網路 + +這種演算法比 Faster R-CNN 更快。主要想法如下: + +1. 使用 ResNet-101 提取特徵。 +2. 特徵經過**位置敏感分數圖**處理。每個來自 $C$ 類別的物件被劃分為 $k\times k$ 區域,並訓練預測物件的部分。 +3. 對於來自 $k\times k$ 區域的每個部分,所有網路對物件類別進行投票,選擇得票最多的類別。 + +![r-fcn image](../../../../../translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.hk.png) + +> 圖片來源:[官方論文](https://arxiv.org/abs/1605.06409) + +### YOLO - You Only Look Once + +YOLO 是一種實時單次通過的演算法。主要想法如下: + + * 將圖片劃分為 $S\times S$ 區域。 + * 對於每個區域,**CNN** 預測 $n$ 個可能的物件、*邊界框*座標以及*置信度*=*概率* * IoU。 + + ![YOLO](../../../../../translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.hk.png) + +> 圖片來源:[官方論文](https://arxiv.org/abs/1506.02640) + +### 其他演算法 + +* RetinaNet: [官方論文](https://arxiv.org/abs/1708.02002) + - [PyTorch 實現](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) + - [Keras 實現](https://github.com/fizyr/keras-retinanet) + - [Keras 示例中的 RetinaNet](https://keras.io/examples/vision/retinanet/) +* SSD (單次檢測器): [官方論文](https://arxiv.org/abs/1512.02325) + +## ✍️ 練習:物件偵測 + +繼續學習以下筆記本: + +[ObjectDetection.ipynb](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) + +## 結論 + +在這節課中,你快速瀏覽了各種實現物件偵測的方法! + +## 🚀 挑戰 + +閱讀以下關於 YOLO 的文章和筆記本,並嘗試自己實現: + +* [優秀的部落格文章](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/) 描述 YOLO + * [官方網站](https://pjreddie.com/darknet/yolo/) + * YOLO: [Keras 實現](https://github.com/experiencor/keras-yolo2),[逐步筆記本](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb) + * YOLO v2: [Keras 實現](https://github.com/experiencor/keras-yolo2),[逐步筆記本](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb) + +## [課後小測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/211) + +## 複習與自學 + +* [物件偵測](https://tjmachinelearning.com/lectures/1718/obj/) by Nikhil Sardana +* [物件偵測演算法的良好比較](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html) +* [深度學習物件偵測演算法回顧](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852) +* [基本物件偵測演算法的逐步介紹](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/) +* [Python 中 Faster R-CNN 的實現](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/) + +## [作業:物件偵測](lab/README.md) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md b/translations/hk/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md new file mode 100644 index 00000000..b310c44b --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md @@ -0,0 +1,75 @@ + +# 使用 Hollywood Heads Dataset 進行頭部檢測 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗課題。 + +## 任務 + +在監控攝像機的視頻流中計算人數是一項重要的任務,這可以幫助我們估算商店的訪客數量、餐廳的繁忙時段等。為了解決這個問題,我們需要能夠從不同角度檢測人類的頭部。為了訓練物件檢測模型來檢測人類頭部,我們可以使用 [Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/)。 + +## 數據集 + +[Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/release/HollywoodHeads.zip) 包含 369,846 個人類頭部的標註,這些標註來自 224,740 張好萊塢電影的影格。數據集以 [https://host.robots.ox.ac.uk/pascal/VOC/](../../../../../../lessons/4-ComputerVision/11-ObjectDetection/lab/PASCAL VOC) 格式提供,每張圖片都有一個 XML 描述文件,其格式如下: + +```xml + + HollywoodHeads + mov_021_149390.jpeg + + HollywoodHeads 2015 Database + HollywoodHeads 2015 + WILLOW + + + 608 + 320 + 3 + + 0 + + head + + 201 + 1 + 480 + 263 + + 0 + + + head + + 3 + 4 + 241 + 285 + + 0 + + +``` + +在這個數據集中,只有一類物件 `head`,每個頭部都提供了邊界框的座標。你可以使用 Python 的庫來解析 XML,或者使用 [這個庫](https://pypi.org/project/pascal-voc/) 直接處理 PASCAL VOC 格式。 + +## 訓練物件檢測模型 + +你可以使用以下方法之一來訓練物件檢測模型: + +* 使用 [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste) 及其 Python API,在雲端以程式化方式訓練模型。Custom Vision 無法使用超過幾百張圖片來訓練模型,因此你可能需要限制數據集的大小。 +* 使用 [Keras 教程](https://keras.io/examples/vision/retinanet/) 中的範例來訓練 RetunaNet 模型。 +* 使用 [torchvision.models.detection.RetinaNet](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) 中的內建模組進行訓練。 + +## 重點 + +物件檢測是業界經常需要的一項任務。雖然有一些服務可以用來執行物件檢測(例如 [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste)),但了解物件檢測的工作原理並能夠訓練自己的模型是非常重要的。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/12-Segmentation/README.md b/translations/hk/lessons/4-ComputerVision/12-Segmentation/README.md new file mode 100644 index 00000000..03463bff --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/12-Segmentation/README.md @@ -0,0 +1,78 @@ + +# 分割 + +我們之前學過物件偵測,這讓我們能夠透過預測物件的*邊界框*來定位影像中的物件。然而,對於某些任務來說,我們不僅需要邊界框,還需要更精確的物件定位。這項任務被稱為**分割**。 + +## [課前小測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/112) + +分割可以被視為**像素分類**,也就是說,我們需要為影像中的**每一個**像素預測其類別(*背景*也是其中一個類別)。主要有兩種分割演算法: + +* **語義分割**僅告訴像素的類別,並不區分同一類別中的不同物件。 +* **實例分割**將類別分為不同的實例。 + +例如,對於實例分割,這些羊是不同的物件;但對於語義分割,所有的羊都被表示為同一類別。 + + + +> 圖片來源:[這篇部落格文章](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50) + +分割有不同的神經網絡架構,但它們的結構都是相似的。在某種程度上,它與你之前學過的自編碼器相似,但我們的目標不是重建原始影像,而是重建一個**遮罩**。因此,分割網絡包含以下部分: + +* **編碼器**從輸入影像中提取特徵。 +* **解碼器**將這些特徵轉換為**遮罩影像**,其大小與通道數與類別數相同。 + + + +> 圖片來源:[這篇論文](https://arxiv.org/pdf/2001.05566.pdf) + +我們特別需要提到分割中使用的損失函數。在使用傳統自編碼器時,我們需要測量兩張影像之間的相似性,這可以使用均方誤差(MSE)來完成。而在分割中,目標遮罩影像中的每個像素代表一個類別編號(在第三維度上進行獨熱編碼),因此我們需要使用特定於分類的損失函數——交叉熵損失,並對所有像素取平均。如果遮罩是二元的,則使用**二元交叉熵損失**(BCE)。 + +> ✅ 獨熱編碼是一種將類別標籤編碼為向量的方法,其長度等於類別數量。可以參考[這篇文章](https://datagy.io/sklearn-one-hot-encode/)了解這項技術。 + +## 醫學影像中的分割 + +在這節課中,我們將通過訓練網絡來識別醫學影像中的人類痣(也稱為痣),以實際應用分割技術。我們將使用PH2資料庫中的皮膚鏡影像作為影像來源。這個資料集包含200張影像,分為三類:典型痣、不典型痣和黑色素瘤。所有影像也包含對應的**遮罩**,用於勾勒痣的輪廓。 + +> ✅ 這項技術特別適合這種類型的醫學影像,但你還能想到哪些其他的現實應用場景? + +navi + +> 圖片來源:PH2資料庫 + +我們將訓練一個模型,將任何痣從背景中分割出來。 + +## ✍️ 練習:語義分割 + +打開以下筆記本,了解更多不同的語義分割架構,練習使用它們,並觀察它們的實際效果。 + +* [語義分割 Pytorch](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) +* [語義分割 TensorFlow](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) + +## [課後小測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/212) + +## 總結 + +分割是一種非常強大的影像分類技術,超越了邊界框,實現了像素級的分類。這項技術被廣泛應用於醫學影像等領域。 + +## 🚀 挑戰 + +人體分割只是我們可以對人物影像執行的常見任務之一。其他重要的任務還包括**骨架檢測**和**姿勢檢測**。試試[OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)庫,看看姿勢檢測如何被應用。 + +## 複習與自學 + +這篇[維基百科文章](https://wikipedia.org/wiki/Image_segmentation)提供了這項技術的各種應用的良好概述。深入了解實例分割和全景分割這些子領域。 + +## [作業](lab/README.md) + +在這次實驗中,嘗試使用來自Kaggle的[Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)進行**人體分割**。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/12-Segmentation/lab/README.md b/translations/hk/lessons/4-ComputerVision/12-Segmentation/lab/README.md new file mode 100644 index 00000000..d04e64dc --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/12-Segmentation/lab/README.md @@ -0,0 +1,31 @@ + +# 人體分割 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +在視頻製作中,例如天氣預報,我們經常需要將攝像機中的人像剪裁出來,並將其放置在其他畫面上。這通常是通過 **色度鍵** 技術來完成的,當人站在一個統一顏色的背景前拍攝時,該背景會被移除。在這個實驗中,我們將訓練一個神經網絡模型來剪裁出人像輪廓。 + +## 數據集 + +我們將使用來自 Kaggle 的 [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)。請從 Kaggle 手動下載該數據集。 + +## 起始筆記本 + +通過打開 [BodySegmentation.ipynb](../../../../../../lessons/4-ComputerVision/12-Segmentation/lab/BodySegmentation.ipynb) 開始這個實驗。 + +## 收穫 + +人體分割只是我們可以對人物圖像進行的常見任務之一。其他重要的任務還包括 **骨架檢測** 和 **姿勢檢測**。可以查看 [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) 庫,了解如何實現這些任務。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/README.md b/translations/hk/lessons/4-ComputerVision/README.md new file mode 100644 index 00000000..48a169e8 --- /dev/null +++ b/translations/hk/lessons/4-ComputerVision/README.md @@ -0,0 +1,25 @@ + +# 電腦視覺 + +![電腦視覺內容摘要的手繪圖](../../../../translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.hk.png) + +在這部分,我們將學習以下內容: + +* [電腦視覺與 OpenCV 簡介](06-IntroCV/README.md) +* [卷積神經網絡](07-ConvNets/README.md) +* [預訓練網絡與遷移學習](08-TransferLearning/README.md) +* [自編碼器](09-Autoencoders/README.md) +* [生成對抗網絡](10-GANs/README.md) +* [物件偵測](11-ObjectDetection/README.md) +* [語義分割](12-Segmentation/README.md) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/13-TextRep/README.md b/translations/hk/lessons/5-NLP/13-TextRep/README.md new file mode 100644 index 00000000..a8402f2b --- /dev/null +++ b/translations/hk/lessons/5-NLP/13-TextRep/README.md @@ -0,0 +1,85 @@ + +# 將文字表示為張量 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/113) + +## 文字分類 + +在本部分的第一部分中,我們將專注於**文字分類**任務。我們將使用 [AG News](https://www.kaggle.com/amananandrai/ag-news-classification-dataset) 數據集,該數據集包含如下的新聞文章: + +* 類別:科學/技術 +* 標題:Ky. 公司獲得研究肽的資助 (AP) +* 內容:AP - 一家由路易斯維爾大學化學研究員創立的公司獲得了一筆資助,用於開發... + +我們的目標是根據文字將新聞項目分類到某個類別中。 + +## 表示文字 + +如果我們想用神經網絡解決自然語言處理 (NLP) 任務,我們需要某種方法將文字表示為張量。電腦已經使用如 ASCII 或 UTF-8 等編碼將文字字符表示為對應螢幕字體的數字。 + +顯示將字符映射到 ASCII 和二進制表示的圖表 + +> [圖片來源](https://www.seobility.net/en/wiki/ASCII) + +作為人類,我們理解每個字母**代表**什麼,以及所有字符如何組合成句子的單詞。然而,電腦本身並不具備這種理解能力,神經網絡需要在訓練過程中學習其含義。 + +因此,我們可以使用不同的方法來表示文字: + +* **字符級表示**,即將每個字符視為一個數字來表示文字。假設我們的文本語料庫中有 *C* 個不同的字符,單詞 *Hello* 將被表示為 5x*C* 的張量。每個字母對應於單熱編碼中的一個張量列。 +* **單詞級表示**,即創建一個包含文本中所有單詞的**詞彙表**,然後使用單熱編碼表示單詞。這種方法相對更好,因為單個字母本身並沒有太多意義,因此通過使用更高層次的語義概念——單詞——我們簡化了神經網絡的任務。然而,由於詞彙表的規模龐大,我們需要處理高維稀疏張量。 + +無論使用哪種表示方法,我們首先需要將文字轉換為**標記**序列,每個標記可以是字符、單詞,甚至是單詞的一部分。然後,我們使用**詞彙表**將標記轉換為數字,這個數字可以通過單熱編碼輸入到神經網絡中。 + +## N-Grams + +在自然語言中,單詞的精確含義只能在上下文中確定。例如,*neural network* 和 *fishing network* 的含義完全不同。考慮到這一點的一種方法是基於單詞對構建模型,並將單詞對視為單獨的詞彙標記。這樣,句子 *I like to go fishing* 將被表示為以下標記序列:*I like*、*like to*、*to go*、*go fishing*。這種方法的問題在於詞彙表的規模顯著增大,並且像 *go fishing* 和 *go shopping* 這樣的組合被表示為不同的標記,儘管它們具有相同的動詞,但並不共享任何語義相似性。 + +在某些情況下,我們可能會考慮使用三元組(tri-grams)——三個單詞的組合。因此,這種方法通常被稱為 **n-grams**。此外,使用字符級表示時使用 n-grams 也是有意義的,在這種情況下,n-grams 大致對應於不同的音節。 + +## Bag-of-Words 和 TF/IDF + +在解決像文字分類這樣的任務時,我們需要能夠用一個固定大小的向量表示文字,這個向量將作為最終密集分類器的輸入。最簡單的方法之一是將所有單詞的個別表示結合起來,例如通過相加。如果我們將每個單詞的單熱編碼相加,最終會得到一個頻率向量,顯示每個單詞在文本中出現的次數。這種文字表示方法被稱為 **詞袋模型** (BoW)。 + + + +> 圖片由作者提供 + +詞袋模型本質上表示了哪些單詞出現在文本中以及它們的數量,這確實可以很好地指示文本的主題。例如,關於政治的新聞文章可能包含 *president* 和 *country* 等單詞,而科學出版物可能包含 *collider*、*discovered* 等單詞。因此,單詞頻率在許多情況下可以很好地指示文本內容。 + +詞袋模型的問題在於某些常見單詞,例如 *and*、*is* 等,出現在大多數文本中,並且它們的頻率最高,掩蓋了真正重要的單詞。我們可以通過考慮單詞在整個文檔集合中出現的頻率來降低這些單詞的重要性。這就是 TF/IDF 方法背後的主要思想,該方法在本課程附帶的筆記本中有更詳細的介紹。 + +然而,這些方法都無法完全考慮文字的**語義**。我們需要更強大的神經網絡模型來實現這一點,我們將在本部分後續內容中討論。 + +## ✍️ 練習:文字表示 + +在以下筆記本中繼續學習: + +* [使用 PyTorch 進行文字表示](../../../../../lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) +* [使用 TensorFlow 進行文字表示](../../../../../lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) + +## 總結 + +到目前為止,我們學習了可以為不同單詞添加頻率權重的技術。然而,它們無法表示意義或順序。正如著名語言學家 J. R. Firth 在 1935 年所說:“單詞的完整意義總是與上下文相關,任何脫離上下文的意義研究都不能被認真對待。”我們將在課程後續內容中學習如何通過語言建模從文字中捕捉上下文信息。 + +## 🚀 挑戰 + +嘗試使用詞袋模型和不同的數據模型進行其他練習。你可以參考這個 [Kaggle 比賽](https://www.kaggle.com/competitions/word2vec-nlp-tutorial/overview/part-1-for-beginners-bag-of-words) 獲得靈感。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/213) + +## 回顧與自學 + +在 [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) 上練習你的文字嵌入和詞袋模型技術。 + +## [作業:筆記本](assignment.md) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/13-TextRep/assignment.md b/translations/hk/lessons/5-NLP/13-TextRep/assignment.md new file mode 100644 index 00000000..15261b3c --- /dev/null +++ b/translations/hk/lessons/5-NLP/13-TextRep/assignment.md @@ -0,0 +1,15 @@ + +# 作業:筆記本 + +使用與本課程相關的筆記本(無論是 PyTorch 或 TensorFlow 版本),使用你自己的數據集重新執行,或許可以使用 Kaggle 上的數據集,並註明來源。重寫筆記本以強調你自己的發現。嘗試一些可能令人驚訝的創新數據集,例如 [這個關於 UFO 目擊事件的數據集](https://www.kaggle.com/datasets/NUFORC/ufo-sightings) 來自 NUFORC。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業的人類翻譯服務。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/14-Embeddings/README.md b/translations/hk/lessons/5-NLP/14-Embeddings/README.md new file mode 100644 index 00000000..5013ce4e --- /dev/null +++ b/translations/hk/lessons/5-NLP/14-Embeddings/README.md @@ -0,0 +1,77 @@ + +# 嵌入 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/114) + +在基於 BoW 或 TF/IDF 訓練分類器時,我們使用的是高維度的詞袋向量,其長度為 `vocab_size`,並且我們明確地將低維度的位置信息向量轉換為稀疏的單熱編碼表示。然而,這種單熱編碼表示並不具備記憶效率。此外,每個詞都被獨立地處理,換句話說,單熱編碼向量無法表達詞與詞之間的語義相似性。 + +**嵌入**的概念是用低維度的密集向量來表示詞,這些向量能夠在某種程度上反映詞的語義。我們稍後會討論如何構建有意義的詞嵌入,但現在我們可以將嵌入理解為降低詞向量維度的一種方法。 + +嵌入層會將一個詞作為輸入,並生成指定 `embedding_size` 的輸出向量。從某種意義上說,它與 `Linear` 層非常相似,但嵌入層不需要單熱編碼向量作為輸入,而是可以直接接受詞的編號作為輸入,從而避免創建大型的單熱編碼向量。 + +通過在分類器網絡中使用嵌入層作為第一層,我們可以從詞袋模型切換到 **嵌入袋** 模型。在嵌入袋模型中,我們首先將文本中的每個詞轉換為相應的嵌入,然後對所有嵌入計算某種聚合函數,例如 `sum`、`average` 或 `max`。 + +![展示五個序列詞的嵌入分類器的圖片。](../../../../../translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.hk.png) + +> 圖片由作者提供 + +## ✍️ 練習:嵌入 + +繼續學習以下筆記本: +* [使用 PyTorch 的嵌入](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) +* [使用 TensorFlow 的嵌入](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) + +## 語義嵌入:Word2Vec + +雖然嵌入層學會了將詞映射到向量表示,但這種表示未必具有很強的語義意義。我們希望學習一種向量表示,使得相似詞或同義詞在某種向量距離(例如歐幾里得距離)上彼此接近。 + +為了實現這一點,我們需要以特定方式在大量文本集合上預訓練嵌入模型。一種訓練語義嵌入的方法叫做 [Word2Vec](https://en.wikipedia.org/wiki/Word2vec)。它基於兩種主要架構來生成詞的分佈式表示: + + - **連續詞袋** (CBoW) — 在這種架構中,我們訓練模型根據上下文預測一個詞。給定 ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$,模型的目標是根據 $(W_{-2},W_{-1},W_1,W_2)$ 預測 $W_0$。 + - **連續跳元** (Skip-Gram) — 與 CBoW 相反,模型使用上下文窗口中的詞來預測當前詞。 + +CBoW 的速度更快,而 Skip-Gram 的速度較慢,但在表示不常見詞方面效果更好。 + +![展示 CBoW 和 Skip-Gram 算法如何將詞轉換為向量的圖片。](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.hk.png) + +> 圖片來源:[這篇論文](https://arxiv.org/pdf/1301.3781.pdf) + +Word2Vec 預訓練嵌入(以及其他類似模型,例如 GloVe)也可以用於神經網絡中的嵌入層。然而,我們需要處理詞彙表,因為用於預訓練 Word2Vec/GloVe 的詞彙表可能與我們文本語料庫中的詞彙表不同。查看上述筆記本,了解如何解決這個問題。 + +## 上下文嵌入 + +傳統的預訓練嵌入表示(例如 Word2Vec)的一個主要限制是詞義消歧問題。雖然預訓練嵌入可以捕捉詞在上下文中的部分含義,但每個詞的所有可能含義都被編碼到同一嵌入中。這可能會在下游模型中引發問題,因為許多詞(例如 "play")的含義會因上下文而異。 + +例如,"play" 在以下兩個句子中的含義完全不同: + +- 我去劇院看了一場 **戲劇**。 +- John 想和朋友一起 **玩**。 + +上述預訓練嵌入將 "play" 的這兩種含義表示為同一嵌入。為了解決這一限制,我們需要基於 **語言模型** 構建嵌入,該模型在大量文本語料庫上進行訓練,並且「了解」詞如何在不同上下文中組合。討論上下文嵌入超出了本教程的範圍,但我們會在課程後續討論語言模型時回到這個話題。 + +## 結論 + +在本課中,你學習了如何在 TensorFlow 和 PyTorch 中構建和使用嵌入層,以更好地反映詞的語義。 + +## 🚀 挑戰 + +Word2Vec 已被用於一些有趣的應用,包括生成歌曲歌詞和詩歌。查看 [這篇文章](https://www.politetype.com/blog/word2vec-color-poems),了解作者如何使用 Word2Vec 生成詩歌。還可以觀看 [Dan Shiffmann 的這段視頻](https://www.youtube.com/watch?v=LSS_bos_TPI&ab_channel=TheCodingTrain),了解該技術的另一種解釋。然後嘗試將這些技術應用於你自己的文本語料庫,或許可以從 Kaggle 獲取數據。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/214) + +## 回顧與自學 + +閱讀這篇關於 Word2Vec 的論文:[Efficient Estimation of Word Representations in Vector Space](https://arxiv.org/pdf/1301.3781.pdf) + +## [作業:筆記本](assignment.md) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/14-Embeddings/assignment.md b/translations/hk/lessons/5-NLP/14-Embeddings/assignment.md new file mode 100644 index 00000000..b2e94285 --- /dev/null +++ b/translations/hk/lessons/5-NLP/14-Embeddings/assignment.md @@ -0,0 +1,15 @@ + +# 作業:筆記本 + +使用與本課程相關的筆記本(無論是 PyTorch 或 TensorFlow 版本),使用您自己的數據集重新執行,或許可以使用來自 Kaggle 的數據集,並註明來源。重寫筆記本以強調您自己的發現。嘗試使用不同類型的數據集並記錄您的發現,例如使用[這些 Beatles 歌詞](https://www.kaggle.com/datasets/jenlooper/beatles-lyrics)。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/15-LanguageModeling/README.md b/translations/hk/lessons/5-NLP/15-LanguageModeling/README.md new file mode 100644 index 00000000..ffcb8452 --- /dev/null +++ b/translations/hk/lessons/5-NLP/15-LanguageModeling/README.md @@ -0,0 +1,54 @@ + +# 語言建模 + +語義嵌入(例如 Word2Vec 和 GloVe)實際上是邁向**語言建模**的第一步——創建某種*理解*(或*表示*)語言特性的模型。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/115) + +語言建模的核心概念是以無監督的方式在未標籤的數據集上進行訓練。這一點非常重要,因為我們擁有大量未標籤的文本,而標籤文本的數量則始終受限於我們能投入的標籤工作量。通常,我們可以構建能夠**預測文本中缺失單詞**的語言模型,因為隨機遮蔽文本中的某個單詞並將其作為訓練樣本是一件相對簡單的事情。 + +## 訓練嵌入 + +在之前的例子中,我們使用了預訓練的語義嵌入,但了解這些嵌入是如何訓練的也非常有趣。有幾種可能的想法可以用於訓練: + +* **N-Gram** 語言建模,通過查看前 N 個標記(N-gram)來預測當前標記。 +* **連續詞袋模型**(CBoW),在標記序列 $W_{-N}$, ..., $W_N$ 中預測中間的標記 $W_0$。 +* **Skip-gram**,從中間標記 $W_0$ 預測一組相鄰的標記 {$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$}。 + +![來自論文的將單詞轉換為向量的算法示例](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.hk.png) + +> 圖片來源:[這篇論文](https://arxiv.org/pdf/1301.3781.pdf) + +## ✍️ 範例筆記本:訓練 CBoW 模型 + +繼續學習以下筆記本中的內容: + +* [使用 TensorFlow 訓練 CBoW Word2Vec](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) +* [使用 PyTorch 訓練 CBoW Word2Vec](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) + +## 結論 + +在上一課中,我們看到詞嵌入的效果就像魔法一樣!現在我們知道,訓練詞嵌入並不是一件非常複雜的事情,如果需要,我們應該能夠為特定領域的文本訓練自己的詞嵌入。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/215) + +## 回顧與自學 + +* [PyTorch 官方語言建模教程](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html)。 +* [TensorFlow 官方訓練 Word2Vec 模型教程](https://www.TensorFlow.org/tutorials/text/word2vec)。 +* 使用 **gensim** 框架僅需幾行代碼即可訓練最常用的嵌入,詳情請參閱[此文檔](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html)。 + +## 🚀 [作業:訓練 Skip-Gram 模型](lab/README.md) + +在實驗中,我們挑戰你修改本課的代碼來訓練 Skip-Gram 模型,而不是 CBoW。[閱讀詳情](lab/README.md) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/15-LanguageModeling/lab/README.md b/translations/hk/lessons/5-NLP/15-LanguageModeling/lab/README.md new file mode 100644 index 00000000..a3623693 --- /dev/null +++ b/translations/hk/lessons/5-NLP/15-LanguageModeling/lab/README.md @@ -0,0 +1,38 @@ + +# 訓練 Skip-Gram 模型 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗課題。 + +## 任務 + +在這次實驗中,我們挑戰你使用 Skip-Gram 技術訓練 Word2Vec 模型。訓練一個嵌入式網絡來預測 $N$ 個詞寬的 Skip-Gram 窗口中的相鄰詞。你可以使用[本課程的代碼](../../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb),並稍作修改。 + +## 數據集 + +你可以使用任何一本書作為數據集。在 [Project Gutenberg](https://www.gutenberg.org/) 上可以找到許多免費文本,例如,這裡有 Lewis Carroll 的《愛麗絲夢遊仙境》的[直接鏈接](https://www.gutenberg.org/files/11/11-0.txt)。或者,你也可以使用莎士比亞的戲劇,以下代碼可以幫助你獲取: + +```python +path_to_file = tf.keras.utils.get_file( + 'shakespeare.txt', + 'https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt') +text = open(path_to_file, 'rb').read().decode(encoding='utf-8') +``` + +## 探索! + +如果你有時間並希望深入了解這個主題,可以嘗試探索以下幾點: + +* 嵌入尺寸如何影響結果? +* 不同的文本風格如何影響結果? +* 選擇幾個非常不同類型的詞及其同義詞,獲取它們的向量表示,應用 PCA 將維度降至 2,並在 2D 空間中繪製它們。你能看到任何模式嗎? + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/16-RNN/README.md b/translations/hk/lessons/5-NLP/16-RNN/README.md new file mode 100644 index 00000000..bb15c9c8 --- /dev/null +++ b/translations/hk/lessons/5-NLP/16-RNN/README.md @@ -0,0 +1,96 @@ + +# 循環神經網絡 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/116) + +在之前的章節中,我們使用了豐富的文本語義表示以及嵌入層上的簡單線性分類器。這種架構能夠捕捉句子中詞語的聚合意義,但它並未考慮詞語的**順序**,因為嵌入層上的聚合操作已經移除了原始文本中的這些信息。由於這些模型無法建模詞語的順序,因此它們無法解決更複雜或模糊的任務,例如文本生成或問題回答。 + +為了捕捉文本序列的意義,我們需要使用另一種神經網絡架構,稱為**循環神經網絡**(Recurrent Neural Network,RNN)。在 RNN 中,我們將句子逐個符號傳遞給網絡,網絡會生成一些**狀態**,然後將該狀態與下一個符號再次傳遞給網絡。 + +![RNN](../../../../../translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.hk.png) + +> 圖片由作者提供 + +給定輸入序列的符號 X0,...,Xn,RNN 會創建一系列神經網絡模塊,並通過反向傳播端到端訓練這個序列。每個網絡模塊接受一對 (Xi,Si) 作為輸入,並生成 Si+1 作為結果。最終的狀態 Sn 或 (輸出 Yn) 會進入線性分類器以生成結果。所有網絡模塊共享相同的權重,並通過一次反向傳播端到端訓練。 + +由於狀態向量 S0,...,Sn 被傳遞給網絡,它能夠學習詞語之間的序列依賴關係。例如,當詞語 *not* 出現在序列中的某處時,它可以學習在狀態向量中否定某些元素,從而實現否定。 + +> ✅ 由於上圖中所有 RNN 模塊的權重是共享的,因此同一圖可以表示為右側的一個模塊,並帶有一個循環反饋回路,將網絡的輸出狀態傳回輸入。 + +## RNN 單元的結構 + +讓我們看看一個簡單的 RNN 單元是如何組織的。它接受前一個狀態 Si-1 和當前符號 Xi 作為輸入,並需要生成輸出狀態 Si(有時我們也對其他輸出 Yi 感興趣,例如在生成網絡的情況下)。 + +一個簡單的 RNN 單元內部有兩個權重矩陣:一個用於轉換輸入符號(我們稱之為 W),另一個用於轉換輸入狀態(H)。在這種情況下,網絡的輸出計算公式為 σ(W×Xi+H×Si-1+b),其中 σ 是激活函數,b 是額外的偏置。 + +RNN 單元結構 + +> 圖片由作者提供 + +在許多情況下,輸入符號在進入 RNN 之前會通過嵌入層以降低維度。在這種情況下,如果輸入向量的維度是 *emb_size*,而狀態向量的維度是 *hid_size*,則 W 的大小為 *emb_size*×*hid_size*,H 的大小為 *hid_size*×*hid_size*。 + +## 長短期記憶(LSTM) + +經典 RNN 的主要問題之一是所謂的**梯度消失**問題。由於 RNN 是通過一次反向傳播端到端訓練的,它很難將誤差傳遞到網絡的第一層,因此網絡無法學習遠距離符號之間的關係。解決這個問題的一種方法是通過使用所謂的**門**引入**顯式狀態管理**。有兩種著名的架構:**長短期記憶**(Long Short Term Memory,LSTM)和**門控遞歸單元**(Gated Relay Unit,GRU)。 + +![顯示長短期記憶單元的示例圖片](../../../../../lessons/5-NLP/16-RNN/images/long-short-term-memory-cell.svg) + +> 圖片來源待定 + +LSTM 網絡的組織方式與 RNN 類似,但有兩個狀態會從層到層傳遞:實際狀態 C 和隱藏向量 H。在每個單元中,隱藏向量 Hi 與輸入 Xi 進行拼接,並通過**門**控制狀態 C 的變化。每個門都是具有 sigmoid 激活(輸出範圍 [0,1])的神經網絡,可以通過與狀態向量相乘來視為逐位掩碼。以下是各個門(從左到右): + +* **遺忘門**接收隱藏向量並決定需要遺忘狀態向量 C 的哪些部分,哪些需要保留。 +* **輸入門**從輸入和隱藏向量中提取信息並插入到狀態中。 +* **輸出門**通過具有 *tanh* 激活的線性層轉換狀態,然後使用隱藏向量 Hi 選擇其部分以生成新狀態 Ci+1。 + +狀態 C 的組件可以被視為一些可以開啟或關閉的標誌。例如,當我們在序列中遇到名字 *Alice* 時,我們可能會假設它指的是女性角色,並在狀態中設置一個標誌,表示句子中有一個女性名詞。當我們進一步遇到短語 *and Tom* 時,我們會設置一個標誌,表示句子中有一個複數名詞。因此,通過操控狀態,我們可以追蹤句子部分的語法屬性。 + +> ✅ 理解 LSTM 內部結構的絕佳資源是 Christopher Olah 的這篇精彩文章 [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/)。 + +## 雙向和多層 RNN + +我們已經討論了單向運行的循環網絡,從序列的開始到結束。這看起來很自然,因為它類似於我們閱讀和聽取語音的方式。然而,由於在許多實際情況下我們可以隨機訪問輸入序列,因此在兩個方向上運行循環計算可能更有意義。這樣的網絡稱為**雙向** RNN。在處理雙向網絡時,我們需要兩個隱藏狀態向量,每個方向一個。 + +循環網絡,無論是單向還是雙向,都能捕捉序列中的某些模式,並將它們存儲到狀態向量中或傳遞到輸出中。與卷積網絡類似,我們可以在第一層之上構建另一個循環層,以捕捉更高層次的模式,並基於第一層提取的低層次模式進行構建。這引出了**多層 RNN**的概念,它由兩個或更多循環網絡組成,前一層的輸出作為下一層的輸入。 + +![顯示多層長短期記憶 RNN 的圖片](../../../../../translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.hk.jpg) + +*圖片來自 Fernando López 的[這篇精彩文章](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3)* + +## ✍️ 練習:嵌入層 + +在以下筆記本中繼續學習: + +* [使用 PyTorch 的 RNN](../../../../../lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) +* [使用 TensorFlow 的 RNN](../../../../../lessons/5-NLP/16-RNN/RNNTF.ipynb) + +## 結論 + +在本單元中,我們已經看到 RNN 可以用於序列分類,但事實上,它們可以處理更多任務,例如文本生成、機器翻譯等。我們將在下一單元中探討這些任務。 + +## 🚀 挑戰 + +閱讀一些關於 LSTM 的文獻並考慮其應用: + +- [Grid Long Short-Term Memory](https://arxiv.org/pdf/1507.01526v1.pdf) +- [Show, Attend and Tell: Neural Image Caption +Generation with Visual Attention](https://arxiv.org/pdf/1502.03044v2.pdf) + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/216) + +## 回顧與自學 + +- Christopher Olah 的 [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/)。 + +## [作業:筆記本](assignment.md) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要信息,建議使用專業的人類翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/16-RNN/assignment.md b/translations/hk/lessons/5-NLP/16-RNN/assignment.md new file mode 100644 index 00000000..da59a1af --- /dev/null +++ b/translations/hk/lessons/5-NLP/16-RNN/assignment.md @@ -0,0 +1,15 @@ + +# 作業:筆記本 + +使用與本課程相關的筆記本(無論是 PyTorch 或 TensorFlow 版本),使用您自己的數據集重新執行,或許可以使用 Kaggle 上的數據集,並註明來源。重寫筆記本以強調您自己的發現。嘗試使用不同類型的數據集並記錄您的發現,例如使用像 [這個關於天氣推文的 Kaggle 比賽數據集](https://www.kaggle.com/competitions/crowdflower-weather-twitter/data?select=train.csv) 的文本。 + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/17-GenerativeNetworks/README.md b/translations/hk/lessons/5-NLP/17-GenerativeNetworks/README.md new file mode 100644 index 00000000..befa6974 --- /dev/null +++ b/translations/hk/lessons/5-NLP/17-GenerativeNetworks/README.md @@ -0,0 +1,88 @@ + +# 生成式網絡 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/117) + +循環神經網絡(RNNs)及其門控單元變體,例如長短期記憶單元(LSTMs)和門控循環單元(GRUs),提供了一種語言建模的機制,因為它們能夠學習單詞的排序並對序列中的下一個單詞進行預測。這使得我們可以使用 RNNs 進行**生成任務**,例如普通文本生成、機器翻譯,甚至是圖像描述。 + +> ✅ 想一想你在輸入時受益於文本補全等生成任務的所有情況。研究一下你喜愛的應用程序,看看它們是否利用了 RNNs。 + +在上一單元中討論的 RNN 結構中,每個 RNN 單元會生成下一個隱藏狀態作為輸出。然而,我們也可以為每個循環單元添加另一個輸出,這樣就可以輸出一個**序列**(其長度等於原始序列)。此外,我們可以使用不在每一步接受輸入的 RNN 單元,而僅接受一些初始狀態向量,然後生成一個輸出序列。 + +這使得我們可以構建不同的神經網絡結構,如下圖所示: + +![顯示常見循環神經網絡模式的圖片。](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.hk.jpg) + +> 圖片來自 [Andrej Karpaty](http://karpathy.github.io/) 的博客文章 [Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) + +* **一對一** 是傳統的神經網絡,具有一個輸入和一個輸出 +* **一對多** 是一種生成式結構,接受一個輸入值,並生成一個輸出值序列。例如,如果我們想訓練一個**圖像描述**網絡,該網絡會生成圖片的文字描述,我們可以將圖片作為輸入,通過 CNN 獲得其隱藏狀態,然後使用一個循環鏈逐字生成描述 +* **多對一** 對應於我們在上一單元中描述的 RNN 結構,例如文本分類 +* **多對多** 或 **序列對序列** 對應於例如**機器翻譯**的任務,其中第一個 RNN 將輸入序列的所有信息收集到隱藏狀態中,然後另一個 RNN 鏈將該狀態展開為輸出序列。 + +在本單元中,我們將專注於幫助我們生成文本的簡單生成模型。為了簡化,我們將使用基於字符的標記化。 + +我們將訓練這個 RNN 逐步生成文本。在每一步中,我們將取一個長度為 `nchars` 的字符序列,並要求網絡為每個輸入字符生成下一個輸出字符: + +![顯示 RNN 生成單詞 "HELLO" 的示例圖片。](../../../../../translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.hk.png) + +在生成文本(推理過程中)時,我們從某個**提示**開始,將其傳遞給 RNN 單元以生成其中間狀態,然後從該狀態開始生成。我們一次生成一個字符,並將狀態和生成的字符傳遞給另一個 RNN 單元以生成下一個字符,直到生成足夠的字符。 + + + +> 圖片由作者提供 + +## ✍️ 練習:生成式網絡 + +在以下筆記本中繼續學習: + +* [使用 PyTorch 的生成式網絡](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) +* [使用 TensorFlow 的生成式網絡](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) + +## 軟文本生成與溫度 + +每個 RNN 單元的輸出是一個字符的概率分佈。如果我們總是選擇概率最高的字符作為生成文本中的下一個字符,文本往往會在相同的字符序列之間反覆循環,如以下示例所示: + +``` +today of the second the company and a second the company ... +``` + +然而,如果我們查看下一個字符的概率分佈,可能會發現幾個最高概率之間的差異並不大,例如一個字符的概率可能是 0.2,另一個是 0.19,等等。例如,在尋找序列 "*play*" 的下一個字符時,下一個字符可能是空格,也可能是 **e**(如單詞 *player*)。 + +這讓我們得出結論,選擇概率最高的字符並不總是“公平”的,因為選擇第二高的字符仍然可能導致有意義的文本。更明智的做法是從網絡輸出的概率分佈中**抽樣**字符。我們還可以使用一個參數,**溫度**,來平滑概率分佈,如果我們想增加隨機性,或者使其更陡峭,如果我們想更傾向於最高概率的字符。 + +在上面鏈接的筆記本中探索這種軟文本生成的實現方式。 + +## 總結 + +雖然文本生成本身可能很有用,但其主要優勢在於能夠從某些初始特徵向量使用 RNNs 生成文本。例如,文本生成被用作機器翻譯的一部分(序列對序列,在這種情況下,*編碼器*的狀態向量被用來生成或*解碼*翻譯的消息),或者生成圖像的文字描述(在這種情況下,特徵向量來自 CNN 提取器)。 + +## 🚀 挑戰 + +在 Microsoft Learn 上學習一些關於此主題的課程 + +* 使用 [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/6-generative-networks/?WT.mc_id=academic-77998-cacaste)/[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/5-generative-networks/?WT.mc_id=academic-77998-cacaste) 進行文本生成 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/217) + +## 回顧與自學 + +以下是一些擴展知識的文章 + +* 使用馬爾可夫鏈、LSTM 和 GPT-2 進行文本生成的不同方法:[博客文章](https://towardsdatascience.com/text-generation-gpt-2-lstm-markov-chain-9ea371820e1e) +* [Keras 文檔](https://keras.io/examples/generative/lstm_character_level_text_generation/)中的文本生成示例 + +## [作業](lab/README.md) + +我們已經了解了如何逐字符生成文本。在實驗中,您將探索基於單詞的文本生成。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/17-GenerativeNetworks/lab/README.md b/translations/hk/lessons/5-NLP/17-GenerativeNetworks/lab/README.md new file mode 100644 index 00000000..2aaed1aa --- /dev/null +++ b/translations/hk/lessons/5-NLP/17-GenerativeNetworks/lab/README.md @@ -0,0 +1,23 @@ + +# 使用 RNN 進行詞級文本生成 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗課題。 + +## 任務 + +在這次實驗中,你需要選擇一本書,並使用它作為數據集來訓練詞級文本生成器。 + +## 數據集 + +你可以使用任何一本書作為數據集。你可以在 [Project Gutenberg](https://www.gutenberg.org/) 找到許多免費的文本,例如,這裡有 Lewis Carroll 的《愛麗絲夢遊仙境》的直接連結:[Alice's Adventures in Wonderland](https://www.gutenberg.org/files/11/11-0.txt)。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/18-Transformers/README.md b/translations/hk/lessons/5-NLP/18-Transformers/README.md new file mode 100644 index 00000000..e23895cb --- /dev/null +++ b/translations/hk/lessons/5-NLP/18-Transformers/README.md @@ -0,0 +1,121 @@ + +# 注意機制與Transformer + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/118) + +自然語言處理(NLP)領域中最重要的問題之一是**機器翻譯**,這是一項支撐工具(如Google翻譯)的核心任務。在本節中,我們將專注於機器翻譯,或者更廣泛地說,任何*序列到序列*的任務(也稱為**句子轉換**)。 + +使用RNN時,序列到序列的實現是通過兩個循環神經網絡完成的,其中一個網絡是**編碼器**,將輸入序列壓縮成隱藏狀態;另一個網絡是**解碼器**,將該隱藏狀態展開為翻譯結果。然而,這種方法存在一些問題: + +* 編碼器網絡的最終狀態難以記住句子的開頭,導致模型在處理長句子時效果不佳。 +* 序列中的所有詞對結果的影響相同,但實際上,輸入序列中的某些詞對輸出序列的影響往往更大。 + +**注意機制**提供了一種方法,能夠對每個輸入向量對RNN輸出預測的上下文影響進行加權。其實現方式是通過在輸入RNN的中間狀態與輸出RNN之間創建捷徑。這樣,在生成輸出符號yt時,我們會考慮所有輸入的隱藏狀態hi,並賦予不同的權重係數αt,i。 + +![顯示帶有加性注意層的編碼器/解碼器模型的圖片](../../../../../translated_images/encoder-decoder-attention.7a726296894fb567aa2898c94b17b3289087f6705c11907df8301df9e5eeb3de.hk.png) + +> [Bahdanau等人, 2015](https://arxiv.org/pdf/1409.0473.pdf)中的加性注意機制編碼器-解碼器模型,圖片來源於[這篇博客文章](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html) + +注意矩陣{αi,j}表示某些輸入詞在生成輸出序列中某個詞時的影響程度。以下是一個這樣的矩陣示例: + +![顯示RNNsearch-50找到的對齊示例的圖片,來自Bahdanau - arviz.org](../../../../../translated_images/bahdanau-fig3.09ba2d37f202a6af11de6c82d2d197830ba5f4528d9ea430eb65fd3a75065973.hk.png) + +> 圖片來自[Bahdanau等人, 2015](https://arxiv.org/pdf/1409.0473.pdf)(圖3) + +注意機制是當前或接近當前NLP領域最先進技術的核心。然而,添加注意機制會大幅增加模型參數的數量,這導致了RNN的擴展問題。RNN擴展的一個主要限制是模型的循環特性使得訓練過程難以批量化和並行化。在RNN中,序列的每個元素需要按順序處理,這意味著它無法輕易並行化。 + +![帶有注意機制的編碼器解碼器](../../../../../lessons/5-NLP/18-Transformers/images/EncDecAttention.gif) + +> 圖片來自[Google的博客](https://research.googleblog.com/2016/09/a-neural-network-for-machine.html) + +注意機制的採用以及上述限制促成了如今我們熟知並使用的最先進Transformer模型的誕生,例如BERT和Open-GPT3。 + +## Transformer模型 + +Transformer的核心思想之一是避免RNN的序列特性,並創建一個在訓練過程中可並行化的模型。這是通過實現以下兩個概念來完成的: + +* 位置編碼 +* 使用自注意機制來捕捉模式,而不是使用RNN(或CNN)(這也是為什麼介紹Transformer的論文被稱為*[Attention is all you need](https://arxiv.org/abs/1706.03762)*) + +### 位置編碼/嵌入 + +位置編碼的想法如下: +1. 使用RNN時,詞元的相對位置由步數表示,因此不需要顯式表示。 +2. 然而,一旦我們切換到注意機制,我們需要知道序列中詞元的相對位置。 +3. 為了獲得位置編碼,我們將詞元序列與序列中的詞元位置序列(例如,0,1, ...)結合。 +4. 然後,我們將詞元位置與詞元嵌入向量混合。為了將位置(整數)轉換為向量,我們可以使用不同的方法: + +* 可訓練的嵌入,類似於詞元嵌入。我們在這裡考慮這種方法。我們在詞元及其位置上應用嵌入層,生成相同維度的嵌入向量,然後將它們相加。 +* 固定位置編碼函數,這是原始論文中提出的方法。 + + + +> 圖片由作者提供 + +通過位置嵌入,我們獲得的結果同時嵌入了原始詞元及其在序列中的位置。 + +### 多頭自注意機制 + +接下來,我們需要捕捉序列中的一些模式。為此,Transformer使用了**自注意機制**,這本質上是將注意機制應用於相同的輸入和輸出序列。應用自注意機制使我們能夠考慮句子中的**上下文**,並了解哪些詞之間存在關聯。例如,它可以幫助我們理解代詞(如*it*)所指代的詞,並考慮上下文: + +![](../../../../../translated_images/CoreferenceResolution.861924d6d384a7d68d8d0039d06a71a151f18a796b8b1330239d3590bd4947eb.hk.png) + +> 圖片來自[Google博客](https://research.googleblog.com/2017/08/transformer-novel-neural-network.html) + +在Transformer中,我們使用**多頭注意機制**,以賦予網絡捕捉多種類型依賴關係的能力,例如長期與短期詞關係、共指關係與其他關係等。 + +[TensorFlow Notebook](../../../../../lessons/5-NLP/18-Transformers/TransformersTF.ipynb)中包含有關Transformer層實現的更多細節。 + +### 編碼器-解碼器注意機制 + +在Transformer中,注意機制用於兩個地方: + +* 使用自注意機制捕捉輸入文本中的模式 +* 執行序列翻譯——這是編碼器與解碼器之間的注意層。 + +編碼器-解碼器注意機制與RNN中使用的注意機制非常相似,如本節開頭所述。以下動畫圖解釋了編碼器-解碼器注意機制的作用。 + +![動畫GIF展示Transformer模型中的計算過程](../../../../../lessons/5-NLP/18-Transformers/images/transformer-animated-explanation.gif) + +由於每個輸入位置可以獨立映射到每個輸出位置,Transformer比RNN更容易並行化,這使得更大、更具表達力的語言模型成為可能。每個注意頭可以用於學習詞之間的不同關係,從而改進下游自然語言處理任務。 + +## BERT + +**BERT**(Bidirectional Encoder Representations from Transformers)是一個非常大的多層Transformer網絡,*BERT-base*有12層,*BERT-large*有24層。該模型首先在大規模文本數據(維基百科+書籍)上進行無監督預訓練(預測句子中的被遮蔽詞)。在預訓練過程中,模型吸收了大量的語言理解能力,這些能力可以通過微調其他數據集來利用。這個過程被稱為**遷移學習**。 + +![圖片來自http://jalammar.github.io/illustrated-bert/](../../../../../translated_images/jalammarBERT-language-modeling-masked-lm.34f113ea5fec4362e39ee4381aab7cad06b5465a0b5f053a0f2aa05fbe14e746.hk.png) + +> 圖片[來源](http://jalammar.github.io/illustrated-bert/) + +## ✍️ 練習:Transformer + +繼續學習以下筆記本: + +* [PyTorch中的Transformer](../../../../../lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) +* [TensorFlow中的Transformer](../../../../../lessons/5-NLP/18-Transformers/TransformersTF.ipynb) + +## 總結 + +在本課中,你學習了Transformer和注意機制,這些都是NLP工具箱中的重要工具。Transformer架構有許多變體,包括BERT、DistilBERT、BigBird、OpenGPT3等,這些模型可以進行微調。[HuggingFace套件](https://github.com/huggingface/)提供了使用PyTorch和TensorFlow訓練這些架構的資源庫。 + +## 🚀 挑戰 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/218) + +## 複習與自學 + +* [博客文章](https://mchromiak.github.io/articles/2017/Sep/12/Transformer-Attention-is-all-you-need/),解釋了經典的[Attention is all you need](https://arxiv.org/abs/1706.03762) Transformer論文。 +* [一系列博客文章](https://towardsdatascience.com/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452),詳細解釋了Transformer的架構。 + +## [作業](assignment.md) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/18-Transformers/assignment.md b/translations/hk/lessons/5-NLP/18-Transformers/assignment.md new file mode 100644 index 00000000..8d30beb6 --- /dev/null +++ b/translations/hk/lessons/5-NLP/18-Transformers/assignment.md @@ -0,0 +1,15 @@ + +# 作業:Transformers + +在 HuggingFace 上試驗 Transformers!嘗試使用他們提供的腳本來操作網站上各種可用的模型:https://huggingface.co/docs/transformers/run_scripts。嘗試使用他們的一個數據集,然後從本課程或 Kaggle 匯入您自己的數據集,看看是否能生成有趣的文本。製作一個筆記本來記錄您的發現。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/19-NER/README.md b/translations/hk/lessons/5-NLP/19-NER/README.md new file mode 100644 index 00000000..545701ae --- /dev/null +++ b/translations/hk/lessons/5-NLP/19-NER/README.md @@ -0,0 +1,94 @@ + +# 命名實體識別 + +到目前為止,我們主要集中於一個自然語言處理(NLP)任務——分類。然而,還有其他可以通過神經網絡完成的 NLP 任務。其中一個任務是 **[命名實體識別](https://wikipedia.org/wiki/Named-entity_recognition)**(NER),它負責識別文本中的特定實體,例如地點、人名、日期時間範圍、化學公式等等。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/119) + +## 使用 NER 的例子 + +假設你想開發一個自然語言聊天機器人,類似於 Amazon Alexa 或 Google Assistant。智能聊天機器人的工作方式是通過對輸入句子進行文本分類來*理解*用戶的需求。這種分類的結果被稱為**意圖**,它決定了聊天機器人應該執行的操作。 + +Bot NER + +> 圖片由作者提供 + +然而,用戶可能會在短語中提供一些參數。例如,當詢問天氣時,她可能會指定地點或日期。機器人應該能夠理解這些實體,並相應地填充參數槽,然後執行操作。而這正是 NER 的作用所在。 + +> ✅ 另一個例子是[分析科學醫學論文](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)。我們需要尋找的主要內容是特定的醫學術語,例如疾病和醫學物質。雖然少量疾病可能可以通過子字符串搜索提取,但更複雜的實體,例如化學化合物和藥物名稱,則需要更複雜的方法。 + +## NER 作為標記分類 + +NER 模型本質上是**標記分類模型**,因為對於每個輸入標記,我們需要判斷它是否屬於某個實體,如果屬於——則屬於哪個實體類別。 + +考慮以下論文標題: + +**三尖瓣反流**和**碳酸鋰**在新生兒中的**毒性**。 + +這裡的實體是: + +* 三尖瓣反流是一種疾病(`DIS`) +* 碳酸鋰是一種化學物質(`CHEM`) +* 毒性也是一種疾病(`DIS`) + +注意,一個實體可能跨越多個標記。而且,如本例所示,我們需要區分兩個連續的實體。因此,通常為每個實體使用兩個類別——一個指定實體的第一個標記(通常使用 `B-` 前綴,表示**開始**),另一個表示實體的延續部分(`I-`,表示**內部標記**)。我們還使用 `O` 作為類別來表示所有**其他**標記。這種標記標籤方法被稱為 [BIO 標籤](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging))(或 IOB)。當標記後,我們的標題將如下所示: + +標記 | 標籤 +------|----- +三尖瓣 | B-DIS +反流 | I-DIS +和 | O +碳酸 | B-CHEM +鋰 | I-CHEM +毒性 | B-DIS +在 | O +新生兒 | O +中 | O +的 | O +毒性 | O +。 | O + +由於我們需要在標記和類別之間建立一對一的對應關係,我們可以從這張圖中訓練一個最右側的**多對多**神經網絡模型: + +![展示常見循環神經網絡模式的圖片。](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.hk.jpg) + +> *圖片來自 [這篇博客文章](http://karpathy.github.io/2015/05/21/rnn-effectiveness/),作者是 [Andrej Karpathy](http://karpathy.github.io/)。NER 標記分類模型對應於圖片中最右側的網絡架構。* + +## 訓練 NER 模型 + +由於 NER 模型本質上是一個標記分類模型,我們可以使用我們已經熟悉的 RNN 來完成這項任務。在這種情況下,每個循環網絡的塊都會返回標記 ID。以下範例筆記本展示了如何訓練 LSTM 進行標記分類。 + +## ✍️ 範例筆記本:NER + +繼續學習以下筆記本: + +* [使用 TensorFlow 的 NER](../../../../../lessons/5-NLP/19-NER/NER-TF.ipynb) + +## 結論 + +NER 模型是一個**標記分類模型**,這意味著它可以用於執行標記分類。這是一個 NLP 中非常常見的任務,幫助識別文本中的特定實體,包括地點、名字、日期等。 + +## 🚀 挑戰 + +完成以下連結的作業,訓練一個醫學術語的命名實體識別模型,然後嘗試在不同的數據集上使用它。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/219) + +## 回顧與自學 + +閱讀博客 [循環神經網絡的非凡效能](http://karpathy.github.io/2015/05/21/rnn-effectiveness/),並按照文章中的進一步閱讀部分進行學習,以加深你的知識。 + +## [作業](lab/README.md) + +在本課的作業中,你需要訓練一個醫學實體識別模型。你可以從本課中描述的 LSTM 模型訓練開始,然後使用 BERT 轉換器模型。閱讀[指導說明](lab/README.md)以獲取所有細節。 + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/19-NER/lab/README.md b/translations/hk/lessons/5-NLP/19-NER/lab/README.md new file mode 100644 index 00000000..4e1733df --- /dev/null +++ b/translations/hk/lessons/5-NLP/19-NER/lab/README.md @@ -0,0 +1,59 @@ + +# 命名實體識別 (NER) + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗課題。 + +## 任務 + +在這次實驗中,你需要訓練一個針對醫學術語的命名實體識別模型。 + +## 數據集 + +為了訓練 NER 模型,我們需要一個包含醫學實體標註的數據集。[BC5CDR 數據集](https://biocreative.bioinformatics.udel.edu/tasks/biocreative-v/track-3-cdr/) 包含來自超過 1500 篇論文的疾病和化學物質實體標註。你可以在其網站註冊後下載該數據集。 + +BC5CDR 數據集的格式如下: + +``` +6794356|t|Tricuspid valve regurgitation and lithium carbonate toxicity in a newborn infant. +6794356|a|A newborn with massive tricuspid regurgitation, atrial flutter, congestive heart failure, and a high serum lithium level is described. This is the first patient to initially manifest tricuspid regurgitation and atrial flutter, and the 11th described patient with cardiac disease among infants exposed to lithium compounds in the first trimester of pregnancy. Sixty-three percent of these infants had tricuspid valve involvement. Lithium carbonate may be a factor in the increasing incidence of congenital heart disease when taken during early pregnancy. It also causes neurologic depression, cyanosis, and cardiac arrhythmia when consumed prior to delivery. +6794356 0 29 Tricuspid valve regurgitation Disease D014262 +6794356 34 51 lithium carbonate Chemical D016651 +6794356 52 60 toxicity Disease D064420 +... +``` + +在這個數據集中,第一行和第二行分別是論文的標題和摘要,接著是各個實體的起始和結束位置,這些位置是基於標題+摘要的文本塊。此外,還提供了該實體在某些醫學本體中的本體 ID。 + +你需要編寫一些 Python 代碼,將這些數據轉換為 BIO 編碼格式。 + +## 網絡架構 + +第一次嘗試 NER 可以使用 LSTM 網絡,就像你在課程中看到的示例一樣。然而,在自然語言處理任務中,[Transformer 架構](https://en.wikipedia.org/wiki/Transformer_(machine_learning_model)),尤其是 [BERT 語言模型](https://en.wikipedia.org/wiki/BERT_(language_model)),通常能夠取得更好的效果。預訓練的 BERT 模型能夠理解語言的基本結構,並且可以通過相對較小的數據集和計算成本進行微調以完成特定任務。 + +由於我們計劃將 NER 應用於醫學場景,因此使用基於醫學文本訓練的 BERT 模型是合理的。Microsoft Research 發布了一個名為 [PubMedBERT][PubMedBERT] 的預訓練模型 ([相關論文][PubMedBERT-Pub]),該模型使用 [PubMed](https://pubmed.ncbi.nlm.nih.gov/) 資料庫中的文本進行微調。 + +訓練 Transformer 模型的標準工具是 [Hugging Face Transformers](https://huggingface.co/) 庫。該庫還包含一個由社群維護的預訓練模型倉庫,其中包括 PubMedBERT。要加載並使用這個模型,我們只需要幾行代碼: + +```python +model_name = "microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract" +classes = ... # number of classes: 2*entities+1 +tokenizer = AutoTokenizer.from_pretrained(model_name) +model = BertForTokenClassification.from_pretrained(model_name, classes) +``` + +這段代碼提供了用於標記分類任務的 `model`(基於 `classes` 的類別數),以及可以將輸入文本分割為標記的 `tokenizer` 對象。你需要將數據集轉換為 BIO 格式,並考慮 PubMedBERT 的分詞方式。你可以參考 [這段 Python 代碼](https://gist.github.com/shwars/580b55684be3328eb39ecf01b9cbbd88) 作為靈感。 + +## 收穫 + +這項任務非常接近於實際工作中可能遇到的任務,尤其是當你希望從大量自然語言文本中獲得更多洞察時。在我們的案例中,我們可以將訓練好的模型應用於 [COVID 相關論文數據集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge),並觀察能夠獲得哪些洞察。[這篇博客文章](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/) 和 [這篇論文](https://www.mdpi.com/2504-2289/6/1/4) 描述了使用 NER 對這些論文集進行研究的可能性。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/20-LangModels/README.md b/translations/hk/lessons/5-NLP/20-LangModels/README.md new file mode 100644 index 00000000..0b94c379 --- /dev/null +++ b/translations/hk/lessons/5-NLP/20-LangModels/README.md @@ -0,0 +1,64 @@ + +# 預訓練大型語言模型 + +在之前的所有任務中,我們使用標註數據集訓練神經網絡來完成特定任務。對於大型 Transformer 模型,例如 BERT,我們使用自監督的方式進行語言建模來構建語言模型,然後通過進一步的特定領域訓練使其專門化以完成特定的下游任務。然而,研究表明,大型語言模型也能在沒有任何特定領域訓練的情況下解決許多任務。能夠做到這一點的一系列模型被稱為 **GPT**:生成式預訓練 Transformer。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/120) + +## 文本生成與困惑度 + +神經網絡能夠在沒有下游訓練的情況下完成一般任務的概念在 [Language Models are Unsupervised Multitask Learners](https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf) 論文中提出。主要思想是許多其他任務可以通過 **文本生成** 來建模,因為理解文本本質上意味著能夠生成文本。由於模型是基於包含人類知識的大量文本進行訓練的,它也因此對各種主題有一定的了解。 + +> 理解並能夠生成文本也意味著對周圍世界有一定的認識。人類在很大程度上也是通過閱讀來學習,而 GPT 網絡在這方面與人類相似。 + +文本生成網絡通過預測下一個詞的概率 $$P(w_N)$$ 來工作。然而,下一個詞的無條件概率等於該詞在文本語料庫中的出現頻率。GPT 能夠提供基於前面詞的下一個詞的 **條件概率**:$$P(w_N | w_{n-1}, ..., w_0)$$ + +> 您可以在我們的 [初學者數據科學課程](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/1-Introduction/04-stats-and-probability) 中了解更多關於概率的內容。 + +語言生成模型的質量可以通過 **困惑度** 來定義。這是一種內在的度量,允許我們在沒有任何特定任務數據集的情況下衡量模型的質量。它基於 *句子的概率* 的概念——模型對可能是真實的句子(即模型不會被它 **困惑**)賦予高概率,而對那些不太合理的句子(例如 *Can it does what?*)賦予低概率。當我們給模型提供來自真實文本語料庫的句子時,我們期望它們具有高概率和低 **困惑度**。數學上,它被定義為測試集的歸一化逆概率: +$$ +\mathrm{Perplexity}(W) = \sqrt[N]{1\over P(W_1,...,W_N)} +$$ + +**您可以使用 [Hugging Face 的 GPT 驅動文本編輯器](https://transformer.huggingface.co/doc/gpt2-large)** 來試驗文本生成。在這個編輯器中,您開始撰寫文本,按下 **[TAB]** 鍵後會提供幾個完成選項。如果選項太短或您不滿意,可以再次按下 [TAB] 鍵,您將獲得更多選項,包括更長的文本片段。 + +## GPT 是一個系列 + +GPT 不是單一模型,而是一系列由 [OpenAI](https://openai.com) 開發和訓練的模型。 + +在 GPT 模型系列中,我們有: + +| [GPT-2](https://huggingface.co/docs/transformers/model_doc/gpt2#openai-gpt2) | [GPT-3](https://openai.com/research/language-models-are-few-shot-learners) | [GPT-4](https://openai.com/gpt-4) | +| -- | -- | -- | +|擁有最多 15 億參數的語言模型。| 擁有最多 175 億參數的語言模型 | 擁有 100 萬億參數,並且接受圖像和文本輸入,輸出文本。 | + +GPT-3 和 GPT-4 模型可通過 [Microsoft Azure 的認知服務](https://azure.microsoft.com/en-us/services/cognitive-services/openai-service/#overview?WT.mc_id=academic-77998-cacaste) 和 [OpenAI API](https://openai.com/api/) 使用。 + +## 提示工程 + +由於 GPT 已經基於大量數據進行訓練以理解語言和代碼,它能根據輸入(提示)提供輸出。提示是 GPT 的輸入或查詢,通過提示提供指令讓模型完成接下來的任務。為了獲得期望的結果,您需要最有效的提示,這涉及選擇合適的詞語、格式、短語甚至符號。這種方法被稱為 [提示工程](https://learn.microsoft.com/en-us/shows/ai-show/the-basics-of-prompt-engineering-with-azure-openai-service?WT.mc_id=academic-77998-bethanycheum)。 + +[此文檔](https://learn.microsoft.com/en-us/semantic-kernel/prompt-engineering/?WT.mc_id=academic-77998-bethanycheum) 提供了更多關於提示工程的信息。 + +## ✍️ 示例筆記本:[使用 OpenAI-GPT](../../../../../lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) + +繼續學習以下筆記本: + +* [使用 OpenAI-GPT 和 Hugging Face Transformers 生成文本](../../../../../lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) + +## 結論 + +新的通用預訓練語言模型不僅能建模語言結構,還包含大量自然語言。因此,它們可以在零樣本或少樣本設置中有效地解決一些 NLP 任務。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/220) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/5-NLP/README.md b/translations/hk/lessons/5-NLP/README.md new file mode 100644 index 00000000..1908cbd4 --- /dev/null +++ b/translations/hk/lessons/5-NLP/README.md @@ -0,0 +1,78 @@ + +# 自然語言處理 + +![NLP 任務的手繪圖概述](../../../../translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.hk.png) + +在本節中,我們將專注於使用神經網絡來處理與**自然語言處理 (NLP)** 相關的任務。我們希望計算機能夠解決許多 NLP 問題: + +* **文本分類** 是一種典型的文本序列分類問題。例如,將電子郵件分類為垃圾郵件或非垃圾郵件,或者將文章分類為體育、商業、政治等。此外,在開發聊天機器人時,我們經常需要理解用戶的意圖——這種情況下我們處理的是**意圖分類**。意圖分類通常需要處理許多類別。 +* **情感分析** 是一種典型的回歸問題,我們需要為句子的正面/負面情感賦予一個數值。一種更高級的情感分析是**基於方面的情感分析** (ABSA),我們不是為整個句子賦予情感,而是為句子的不同部分(方面)賦予情感,例如:*在這家餐廳,我喜歡菜餚,但氣氛很糟糕*。 +* **命名實體識別** (NER) 是從文本中提取特定實體的問題。例如,我們需要理解在短語 *我明天需要飛往巴黎* 中,*明天* 指的是日期 (DATE),而 *巴黎* 是地點 (LOCATION)。 +* **關鍵詞提取** 與 NER 類似,但我們需要自動提取對句子意義重要的詞語,而不需要針對特定實體類型進行預訓練。 +* **文本聚類** 在我們希望將相似的句子分組時非常有用,例如,技術支持對話中相似的請求。 +* **問答系統** 是指模型回答特定問題的能力。模型接收一段文本和一個問題作為輸入,並需要提供文本中包含答案的位置(有時需要生成答案文本)。 +* **文本生成** 是模型生成新文本的能力。這可以被視為一種分類任務,根據某些*文本提示*預測下一個字母/單詞。高級文本生成模型(如 GPT-3)能夠通過一種稱為[提示編程](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0)或[提示工程](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)的技術解決其他 NLP 任務,例如分類。 +* **文本摘要** 是一種技術,我們希望計算機能夠“閱讀”長文本並將其總結為幾句話。 +* **機器翻譯** 可以被視為一種語言理解和另一種語言文本生成的結合。 + +最初,大多數 NLP 任務是通過傳統方法(如語法)解決的。例如,在機器翻譯中,解析器被用來將初始句子轉換為語法樹,然後提取高層語義結構來表示句子的含義,基於這些含義和目標語言的語法生成結果。如今,許多 NLP 任務使用神經網絡更有效地解決。 + +> 許多經典的 NLP 方法已在 [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) Python 庫中實現。網上有一本很棒的 [NLTK 書](https://www.nltk.org/book/),涵蓋了如何使用 NLTK 解決不同的 NLP 任務。 + +在我們的課程中,我們將主要專注於使用神經網絡進行 NLP,並在需要時使用 NLTK。 + +我們已經學習了如何使用神經網絡處理表格數據和圖像。這些數據類型與文本的主要區別在於,文本是可變長度的序列,而圖像的輸入大小是事先已知的。雖然卷積網絡可以從輸入數據中提取模式,但文本中的模式更為複雜。例如,否定可能與主語分隔許多單詞(例如:*我不喜歡橙子*,與 *我不喜歡那些又大又多彩又美味的橙子*),但仍應被解釋為一個模式。因此,為了處理語言,我們需要引入新的神經網絡類型,例如*循環網絡*和*變壓器*。 + +## 安裝庫 + +如果您使用本地 Python 安裝來運行本課程,您可能需要使用以下命令安裝 NLP 所需的所有庫: + +**對於 PyTorch** +```bash +pip install -r requirements-torch.txt +``` +**對於 TensorFlow** +```bash +pip install -r requirements-tf.txt +``` + +> 您可以在 [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) 上嘗試使用 TensorFlow 進行 NLP。 + +## GPU 警告 + +在本節中,我們的一些示例將訓練相當大的模型。 +* **使用支持 GPU 的電腦**:建議在支持 GPU 的電腦上運行筆記本,以減少處理大型模型時的等待時間。 +* **GPU 記憶體限制**:在 GPU 上運行可能會導致 GPU 記憶體不足的情況,特別是在訓練大型模型時。 +* **GPU 記憶體消耗**:訓練過程中消耗的 GPU 記憶體量取決於多種因素,包括小批量大小。 +* **減小小批量大小**:如果遇到 GPU 記憶體問題,可以考慮減小代碼中的小批量大小作為潛在解決方案。 +* **TensorFlow GPU 記憶體釋放**:舊版本的 TensorFlow 在一個 Python 內核中訓練多個模型時可能無法正確釋放 GPU 記憶體。為了有效管理 GPU 記憶體使用,您可以配置 TensorFlow 僅在需要時分配 GPU 記憶體。 +* **代碼包含**:要設置 TensorFlow 僅在需要時增長 GPU 記憶體分配,請在筆記本中包含以下代碼: + +```python +physical_devices = tf.config.list_physical_devices('GPU') +if len(physical_devices)>0: + tf.config.experimental.set_memory_growth(physical_devices[0], True) +``` + +如果您對從經典機器學習角度學習 NLP 感興趣,請訪問[這套課程](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)。 + +## 本節內容 +在本節中,我們將學習: + +* [將文本表示為張量](13-TextRep/README.md) +* [詞嵌入](14-Emdeddings/README.md) +* [語言建模](15-LanguageModeling/README.md) +* [循環神經網絡](16-RNN/README.md) +* [生成網絡](17-GenerativeNetworks/README.md) +* [變壓器](18-Transformers/README.md) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/6-Other/21-GeneticAlgorithms/README.md b/translations/hk/lessons/6-Other/21-GeneticAlgorithms/README.md new file mode 100644 index 00000000..f8b70f03 --- /dev/null +++ b/translations/hk/lessons/6-Other/21-GeneticAlgorithms/README.md @@ -0,0 +1,89 @@ + +# 遺傳算法 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/121) + +**遺傳算法**(Genetic Algorithms, GA)基於一種**進化式方法**來解決人工智能問題,通過模擬群體進化的方式來尋找給定問題的最佳解。這一方法由 [John Henry Holland](https://wikipedia.org/wiki/John_Henry_Holland) 在1975年提出。 + +遺傳算法基於以下幾個核心概念: + +* 問題的有效解可以用**基因**來表示 +* **交叉**(Crossover)允許我們將兩個解結合起來,生成一個新的有效解 +* **選擇**(Selection)通過某種**適應度函數**來選擇更優的解 +* **突變**(Mutations)被引入以打破優化過程中的穩定性,幫助跳出局部最小值 + +如果你想實現一個遺傳算法,你需要以下幾步: + +* 找到一種方法,用**基因** g∈Γ 來編碼問題的解 +* 在基因集合 Γ 上定義**適應度函數** fit: Γ→**R**,函數值越小表示解越優 +* 定義**交叉**機制,用於將兩個基因結合生成新的有效解 crossover: Γ2→Γ +* 定義**突變**機制 mutate: Γ→Γ + +在許多情況下,交叉和突變是相對簡單的算法,用於操作基因作為數字序列或位向量。 + +遺傳算法的具體實現可能因情況而異,但其整體結構如下: + +1. 選擇初始群體 G⊂Γ +2. 隨機選擇本步要執行的操作:交叉或突變 +3. **交叉**: + * 隨機選擇兩個基因 g1, g2 ∈ G + * 計算交叉結果 g=crossover(g1,g2) + * 如果 fit(g)1) 或 fit(g)2),則用 g 替換群體中的相應基因 +4. **突變** - 隨機選擇一個基因 g∈G,並用 mutate(g) 替換它 +5. 從第2步重複,直到適應度函數值足夠小,或達到步數限制 + +## 常見任務 + +遺傳算法通常用於解決以下任務: + +1. 排程優化 +1. 最佳裝箱 +1. 最佳切割 +1. 加速窮舉搜索 + +## ✍️ 練習:遺傳算法 + +在以下筆記本中繼續學習: + +前往 [這個筆記本](../../../../../lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) 查看兩個使用遺傳算法的例子: + +1. 財寶的公平分配 +1. 八皇后問題 + +## 總結 + +遺傳算法被用於解決許多問題,包括物流和搜索問題。這一領域的靈感來自於心理學和計算機科學的交叉研究。 + +## 🚀 挑戰 + +「遺傳算法易於實現,但其行為難以理解。」[來源](https://wikipedia.org/wiki/Genetic_algorithm) 請進行一些研究,找到一個遺傳算法的實現,例如解數獨問題,並用草圖或流程圖解釋其工作原理。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/221) + +## 回顧與自學 + +觀看 [這段精彩的影片](https://www.youtube.com/watch?v=qv6UVOQ0F44),了解計算機如何通過使用遺傳算法訓練的神經網絡學習玩《超級瑪利奧》。我們將在[下一節](../22-DeepRL/README.md)中學習更多關於計算機學習玩遊戲的內容。 + +## [作業:丟番圖方程](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) + +你的目標是解決所謂的**丟番圖方程**——一種具有整數根的方程。例如,考慮方程 a+2b+3c+4d=30。你需要找到滿足該方程的整數根。 + +*此作業靈感來自於[這篇文章](https://habr.com/post/128704/)。* + +提示: + +1. 你可以考慮根的範圍為 [0;30] +1. 作為基因,可以考慮使用根值的列表 + +使用 [Diophantine.ipynb](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) 作為起點。 + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/6-Other/22-DeepRL/README.md b/translations/hk/lessons/6-Other/22-DeepRL/README.md new file mode 100644 index 00000000..d31b00ed --- /dev/null +++ b/translations/hk/lessons/6-Other/22-DeepRL/README.md @@ -0,0 +1,126 @@ + +# 深度強化學習 + +強化學習(Reinforcement Learning, RL)被視為與監督學習和非監督學習並列的基本機器學習範式之一。在監督學習中,我們依賴於已知結果的數據集,而強化學習則基於**透過實踐學習**。例如,當我們第一次接觸一款電腦遊戲時,即使不知道規則,我們也會開始玩,並通過遊玩和調整行為逐漸提升技能。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/122) + +進行強化學習需要以下幾點: + +* 一個**環境**或**模擬器**,用來設定遊戲規則。我們應該能夠在模擬器中運行實驗並觀察結果。 +* 一個**獎勵函數**,用來指示實驗的成功程度。例如,在學習玩電腦遊戲的情況下,獎勵可以是我們的最終得分。 + +基於獎勵函數,我們應該能夠調整行為並提升技能,以便下次表現得更好。強化學習與其他類型的機器學習的主要區別在於,在強化學習中,我們通常要等到遊戲結束後才能知道是贏還是輸。因此,我們無法判斷某個單獨的動作是否是好的——只有在遊戲結束時才能獲得獎勵。 + +在強化學習過程中,我們通常會進行多次實驗。在每次實驗中,我們需要在遵循目前學到的最佳策略(**利用**)和探索新的可能狀態(**探索**)之間取得平衡。 + +## OpenAI Gym + +一個非常適合強化學習的工具是 [OpenAI Gym](https://gym.openai.com/)——一個**模擬環境**,可以模擬從 Atari 遊戲到平衡桿物理學等多種環境。它是訓練強化學習算法最受歡迎的模擬環境之一,由 [OpenAI](https://openai.com/) 維護。 + +> **Note**: 你可以在 [這裡](https://gym.openai.com/envs/#classic_control) 查看 OpenAI Gym 提供的所有環境。 + +## CartPole 平衡 + +你可能見過現代的平衡裝置,例如 *Segway* 或 *陀螺車*。它們能夠通過調整輪子的運動來響應加速度計或陀螺儀的信號,從而自動保持平衡。在本節中,我們將學習如何解決類似的問題——平衡一根桿子。這類似於馬戲團表演者需要在手上平衡一根桿子的情況——但這裡的平衡僅發生在一維空間中。 + +一個簡化的平衡問題被稱為 **CartPole** 問題。在 CartPole 世界中,我們有一個可以左右移動的水平滑塊,目標是讓滑塊上的垂直桿保持平衡。 + +a cartpole + +要創建並使用這個環境,我們只需要幾行 Python 代碼: + +```python +import gym +env = gym.make("CartPole-v1") + +env.reset() +done = False +total_reward = 0 +while not done: + env.render() + action = env.action_space.sample() + observaton, reward, done, info = env.step(action) + total_reward += reward + +print(f"Total reward: {total_reward}") +``` + +每個環境都可以通過以下方式訪問: +* `env.reset` 開始一個新的實驗 +* `env.step` 執行一個模擬步驟。它接收來自**動作空間**的**動作**,並返回**觀察值**(來自觀察空間)、獎勵以及一個終止標誌。 + +在上面的例子中,我們在每一步執行隨機動作,因此實驗的持續時間非常短: + +![non-balancing cartpole](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-nobalance.gif) + +強化學習算法的目標是訓練一個模型——所謂的**策略** π——它能根據給定的狀態返回相應的動作。我們也可以將策略視為概率性的,例如,對於任何狀態 *s* 和動作 *a*,它會返回 π(*a*|*s*),即在狀態 *s* 下採取動作 *a* 的概率。 + +## 策略梯度算法 + +建模策略的最明顯方法是創建一個神經網絡,該網絡將狀態作為輸入,並返回相應的動作(或所有動作的概率)。在某種意義上,這類似於普通的分類任務,但有一個主要區別——我們事先並不知道在每一步應該採取哪些動作。 + +這裡的想法是估計這些概率。我們構建一個**累積獎勵**向量,顯示實驗中每一步的總獎勵。我們還應用**獎勵折扣**,通過將早期的獎勵乘以某個係數 γ=0.99,來減少早期獎勵的影響。然後,我們強化實驗路徑中帶來較大獎勵的步驟。 + +> 想了解更多關於策略梯度算法的內容,並查看其實際應用,請參考 [示例筆記本](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb)。 + +## Actor-Critic 算法 + +策略梯度方法的一個改進版本被稱為 **Actor-Critic**。其主要思想是神經網絡將被訓練來返回兩個結果: + +* 策略,決定應該採取的動作。這部分被稱為 **actor**。 +* 對當前狀態下可期望獲得的總獎勵的估計——這部分被稱為 **critic**。 + +在某種意義上,這種架構類似於 [GAN](../../4-ComputerVision/10-GANs/README.md),我們有兩個網絡相互對抗訓練。在 Actor-Critic 模型中,actor 提出我們需要採取的動作,而 critic 嘗試批判性地估計結果。然而,我們的目標是讓這兩個網絡協同訓練。 + +由於我們知道實驗過程中的真實累積獎勵以及 critic 返回的結果,因此構建一個損失函數來最小化它們之間的差異相對容易。這將給我們**critic 損失**。我們可以使用與策略梯度算法相同的方法計算**actor 損失**。 + +運行這些算法後,我們可以期望 CartPole 表現如下: + +![a balancing cartpole](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-balance.gif) + +## ✍️ 練習:策略梯度和 Actor-Critic 強化學習 + +在以下筆記本中繼續學習: + +* [TensorFlow 中的強化學習](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) +* [PyTorch 中的強化學習](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) + +## 其他強化學習任務 + +如今,強化學習是一個快速增長的研究領域。一些有趣的強化學習例子包括: + +* 教電腦玩 **Atari 遊戲**。這個問題的挑戰在於,我們沒有簡單的向量形式的狀態,而是截圖——我們需要使用 CNN 將屏幕圖像轉換為特徵向量,或提取獎勵信息。Atari 遊戲可以在 Gym 中找到。 +* 教電腦下棋,例如國際象棋和圍棋。最近,像 **Alpha Zero** 這樣的最先進程序是通過兩個代理相互對弈並逐步改進來從零開始訓練的。 +* 在工業中,強化學習被用於從模擬中創建控制系統。一個名為 [Bonsai](https://azure.microsoft.com/services/project-bonsai/?WT.mc_id=academic-77998-cacaste) 的服務專門為此設計。 + +## 總結 + +我們現在已經學會如何通過提供定義遊戲期望狀態的獎勵函數,並讓代理智能地探索搜索空間,來訓練代理以取得良好結果。我們成功嘗試了兩種算法,並在相對較短的時間內取得了良好的結果。然而,這只是你進入強化學習領域的起點,如果你想深入研究,應該考慮參加專門的課程。 + +## 🚀 挑戰 + +探索「其他強化學習任務」部分列出的應用,並嘗試實現其中一個! + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/222) + +## 回顧與自學 + +在我們的 [機器學習初學者課程](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/README.md) 中了解更多關於經典強化學習的內容。 + +觀看 [這段精彩的影片](https://www.youtube.com/watch?v=qv6UVOQ0F44),了解電腦如何學會玩超級瑪利歐。 + +## 作業:[訓練一輛山地車](lab/README.md) + +在這次作業中,你的目標是訓練一個不同的 Gym 環境——[山地車](https://www.gymlibrary.ml/environments/classic_control/mountain_car/)。 + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/6-Other/22-DeepRL/lab/README.md b/translations/hk/lessons/6-Other/22-DeepRL/lab/README.md new file mode 100644 index 00000000..2ef157de --- /dev/null +++ b/translations/hk/lessons/6-Other/22-DeepRL/lab/README.md @@ -0,0 +1,23 @@ + +## 環境介紹 + +Mountain Car 環境由一輛被困在山谷中的車組成。你的目標是跳出山谷並到達旗幟的位置。你可以執行的動作包括向左加速、向右加速,或者什麼都不做。你可以觀察到車在 x 軸上的位置以及速度。 + +## 開始筆記本 + +通過打開 [MountainCar.ipynb](../../../../../../lessons/6-Other/22-DeepRL/lab/MountainCar.ipynb) 開始這個實驗。 + +## 重點 + +在這個實驗中,你應該學到將 RL 演算法應用到一個新環境通常是相當直接的,因為 OpenAI Gym 的所有環境都具有相同的介面,而演算法本身並不會過多依賴於環境的特性。你甚至可以重新結構化 Python 程式碼,以便將任何環境作為參數傳遞給 RL 演算法。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/6-Other/23-MultiagentSystems/README.md b/translations/hk/lessons/6-Other/23-MultiagentSystems/README.md new file mode 100644 index 00000000..04a51aa6 --- /dev/null +++ b/translations/hk/lessons/6-Other/23-MultiagentSystems/README.md @@ -0,0 +1,164 @@ + +# 多代理系統 + +實現智能的一種可能方法是所謂的**湧現**(或**協同**)方法,這基於一個事實:許多相對簡單的代理的組合行為可以導致整個系統的更複雜(或更智能)的行為。理論上,這基於[集體智慧](https://en.wikipedia.org/wiki/Collective_intelligence)、[湧現主義](https://en.wikipedia.org/wiki/Global_brain)和[進化控制論](https://en.wikipedia.org/wiki/Global_brain)的原則,這些原則指出,當低層系統被適當地組合成高層系統時,會產生某種附加價值(即所謂的*超系統轉換原則*)。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/123) + +**多代理系統**的方向在1990年代因互聯網和分佈式系統的增長而在人工智能領域中湧現。經典的人工智能教科書之一[《人工智能:現代方法》](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach)從多代理系統的角度探討了經典人工智能的觀點。 + +多代理方法的核心是**代理**的概念——一個生活在某個**環境**中的實體,它可以感知並對其進行操作。這是一個非常廣泛的定義,代理可以有許多不同的類型和分類: + +* 按其推理能力: + - **反應型**代理通常具有簡單的請求-響應類型行為 + - **推理型**代理使用某種邏輯推理和/或規劃能力 +* 按代理執行代碼的位置: + - **靜態**代理在專用的網絡節點上工作 + - **移動**代理可以在網絡節點之間移動其代碼 +* 按其行為: + - **被動代理**沒有特定目標。這類代理可以對外部刺激作出反應,但不會主動採取行動。 + - **主動代理**有一些目標並努力追求 + - **認知代理**涉及複雜的規劃和推理 + +如今,多代理系統被應用於許多領域: + +* 在遊戲中,許多非玩家角色使用某種人工智能,可以被視為智能代理 +* 在視頻製作中,渲染涉及人群的複雜3D場景通常使用多代理模擬 +* 在系統建模中,多代理方法用於模擬複雜模型的行為。例如,多代理方法已成功用於預測COVID-19疾病在全球的傳播。類似的方法可以用於模擬城市交通,並觀察其對交通規則變化的反應。 +* 在複雜的自動化系統中,每個設備可以作為獨立的代理行動,這使得整個系統不那麼單一化並更加穩健。 + +我們不會花太多時間深入探討多代理系統,但會考慮一個**多代理建模**的例子。 + +## NetLogo + +[NetLogo](https://ccl.northwestern.edu/netlogo/)是一個基於修改版[Logo](https://en.wikipedia.org/wiki/Logo_(programming_language))編程語言的多代理建模環境。這種語言是為了教孩子編程概念而開發的,它允許你控制一個名為**烏龜**的代理,該代理可以移動並留下痕跡。這使得創建複雜的幾何圖形成為可能,這是一種非常直觀的方式來理解代理的行為。 + +在NetLogo中,我們可以使用`create-turtles`命令創建許多烏龜。然後我們可以命令所有烏龜執行一些操作(在下面的例子中——向前移動10個點): + +``` +create-turtles 10 +ask turtles [ + forward 10 +] +``` + +當然,所有烏龜都做同樣的事情並不有趣,因此我們可以`ask`某些烏龜群體,例如那些在某個點附近的烏龜。我們還可以使用`breed [cats cat]`命令創建不同*品種*的烏龜。這裡`cat`是品種的名稱,我們需要指定單數和複數形式,因為不同的命令使用不同的形式以便於理解。 + +> ✅ 我們不會深入學習NetLogo語言本身——如果你有興趣學習更多,可以訪問出色的[初學者互動NetLogo詞典](https://ccl.northwestern.edu/netlogo/bind/)資源。 + +你可以[下載](https://ccl.northwestern.edu/netlogo/download.shtml)並安裝NetLogo來試用。 + +### 模型庫 + +NetLogo的一個優點是它包含了一個可供試用的工作模型庫。進入**文件 → 模型庫**,你可以選擇許多類別的模型。 + +NetLogo模型庫 + +> Dmitry Soshnikov提供的模型庫截圖 + +你可以打開其中一個模型,例如**生物學 → 群聚**。 + +### 主要原則 + +打開模型後,你會進入NetLogo的主界面。以下是一個描述狼和羊的種群模型,給定有限資源(草)。 + +![NetLogo主界面](../../../../../translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.hk.png) + +> Dmitry Soshnikov提供的截圖 + +在這個界面上,你可以看到: + +* **界面**部分包含: + - 所有代理生活的主要場地 + - 不同的控制項:按鈕、滑塊等 + - 用於顯示模擬參數的圖表 +* **代碼**標籤包含編輯器,你可以在其中編寫NetLogo程序 + +在大多數情況下,界面會有一個**設置**按鈕,用於初始化模擬狀態,以及一個**開始**按鈕,用於啟動執行。這些由代碼中的相應處理程序處理,看起來像這樣: + +``` +to go [ +... +] +``` + +NetLogo的世界由以下對象組成: + +* **代理**(烏龜)可以在場地上移動並執行某些操作。你可以使用`ask turtles [...]`語法命令代理,括號中的代碼由所有代理以*烏龜模式*執行。 +* **補丁**是場地上的方形區域,代理生活在其上。你可以引用同一補丁上的所有代理,或者更改補丁顏色和其他屬性。你也可以`ask patches`執行某些操作。 +* **觀察者**是一個控制世界的唯一代理。所有按鈕處理程序都以*觀察者模式*執行。 + +> ✅ 多代理環境的美妙之處在於,烏龜模式或補丁模式下運行的代碼由所有代理同時並行執行。因此,通過編寫少量代碼並編程個別代理的行為,你可以創建整個模擬系統的複雜行為。 + +### 群聚 + +作為多代理行為的例子,我們來看看**[群聚](https://en.wikipedia.org/wiki/Flocking_(behavior))**。群聚是一種複雜的模式,非常類似於鳥群飛行的方式。觀察它們飛行時,你可能會認為它們遵循某種集體算法,或者擁有某種*集體智慧*。然而,這種複雜行為的產生是因為每個個體代理(在這種情況下,是一隻*鳥*)僅觀察距離它較近的其他代理,並遵循三個簡單的規則: + +* **對齊** - 它向鄰近代理的平均方向靠攏 +* **凝聚** - 它試圖向鄰居的平均位置靠攏(*長距離吸引*) +* **分離** - 當與其他鳥靠得太近時,它試圖遠離(*短距離排斥*) + +你可以運行群聚示例並觀察行為。你還可以調整參數,例如*分離程度*或*視距範圍*,這定義了每隻鳥能看到的距離。注意,如果你將視距範圍減少到0,所有鳥都變得盲目,群聚停止。如果你將分離減少到0,所有鳥聚集成一條直線。 + +> ✅ 切換到**代碼**標籤,查看群聚的三個規則(對齊、凝聚和分離)如何在代碼中實現。注意我們僅引用那些在視線範圍內的代理。 + +### 其他可查看的模型 + +還有一些有趣的模型可以供你試驗: + +* **藝術 → 煙火**展示了煙火如何被視為個別火流的集體行為 +* **社會科學 → 基本交通**和**社會科學 → 網格交通**展示了城市交通在1D和2D網格中有或沒有交通燈的模型。模擬中的每輛車遵循以下規則: + - 如果前方空間是空的——加速(直到某個最大速度) + - 如果看到前方有障礙物——剎車(你可以調整司機的視距) +* **社會科學 → 派對**展示了人們在雞尾酒會上如何聚集。你可以找到導致群體幸福度最快增長的參數組合。 + +從這些例子中可以看出,多代理模擬可以是一種非常有用的方式來理解由遵循相同或類似邏輯的個體組成的複雜系統的行為。它還可以用於控制虛擬代理,例如電腦遊戲中的[非玩家角色](https://en.wikipedia.org/wiki/NPC),或3D動畫世界中的代理。 + +## 推理型代理 + +上述代理非常簡單,使用某種算法對環境的變化作出反應。因此,它們是**反應型代理**。然而,有時代理可以進行推理和規劃其行動,在這種情況下,它們被稱為**推理型代理**。 + +一個典型的例子是個人代理接收人類指令以預訂度假行程。假設互聯網上有許多代理可以幫助它。它應該聯繫其他代理以查看哪些航班可用,不同日期的酒店價格是多少,並嘗試談判最佳價格。當度假計劃完成並得到所有者確認後,它可以進行預訂。 + +為了做到這一點,代理需要**通信**。為了成功通信,它們需要: + +* 一些**交換知識的標準語言**,例如[知識交換格式](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format)(KIF)和[知識查詢與操作語言](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language)(KQML)。這些語言基於[言語行為理論](https://en.wikipedia.org/wiki/Speech_act)設計。 +* 這些語言還應包括一些基於不同**拍賣類型**的**談判協議**。 +* 一個**共同的本體**,以便它們引用相同的概念並了解其語義 +* 一種**發現**不同代理能做什麼的方法,也基於某種本體 + +推理型代理比反應型代理更複雜,因為它們不僅對環境的變化作出反應,還應能夠*主動*採取行動。一種提出的推理型代理架構是所謂的信念-願望-意圖(BDI)代理: + +* **信念**形成代理對其環境的知識集。它可以結構化為知識庫或代理可以應用於環境中特定情況的一組規則。 +* **願望**定義代理想要做什麼,即其目標。例如,上述個人助理代理的目標是預訂行程,而酒店代理的目標是最大化利潤。 +* **意圖**是代理計劃實現其目標的具體行動。行動通常改變環境並導致與其他代理的通信。 + +有一些平台可用於構建多代理系統,例如[JADE](https://jade.tilab.com/)。[這篇論文](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf)包含了多代理平台的回顧,以及多代理系統的簡史及其不同的使用場景。 + +## 結論 + +多代理系統可以採取非常不同的形式並應用於許多不同的領域。 +它們都傾向於專注於個別代理的簡單行為,並通過**協同效應**實現整個系統的更複雜行為。 + +## 🚀 挑戰 + +將本課程應用於現實世界,嘗試構思一個可以解決問題的多代理系統。例如,多代理系統需要做什麼才能優化校車路線?它如何在麵包店中運作? + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/223) + +## 回顧與自學 + +回顧此類系統在行業中的使用。選擇一個領域,例如製造業或視頻遊戲行業,探索多代理系統如何用於解決獨特問題。 + +## [NetLogo作業](assignment.md) + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/6-Other/23-MultiagentSystems/assignment.md b/translations/hk/lessons/6-Other/23-MultiagentSystems/assignment.md new file mode 100644 index 00000000..2cff3281 --- /dev/null +++ b/translations/hk/lessons/6-Other/23-MultiagentSystems/assignment.md @@ -0,0 +1,17 @@ + +# NetLogo 作業 + +選擇 NetLogo 資料庫中的其中一個模型,並使用它來盡可能模擬一個真實生活中的情境。一個不錯的例子是調整「替代視覺化」資料夾中的病毒模型,展示它如何用於模擬 COVID-19 的傳播。你能否建立一個模擬真實病毒傳播的模型? + +透過保存副本並製作一段視頻演示,解釋該模型如何與真實世界情境相關,來展示你的成果。 + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/7-Ethics/README.md b/translations/hk/lessons/7-Ethics/README.md new file mode 100644 index 00000000..f035c822 --- /dev/null +++ b/translations/hk/lessons/7-Ethics/README.md @@ -0,0 +1,52 @@ + +# 道德與負責任的人工智能 + +你已經快完成這門課程了,希望到目前為止,你已清楚了解到人工智能是基於一系列正式的數學方法,這些方法能幫助我們在數據中找到關係,並訓練模型來模仿某些人類行為。在這個歷史時刻,我們認為人工智能是一個非常強大的工具,可以從數據中提取模式,並應用這些模式來解決新的問題。 + +## [課前測驗](https://white-water-09ec41f0f.azurestaticapps.net/quiz/5/) + +然而,在科幻作品中,我們經常看到人工智能對人類構成威脅的故事。通常這些故事圍繞某種人工智能叛變展開,當人工智能決定與人類對抗時,這暗示人工智能擁有某種情感或能做出開發者未預見的決定。 + +我們在這門課程中學到的人工智能僅僅是大型矩陣運算。它是一個非常強大的工具,可以幫助我們解決問題,但和其他任何強大的工具一樣——它既可以用於好的目的,也可以用於壞的目的。重要的是,它可能會被*濫用*。 + +## 負責任人工智能的原則 + +為了避免人工智能的意外或故意濫用,Microsoft 提出了重要的[負責任人工智能原則](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-77998-cacaste)。以下概念是這些原則的基礎: + +* **公平性**與*模型偏差*這個重要問題相關,模型偏差可能是由於使用了有偏差的數據進行訓練。例如,當我們嘗試預測某人獲得軟件開發工作機會的概率時,模型可能更偏向男性——僅僅因為訓練數據集可能偏向男性群體。我們需要仔細平衡訓練數據並調查模型以避免偏差,確保模型考慮到更相關的特徵。 +* **可靠性與安全性**。人工智能模型本質上可能會犯錯。一個神經網絡返回的是概率,我們需要在做決策時考慮到這一點。每個模型都有一定的精確度和召回率,我們需要理解這些指標以防止錯誤建議可能造成的傷害。 +* **隱私與安全性**有一些人工智能特定的影響。例如,當我們使用某些數據來訓練模型時,這些數據會以某種方式“整合”到模型中。一方面,這提高了安全性和隱私性,另一方面——我們需要記住模型是基於哪些數據訓練的。 +* **包容性**意味著我們不是在構建人工智能來取代人類,而是為了增強人類並使我們的工作更具創造性。這也與公平性相關,因為在處理代表性不足的社群時,我們收集的大多數數據集可能存在偏差,我們需要確保這些社群被納入並正確地由人工智能處理。 +* **透明性**。這包括確保我們始終清楚地表明人工智能正在被使用。此外,在可能的情況下,我們希望使用*可解釋*的人工智能系統。 +* **問責性**。當人工智能模型做出某些決定時,並不總是清楚誰應對這些決定負責。我們需要確保我們理解人工智能決策的責任所在。在大多數情況下,我們希望將人類納入重要決策的過程中,以便實際的人對決策負責。 + +## 負責任人工智能的工具 + +Microsoft 開發了[負責任人工智能工具箱](https://github.com/microsoft/responsible-ai-toolbox),其中包含一系列工具: + +* 解釋性儀表板 (InterpretML) +* 公平性儀表板 (FairLearn) +* 錯誤分析儀表板 +* 負責任人工智能儀表板,包括: + + - EconML - 用於因果分析的工具,專注於假設性問題 + - DiCE - 用於反事實分析的工具,讓你了解需要改變哪些特徵才能影響模型的決策 + +有關人工智能倫理的更多信息,請訪問[這節課](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/3-fairness?WT.mc_id=academic-77998-cacaste),它是機器學習課程的一部分,並包含作業。 + +## 回顧與自學 + +參加這個[學習路徑](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77998-cacaste),以了解更多關於負責任人工智能的內容。 + +## [課後測驗](https://white-water-09ec41f0f.azurestaticapps.net/quiz/6/) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/README.md b/translations/hk/lessons/README.md new file mode 100644 index 00000000..ed351ea9 --- /dev/null +++ b/translations/hk/lessons/README.md @@ -0,0 +1,17 @@ + +# 概覽 + +![概覽的手繪圖](../../../translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.hk.png) + +> 手繪筆記由 [Tomomi Imura](https://twitter.com/girlie_mac) 提供 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/X-Extras/X1-MultiModal/README.md b/translations/hk/lessons/X-Extras/X1-MultiModal/README.md new file mode 100644 index 00000000..807a9827 --- /dev/null +++ b/translations/hk/lessons/X-Extras/X1-MultiModal/README.md @@ -0,0 +1,88 @@ + +# 多模態網絡 + +在 Transformer 模型成功解決 NLP 任務後,相同或類似的架構也被應用於計算機視覺任務。越來越多的研究致力於構建能夠*結合*視覺和自然語言能力的模型。其中一個嘗試是由 OpenAI 開發的 CLIP 和 DALL.E。 + +## 對比圖像預訓練 (CLIP) + +CLIP 的主要理念是能夠比較文本提示與圖像,並判斷圖像與提示的匹配程度。 + +![CLIP 架構](../../../../../translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.hk.png) + +> *圖片來源:[這篇博客文章](https://openai.com/blog/clip/)* + +該模型是基於從互聯網獲取的圖像及其標題進行訓練的。對於每個批次,我們取 N 對 (圖像, 文本),並將它們轉換為一些向量表示 I, ..., T。這些表示隨後會進行匹配。損失函數的定義是最大化同一對(例如 I 和 T)向量之間的餘弦相似度,並最小化所有其他對之間的餘弦相似度。因此,這種方法被稱為**對比式**。 + +CLIP 模型/庫可從 [OpenAI GitHub](https://github.com/openai/CLIP) 獲得。該方法在[這篇博客文章](https://openai.com/blog/clip/)中有描述,並在[這篇論文](https://arxiv.org/pdf/2103.00020.pdf)中有更詳細的解釋。 + +一旦該模型完成預訓練,我們可以提供一批圖像和一批文本提示,模型將返回一個概率張量。CLIP 可用於多種任務: + +**圖像分類** + +假設我們需要將圖像分類為例如貓、狗和人。在這種情況下,我們可以向模型提供一張圖像,以及一系列文本提示:“*一張貓的照片*”、“*一張狗的照片*”、“*一張人的照片*”。在結果的三個概率向量中,我們只需選擇值最高的索引。 + +![CLIP 用於圖像分類](../../../../../translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.hk.png) + +> *圖片來源:[這篇博客文章](https://openai.com/blog/clip/)* + +**基於文本的圖像搜索** + +我們也可以進行相反的操作。如果我們有一組圖像,可以將這組圖像傳遞給模型,並提供一個文本提示——這將返回與給定提示最相似的圖像。 + +## ✍️ 示例:[使用 CLIP 進行圖像分類和圖像搜索](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) + +打開 [Clip.ipynb](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) 筆記本,查看 CLIP 的實際應用。 + +## 使用 VQGAN+CLIP 進行圖像生成 + +CLIP 還可以用於基於文本提示的**圖像生成**。為了實現這一點,我們需要一個**生成器模型**,能夠基於某些向量輸入生成圖像。其中一個模型是 [VQGAN](https://compvis.github.io/taming-transformers/)(向量量化 GAN)。 + +VQGAN 與普通 [GAN](../../4-ComputerVision/10-GANs/README.md) 的主要區別在於以下幾點: +* 使用自回歸 Transformer 架構生成一系列具有上下文的視覺部分,這些部分構成了圖像。這些視覺部分由 [CNN](../../4-ComputerVision/07-ConvNets/README.md) 學習。 +* 使用子圖像判別器來檢測圖像的部分是否“真實”或“虛假”(與傳統 GAN 的“全或無”方法不同)。 + +在 [Taming Transformers](https://compvis.github.io/taming-transformers/) 網站上了解更多關於 VQGAN 的信息。 + +VQGAN 與傳統 GAN 的一個重要區別是,後者可以從任何輸入向量生成一張像樣的圖像,而 VQGAN 則可能生成不連貫的圖像。因此,我們需要進一步引導圖像創建過程,這可以通過 CLIP 來完成。 + +![VQGAN+CLIP 架構](../../../../../translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.hk.png) + +為了生成與文本提示相對應的圖像,我們首先使用一些隨機編碼向量,通過 VQGAN 生成一張圖像。然後使用 CLIP 生成損失函數,顯示圖像與文本提示的匹配程度。目標是最小化該損失,通過反向傳播調整輸入向量的參數。 + +一個實現 VQGAN+CLIP 的優秀庫是 [Pixray](http://github.com/pixray/pixray)。 + +![由 Pixray 生成的圖片](../../../../../translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.hk.png) | ![由 Pixray 生成的圖片](../../../../../translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.hk.png) | ![由 Pixray 生成的圖片](../../../../../translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.hk.png) +----|----|---- +根據提示 *一張年輕男性文學教師拿著書的水彩特寫肖像* 生成的圖片 | 根據提示 *一張年輕女性計算機科學教師拿著電腦的油畫特寫肖像* 生成的圖片 | 根據提示 *一張老年男性數學教師站在黑板前的油畫特寫肖像* 生成的圖片 + +> 圖片來自 **人工教師** 系列,由 [Dmitry Soshnikov](http://soshnikov.com) 創作 + +## DALL-E +### [DALL-E 1](https://openai.com/research/dall-e) +DALL-E 是 GPT-3 的一個版本,訓練用於根據提示生成圖像。它擁有 120 億個參數。 + +與 CLIP 不同,DALL-E 將文本和圖像作為一個單一的令牌流進行處理。因此,通過多個提示,可以根據文本生成圖像。 + +### [DALL-E 2](https://openai.com/dall-e-2) +DALL-E 1 和 DALL-E 2 的主要區別在於,後者能生成更逼真的圖像和藝術作品。 + +以下是使用 DALL-E 生成的圖像示例: +![由 DALL-E 生成的圖片](../../../../../translated_images/DALL·E%202023-06-20%2015.56.56%20-%20a%20closeup%20watercolor%20portrait%20of%20young%20male%20teacher%20of%20literature%20with%20a%20book.6c235e8271d9ed10ce985d86aeb241a58518958647973af136912116b9518fce.hk.png) | ![由 DALL-E 生成的圖片](../../../../../translated_images/DALL·E%202023-06-20%2015.57.43%20-%20a%20closeup%20oil%20portrait%20of%20young%20female%20teacher%20of%20computer%20science%20with%20a%20computer.f21dc4166340b6c8b4d1cb57efd1e22127407f9b28c9ac7afe11344065369e64.hk.png) | ![由 DALL-E 生成的圖片](../../../../../translated_images/DALL·E%202023-06-20%2015.58.42%20-%20%20a%20closeup%20oil%20portrait%20of%20old%20male%20teacher%20of%20mathematics%20in%20front%20of%20blackboard.d331c2dfbdc3f7c46aa65c0809066f5e7ed4b49609cd259852e760df21051e4a.hk.png) +----|----|---- +根據提示 *一張年輕男性文學教師拿著書的水彩特寫肖像* 生成的圖片 | 根據提示 *一張年輕女性計算機科學教師拿著電腦的油畫特寫肖像* 生成的圖片 | 根據提示 *一張老年男性數學教師站在黑板前的油畫特寫肖像* 生成的圖片 + +## 參考資料 + +* VQGAN 論文:[Taming Transformers for High-Resolution Image Synthesis](https://compvis.github.io/taming-transformers/paper/paper.pdf) +* CLIP 論文:[Learning Transferable Visual Models From Natural Language Supervision](https://arxiv.org/pdf/2103.00020.pdf) + +**免責聲明**: +本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file diff --git a/translations/hk/lessons/sketchnotes/LICENSE.md b/translations/hk/lessons/sketchnotes/LICENSE.md new file mode 100644 index 00000000..95a4821c --- /dev/null +++ b/translations/hk/lessons/sketchnotes/LICENSE.md @@ -0,0 +1,111 @@ + +歐盟數據庫權利: + + a. 為避免疑義,第 2(a)(1) 條授予您提取、重用、複製及分享數據庫全部或實質部分內容的權利; + + b. 如果您將數據庫的全部或實質部分內容包含在您擁有的數據庫中,則該數據庫的版權必須以與本公共許可協議相同的條件授權; + + c. 您不得對數據庫或其內容施加任何額外或不同的條款或條件,或應用任何有效技術措施,限制根據本公共許可協議授予的權利的行使。 + +第 5 節 -- 免責聲明與責任限制。 + + a. 除非另有明確說明,授權方不提供任何形式的保證,包括但不限於適銷性、特定用途的適用性、非侵權性、準確性或存在隱藏缺陷的保證。授權方僅在適用法律允許的範圍內提供授權材料。 + + b. 在適用法律允許的最大範圍內,授權方不對您因使用授權材料而產生的任何直接、間接、特殊、附帶、後果性或懲罰性損害承擔責任,即使授權方已被告知可能發生此類損害。 + +第 6 節 -- 協議期限與終止。 + + a. 協議期限。本公共許可協議的期限與授權材料的版權及類似權利的期限一致。儘管有上述規定,如果您未遵守本公共許可協議的條款和條件,則授權方可根據第 6(b) 條終止本公共許可協議。 + + b. 終止。 + + 1. 如果您未遵守本公共許可協議的條款和條件,則您的許可權將自違規行為發生之日起自動終止。 + + 2. 根據第 6(b)(1) 條終止後,授權方可自行決定恢復本公共許可協議的效力,前提是您糾正了違規行為。 + + 3. 對於根據本公共許可協議獲得的任何權利,終止不影響在終止前授予的許可權利,前提是這些權利是根據本公共許可協議授予的。第 6(b) 條的條款仍然適用。 + + c. 剩餘條款。第 1、5、6、7 節的條款在本公共許可協議終止後仍然有效。 + +第 7 節 -- 其他條款。 + + a. 如果您分享授權材料或改編材料,授權方可能會要求您移除某些信息(例如歸屬信息),只要在合理範圍內可行。 + + b. 本公共許可協議不會減少、限制或限制您根據適用法律享有的任何權利,包括版權例外和限制。 + + c. 如果本公共許可協議的任何條款被認定為無效或不可執行,則根據適用法律,該條款應在必要的最低範圍內進行修改或解釋,以使其有效和可執行。如果無法進行此類修改或解釋,則應將該條款視為可分割,且不影響其餘條款的有效性和可執行性。 + + d. 無論是否另有約定,授權方不得根據本公共許可協議授予任何默示許可。 + + e. 適用法律和管轄權。本公共許可協議的條款和條件應受您居住地法律的管轄,除非適用法律另有規定。 + +======================================================================= + +Creative Commons Corporation ("Creative Commons") 並非律師事務所,亦不提供法律服務或法律建議。Creative Commons 公共許可協議的分發不會創建律師與客戶或其他關係。Creative Commons 僅以“現狀”基礎提供其許可協議及相關信息,並不對其許可協議、根據其條款和條件授權的任何材料或相關信息作出任何保證。Creative Commons 在法律允許的最大範圍內,對因使用其許可協議而導致的任何損害不承擔責任。 +權利,然後您擁有原創資料庫權利的資料庫(但不包括其個別內容)屬於改編材料, + +包括為了第 3(b) 節的目的;以及 +c. 如果您分享資料庫的全部或大部分內容,您必須遵守第 3(a) 節中的條件。 + +為免生疑,本第 4 節是補充而非取代您在本公共許可下的義務,當授權權利包括其他版權及類似權利時。 + + +第 5 節 —— 免責聲明及責任限制。 + +a. 除非授權方另有單獨承諾,在可能的範圍內,授權方以「現狀」及「可用」的方式提供授權材料,並且不對授權材料作出任何形式的陳述或保證,包括明示、默示、法定或其他形式的保證。這包括但不限於所有權保證、適銷性、特定用途的適用性、非侵權、無隱性或其他缺陷、準確性或是否存在錯誤(無論是否已知或可發現)。如果法律不允許完全或部分免除保證,則此免責聲明可能不適用於您。 + +b. 在可能的範圍內,授權方在任何法律理論(包括但不限於疏忽)或其他情況下,均不對您因本公共許可或使用授權材料而導致的任何直接、特殊、間接、附帶、後果性、懲罰性、示範性或其他損失、成本、費用或損害承擔責任,即使授權方已被告知可能發生此類損失、成本、費用或損害。如果法律不允許完全或部分限制責任,則此責任限制可能不適用於您。 + +c. 上述免責聲明及責任限制應以最接近絕對免責及放棄所有責任的方式解釋,在可能的範圍內。 + + +第 6 節 —— 有效期及終止。 + +a. 本公共許可適用於授權版權及類似權利的有效期。然而,如果您未能遵守本公共許可,則您在本公共許可下的權利將自動終止。 + +b. 如果您根據第 6(a) 節失去使用授權材料的權利,該權利可恢復: + +1. 自您發現違規之日起 30 天內糾正違規行為,則自糾正之日起自動恢復;或 +2. 經授權方明確恢復。 + +為免生疑,本第 6(b) 節不影響授權方因您違反本公共許可而尋求補救的任何權利。 + +c. 為免生疑,授權方亦可隨時以其他條款或條件提供授權材料或停止分發授權材料;然而,這不會終止本公共許可。 + +d. 第 1 節、第 5 節、第 6 節、第 7 節及第 8 節在本公共許可終止後仍然有效。 + + +第 7 節 —— 其他條款及條件。 + +a. 除非授權方明確同意,授權方不受您傳達的任何額外或不同條款及條件的約束。 + +b. 關於授權材料的任何安排、理解或協議,若未在此明確說明,則與本公共許可的條款及條件分開且獨立。 + + +第 8 節 —— 解釋。 + +a. 為免生疑,本公共許可不會且不應被解釋為減少、限制、約束或對任何在未經本公共許可授權的情況下合法使用授權材料的行為施加條件。 + +b. 在可能的範圍內,如果本公共許可的任何條款被認為不可執行,則該條款應自動調整至最低必要程度以使其可執行。如果該條款無法調整,則應從本公共許可中刪除,而不影響其餘條款及條件的可執行性。 + +c. 除非授權方明確同意,否則本公共許可的任何條款或條件均不會被放棄,且任何未遵守的行為均不會被視為已獲得同意。 + +d. 本公共許可中的任何內容均不構成或可被解釋為限制或放棄授權方或您所享有的任何特權及豁免,包括免於任何司法管轄或權力的法律程序。 + + +======================================================================= + +Creative Commons 並非其公共許可的當事方。然而,Creative Commons 可選擇將其公共許可應用於其發布的材料,在此情況下將被視為「授權方」。Creative Commons 公共許可的文本已根據 CC0 公共領域貢獻被奉獻於公共領域。除非為了有限目的表明材料是根據 Creative Commons 公共許可共享或根據 Creative Commons 政策(發布於 creativecommons.org/policies)另行允許,Creative Commons 不授權使用「Creative Commons」商標或任何其他 Creative Commons 的商標或標誌,除非事先書面同意,包括但不限於任何未經授權修改其公共許可或任何其他安排、理解或協議涉及授權材料的使用。為免生疑,本段不構成本公共許可的一部分。 + +Creative Commons 可通過 creativecommons.org 聯繫。 + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hk/lessons/sketchnotes/README.md b/translations/hk/lessons/sketchnotes/README.md new file mode 100644 index 00000000..58e8effe --- /dev/null +++ b/translations/hk/lessons/sketchnotes/README.md @@ -0,0 +1,17 @@ + +所有課程的手繪筆記可以在這裡下載。 + +🎨 製作人:Tomomi Imura(Twitter: [@girlie_mac](https://twitter.com/girlie_mac),GitHub: [girliemac](https://github.com/girliemac)) + +[![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) + +**免責聲明**: +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/ja/README.md b/translations/ja/README.md index c808cee2..acb7dac7 100644 --- a/translations/ja/README.md +++ b/translations/ja/README.md @@ -1,140 +1,156 @@ -[![GitHubライセンス](https://img.shields.io/github/license/microsoft/AI-For-Beginners.svg)](https://github.com/microsoft/AI-For-Beginners/blob/main/LICENSE) -[![GitHub貢献者](https://img.shields.io/github/contributors/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/) -[![GitHubの問題](https://img.shields.io/github/issues/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/issues/) -[![GitHubプルリクエスト](https://img.shields.io/github/issues-pr/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/pulls/) -[![PRを歓迎](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub license](https://img.shields.io/github/license/microsoft/AI-For-Beginners.svg)](https://github.com/microsoft/AI-For-Beginners/blob/main/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) -[![GitHubウォッチャー](https://img.shields.io/github/watchers/microsoft/AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/AI-For-Beginners/watchers/) -[![GitHubフォーク](https://img.shields.io/github/forks/microsoft/AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/AI-For-Beginners/network/) -[![GitHubスター](https://img.shields.io/github/stars/microsoft/AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/) -[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD) -[![Gitter](https://badges.gitter.im/Microsoft/ai-for-beginners.svg)](https://gitter.im/Microsoft/ai-for-beginners?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/AI-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/AI-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD) +[![Gitter](https://badges.gitter.im/Microsoft/ai-for-beginners.svg)](https://gitter.im/Microsoft/ai-for-beginners?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) +[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) -# 初心者のための人工知能 - カリキュラム +# 初心者のための人工知能 - カリキュラム -|![ スケッチノート by [(@girlie_mac)](https://twitter.com/girlie_mac) ](./lessons/sketchnotes/ai-overview.png)| -|:---:| -| 初心者のためのAI - _スケッチノート by [@girlie_mac](https://twitter.com/girlie_mac)_ | +|![ スケッチノート by [(@girlie_mac)](https://twitter.com/girlie_mac) ](./lessons/sketchnotes/ai-overview.png)| +|:---:| +| 初心者のためのAI - _スケッチノート by [@girlie_mac](https://twitter.com/girlie_mac)_ | -12週間、24レッスンからなる**人工知能**(AI)の世界を探求しましょう! 実践的なレッスン、クイズ、ラボが含まれています。このカリキュラムは初心者向けで、TensorFlowやPyTorchなどのツールやAIの倫理についてもカバーしています。 +**人工知能** (AI) の世界を探求する12週間、24レッスンのカリキュラムです! 実践的なレッスン、クイズ、ラボが含まれています。このカリキュラムは初心者向けで、TensorFlowやPyTorchなどのツール、そしてAIの倫理についてもカバーしています。 -## 学べること +## 学べること -**[コースのマインドマップ](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)** +**[コースのマインドマップ](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)** -このカリキュラムでは、以下のことを学びます: +このカリキュラムでは以下を学びます: -* **知識表現**と推論を用いた「古き良き」シンボリックアプローチを含む、人工知能のさまざまなアプローチ([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence))。 -* 現代のAIの核心である**ニューラルネットワーク**と**ディープラーニング**。これらの重要なトピックの背後にある概念を、最も人気のある二つのフレームワーク - [TensorFlow](http://Tensorflow.org) と [PyTorch](http://pytorch.org) を用いてコードで説明します。 -* 画像やテキストを扱うための**ニューラルアーキテクチャ**。最近のモデルについて取り上げますが、最先端のものには少し欠けるかもしれません。 -* **遺伝的アルゴリズム**や**マルチエージェントシステム**など、あまり一般的ではないAIアプローチ。 +* **知識表現**や推論を含む「古き良き」シンボリックアプローチ([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence))など、人工知能へのさまざまなアプローチ。 +* 現代AIの中心である**ニューラルネットワーク**と**ディープラーニング**。これらの重要なトピックの概念を、[TensorFlow](http://Tensorflow.org)や[PyTorch](http://pytorch.org)といった人気のフレームワークを使ったコードで説明します。 +* 画像やテキストを扱うための**ニューラルアーキテクチャ**。最新のモデルをカバーしますが、最先端の内容には少し欠けるかもしれません。 +* **遺伝的アルゴリズム**や**マルチエージェントシステム**など、あまり一般的でないAIアプローチ。 -このカリキュラムでは取り上げないこと: +このカリキュラムで扱わない内容: -> [このコースの追加リソースをMicrosoft Learnコレクションで見つける](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) +> [このコースの追加リソースはMicrosoft Learnコレクションで見つけることができます](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) -* **ビジネスにおけるAIの使用事例**。Microsoft Learnの[ビジネスユーザー向けAI入門](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum)学習パスや、[AIビジネススクール](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum)([INSEAD](https://www.insead.edu/)との共同開発)を検討してください。 -* 当社の[初心者向け機械学習カリキュラム](http://github.com/Microsoft/ML-for-Beginners)でよく説明されている**クラシック機械学習**。 -* **[Cognitive Services](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)**を使用して構築された実践的なAIアプリケーション。このためには、Microsoft Learnのモジュールから始めることをお勧めします。[ビジョン](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum)、[自然言語処理](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum)、**[Azure OpenAI Serviceによる生成AI](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)**など、他にもあります。 -* 特定の ML **クラウドフレームワーク**、例えば [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum)、[Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum)、または [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum)。 [Azure Machine Learning を使用して機械学習ソリューションを構築および運用する](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) や [Azure Databricks を使用して機械学習ソリューションを構築および運用する](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) の学習パスを検討してください。 -* **会話型AI** と **チャットボット**。別途 [会話型AIソリューションの作成](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) の学習パスがあり、詳細については [このブログ記事](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/) を参照することもできます。 -* 深層学習の背後にある **深い数学**。これについては、Ian Goodfellow、Yoshua Bengio、Aaron Courville 著の [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618) をお勧めします。この本は [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/) でもオンラインで入手可能です。 +* **ビジネスにおけるAIの活用事例**。Microsoft Learnの[Introduction to AI for business users](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum)学習パスや、[INSEAD](https://www.insead.edu/)と協力して開発された[AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum)を検討してください。 +* **古典的な機械学習**。これは[Machine Learning for Beginners Curriculum](http://github.com/Microsoft/ML-for-Beginners)で詳しく説明されています。 +* **[Cognitive Services](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)**を使用して構築された実践的なAIアプリケーション。これについては、Microsoft Learnの[vision](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum)、[natural language processing](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum)、**[Generative AI with Azure OpenAI Service](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)**などのモジュールから始めることをお勧めします。 +* **クラウドフレームワーク**(例:[Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum)、[Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum)、[Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum))。[Build and operate machine learning solutions with Azure Machine Learning](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum)や[Build and Operate Machine Learning Solutions with Azure Databricks](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum)学習パスを利用してください。 +* **会話型AI**や**チャットボット**。これには[Create conversational AI solutions](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum)学習パスがあり、詳細については[このブログ記事](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/)を参照してください。 +* ディープラーニングの**高度な数学**。これについては、Ian Goodfellow、Yoshua Bengio、Aaron Courvilleによる[Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618)をお勧めします。この本は[https://www.deeplearningbook.org/](https://www.deeplearningbook.org/)でもオンラインで利用可能です。 -クラウドにおける _AI_ のトピックに優しく入門したい場合は、[Azure での人工知能の始め方](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) の学習パスを受講することを検討してください。 +クラウドにおけるAIの入門としては、[Get started with artificial intelligence on Azure](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum)学習パスを検討してください。 -# コンテンツ +# コンテンツ -| | レッスンリンク | PyTorch/Keras/TensorFlow | ラボ | -| :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ | -| 0 | [コース設定](./lessons/0-course-setup/setup.md) | [開発環境の設定](./lessons/0-course-setup/how-to-run.md) | | -| I | [**AIの紹介**](./lessons/1-Intro/README.md) | | | -| 01 | [AIの紹介と歴史](./lessons/1-Intro/README.md) | - | - | -| II | **シンボリックAI** | -| 02 | [知識表現とエキスパートシステム](./lessons/2-Symbolic/README.md) | [エキスパートシステム](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) / [オントロジー](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) /[概念グラフ](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) | | -| III | [**ニューラルネットワークの紹介**](./lessons/3-NeuralNetworks/README.md) ||| -| 03 | [パーセプトロン](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [ノートブック](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [ラボ](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) | -| 04 | [多層パーセプトロンと自分のフレームワークの作成](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [ノートブック](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [ラボ](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) | -| 05 | [フレームワーク(PyTorch/TensorFlow)と過学習の紹介](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [ラボ](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) | -| IV | [**コンピュータビジョン**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [Microsoft Azureでのコンピュータビジョンを探る](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) | -| 06 | [コンピュータビジョン入門。OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [ノートブック](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [ラボ](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) | -| 07 | [畳み込みニューラルネットワーク](./lessons/4-ComputerVision/07-ConvNets/README.md) & [CNNアーキテクチャ](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [ラボ](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) | +| | レッスンリンク | PyTorch/Keras/TensorFlow | ラボ | +| :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ | +| 0 | [コースセットアップ](./lessons/0-course-setup/setup.md) | [開発環境のセットアップ](./lessons/0-course-setup/how-to-run.md) | | +| I | [**AIの概要**](./lessons/1-Intro/README.md) | | | +| 01 | [AIの概要と歴史](./lessons/1-Intro/README.md) | - | - | +| II | **シンボリックAI** | +| 02 | [知識表現とエキスパートシステム](./lessons/2-Symbolic/README.md) | [エキスパートシステム](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) / [オントロジー](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) /[概念グラフ](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) | | +| III | [**ニューラルネットワークの概要**](./lessons/3-NeuralNetworks/README.md) ||| +| 03 | [パーセプトロン](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [ノートブック](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [ラボ](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) | +| 04 | [多層パーセプトロンと独自フレームワークの作成](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [ノートブック](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [ラボ](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) | +| 05 | [フレームワークの概要 (PyTorch/TensorFlow) と過学習](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [ラボ](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) | +| IV | [**コンピュータビジョン**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [Microsoft Azureでコンピュータビジョンを探求](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) | +| 06 | [コンピュータビジョンの概要。OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [ノートブック](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [ラボ](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) | +| 07 | [畳み込みニューラルネットワーク](./lessons/4-ComputerVision/07-ConvNets/README.md) & [CNNアーキテクチャ](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [ラボ](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) | | 08 | [事前学習済みネットワークと転移学習](./lessons/4-ComputerVision/08-TransferLearning/README.md) および [トレーニングのコツ](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [ラボ](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) | | 09 | [オートエンコーダーとVAE](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | | -| 10 | [生成的敵対ネットワークと芸術スタイル転送](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | | +| 10 | [生成的敵対ネットワーク(GAN)と芸術的スタイル転送](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | | | 11 | [物体検出](./lessons/4-ComputerVision/11-ObjectDetection/README.md) | [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) | [ラボ](./lessons/4-ComputerVision/11-ObjectDetection/lab/README.md) | -| 12 | [セマンティックセグメンテーション。U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](../../../../AI-For-Beginners/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) | | -| V | [**自然言語処理**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [Microsoft Azureで自然言語処理を探る](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)| -| 13 | [テキスト表現。BoW/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | | -| 14 | [意味的な単語埋め込み。Word2VecとGloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | | -| 15 | [言語モデル。自分の埋め込みをトレーニングする](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [ラボ](./lessons/5-NLP/15-LanguageModeling/lab/README.md) | -| 16 | [再帰型ニューラルネットワーク](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | | -| 17 | [生成的再帰型ネットワーク](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.md) / [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.md) | [ラボ](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) | -| 18 | [トランスフォーマー。BERT。](./lessons/5-NLP/18-Transformers/READMEtransformers.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | | +| 12 | [セマンティックセグメンテーション. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](../../(https:/github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb)) | | +| V | [**自然言語処理**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [Microsoft Azureで自然言語処理を探求する](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)| +| 13 | [テキスト表現. Bow/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | | +| 14 | [セマンティック単語埋め込み. Word2VecとGloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | | +| 15 | [言語モデリング. 独自の埋め込みをトレーニングする](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [ラボ](./lessons/5-NLP/15-LanguageModeling/lab/README.md) | +| 16 | [リカレントニューラルネットワーク](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | | +| 17 | [生成的リカレントネットワーク](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.md) / [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.md) | [ラボ](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) | +| 18 | [トランスフォーマー. BERT.](./lessons/5-NLP/18-Transformers/READMEtransformers.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | | | 19 | [固有表現認識](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [ラボ](./lessons/5-NLP/19-NER/lab/README.md) | -| 20 | [大規模言語モデル、プロンプトプログラミングと少数ショットタスク](./lessons/5-NLP/20-LangModels/READMELargeLang.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | | +| 20 | [大規模言語モデル、プロンプトプログラミング、少数ショットタスク](./lessons/5-NLP/20-LangModels/READMELargeLang.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | | | VI | **その他のAI技術** || | | 21 | [遺伝的アルゴリズム](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [ノートブック](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | | | 22 | [深層強化学習](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [ラボ](./lessons/6-Other/22-DeepRL/lab/README.md) | | 23 | [マルチエージェントシステム](./lessons/6-Other/23-MultiagentSystems/README.md) | | | | VII | **AI倫理** | | | | 24 | [AI倫理と責任あるAI](./lessons/7-Ethics/README.md) | [Microsoft Learn: 責任あるAIの原則](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | | -| IX | **エクストラ** | | | +| IX | **その他** | | | | 25 | [マルチモーダルネットワーク、CLIPとVQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [ノートブック](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) | | -## 各レッスンには +## 各レッスンに含まれる内容 -* 事前学習資料 -* 実行可能なJupyterノートブック(**PyTorch**または**TensorFlow**に特化していることが多い)。実行可能なノートブックには理論的な資料も豊富に含まれているため、トピックを理解するにはノートブックのいずれかのバージョン(PyTorchまたはTensorFlow)を通過する必要があります。 -* 一部のトピックには、学んだ内容を特定の問題に適用する機会を提供する**ラボ**があります。 -* 一部のセクションには、関連するトピックを扱った[**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)モジュールへのリンクが含まれています。 +* 事前学習資料 +* 実行可能なJupyterノートブック(**PyTorch**または**TensorFlow**に特化していることが多い)。実行可能なノートブックには多くの理論的な内容も含まれているため、トピックを理解するには少なくとも1つのバージョン(PyTorchまたはTensorFlow)を通して学ぶ必要があります。 +* **ラボ**が一部のトピックで利用可能で、学んだ内容を特定の問題に適用する機会を提供します。 +* 一部のセクションには、関連トピックをカバーする[**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)モジュールへのリンクが含まれています。 -## 始めに +## 始め方 -- 開発環境の設定を手助けするために[セットアップレッスン](./lessons/0-course-setup/setup.md)を作成しました。 - 教育者向けには、[カリキュラム設定レッスン](./lessons/0-course-setup/for-teachers.md)も用意しています! -- [VSCodeまたはCodepaceでコードを実行する方法](./lessons/0-course-setup/how-to-run.md) +- 開発環境のセットアップを支援するために[セットアップレッスン](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/setup.md)を作成しました。 +- 教育者向けに[カリキュラムセットアップレッスン](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/for-teachers.md)も用意しています! +- [VSCodeまたはCodepaceでコードを実行する方法](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/how-to-run.md) 以下の手順に従ってください: -リポジトリをフォークする:このページの右上隅にある「フォーク」ボタンをクリックします。 +リポジトリをフォークする: このページの右上にある「Fork」ボタンをクリックします。 -リポジトリをクローンする: `git clone https://github.com/microsoft/AI-For-Beginners.git` +リポジトリをクローンする: `git clone https://github.com/microsoft/AI-For-Beginners.git` -後で見つけやすくするために、このリポジトリにスター(🌟)を付けるのを忘れないでください。 +このリポジトリを後で簡単に見つけられるようにスター(🌟)を付けるのを忘れないでください。 ## 他の学習者と出会う -私たちの[公式AI Discordサーバー](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum)に参加して、同じコースを受講している他の学習者と出会い、ネットワークを広げ、サポートを受けましょう。 +[公式AI Discordサーバー](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum)に参加して、このコースを受講している他の学習者と交流し、サポートを受けましょう。 -## クイズ +構築中に製品フィードバックや質問がある場合は、[Azure AI Foundry開発者フォーラム](https://aka.ms/foundry/forum)をご覧ください。 -> **クイズについての注意**:すべてのクイズはetc\quiz-app内のQuiz-appフォルダに含まれており、レッスン内からリンクされています。クイズアプリはローカルで実行することも、Azureにデプロイすることもできます。`quiz-app`フォルダ内の指示に従ってください。クイズは徐々にローカライズされています。 +## クイズ +> **クイズについての注意**: すべてのクイズは、etc\quiz-app内のQuiz-appフォルダーに含まれています。これらはレッスン内からリンクされています。クイズアプリはローカルで実行することも、Azureにデプロイすることも可能です。詳細な手順は`quiz-app`フォルダー内の指示に従ってください。クイズは徐々にローカライズされています。 +## ヘルプ募集 -## ヘルプを求む - -提案がある、またはスペルやコードのエラーを見つけましたか?問題を提起するか、プルリクエストを作成してください。 +提案やスペルミス、コードの誤りを見つけましたか?Issueを作成するか、Pull Requestを送ってください。 ## 特別な感謝 -* **✍️ 主な著者:** [Dmitry Soshnikov](http://soshnikov.com)、博士 -* **🔥 編集者:** [Jen Looper](https://twitter.com/jenlooper)、博士 -* **🎨 スケッチノートイラストレーター:** [Tomomi Imura](https://twitter.com/girlie_mac) -* **✅ クイズ作成者:** [Lateefah Bello](https://github.com/CinnamonXI)、[MLSA](https://studentambassadors.microsoft.com/) -* **🙏 コア貢献者:** [Evgenii Pishchik](https://github.com/Pe4enIks) +* **✍️ 主な著者:** [Dmitry Soshnikov](http://soshnikov.com), PhD +* **🔥 編集者:** [Jen Looper](https://twitter.com/jenlooper), PhD +* **🎨 スケッチノートイラストレーター:** [Tomomi Imura](https://twitter.com/girlie_mac) +* **✅ クイズ作成者:** [Lateefah Bello](https://github.com/CinnamonXI), [MLSA](https://studentambassadors.microsoft.com/) +* **🙏 コア貢献者:** [Evgenii Pishchik](https://github.com/Pe4enIks) -## 他のカリキュラム +## その他のカリキュラム -私たちのチームは他のカリキュラムも制作しています!チェックしてください: +私たちのチームは他にもカリキュラムを制作しています!ぜひチェックしてください: -* [初心者のためのデータサイエンス](https://aka.ms/ds4beginners) -* [**バージョン2.0** 初心者のための生成AI](https://aka.ms/genai-beginners) -* [**新しい** 初心者のためのサイバーセキュリティ](https://github.com/microsoft/Security-101??WT.mc_id=academic-96948-sayoung) -* [初心者のためのWeb開発](https://aka.ms/webdev-beginners) -* [初心者のためのIoT](https://aka.ms/iot-beginners) -* [初心者のための機械学習](https://aka.ms/ml4beginners) -* [初心者のためのXR開発](https://aka.ms/xr-dev-for-beginners) -* [AIペアプログラミングのためのGitHub Copilotマスター](https://aka.ms/GitHubCopilotAI) +- [Generative AI for Beginners](https://aka.ms/genai-beginners) +- [Generative AI for Beginners .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [Generative AI with JavaScript](https://github.com/microsoft/generative-ai-with-javascript) +- [Generative AI with Java](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [AI for Beginners](https://aka.ms/ai-beginners) +- [Data Science for Beginners](https://aka.ms/datascience-beginners) +- [ML for Beginners](https://aka.ms/ml-beginners) +- [Cybersecurity for Beginners](https://github.com/microsoft/Security-101) +- [Web Dev for Beginners](https://aka.ms/webdev-beginners) +- [IoT for Beginners](https://aka.ms/iot-beginners) +- [XR Development for Beginners](https://github.com/microsoft/xr-development-for-beginners) +- [Mastering GitHub Copilot for Agentic use](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [Mastering GitHub Copilot for C#/.NET Developers](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [Choose Your Own Copilot Adventure](https://github.com/microsoft/CopilotAdventures) **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご承知おきください。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された原文が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/SECURITY.md b/translations/ja/SECURITY.md index 011296fb..d36d45b7 100644 --- a/translations/ja/SECURITY.md +++ b/translations/ja/SECURITY.md @@ -1,40 +1,49 @@ + ## セキュリティ -Microsoftは、ソフトウェア製品とサービスのセキュリティを真剣に考えています。これには、[Microsoft](https://github.com/Microsoft)、[Azure](https://github.com/Azure)、[DotNet](https://github.com/dotnet)、[AspNet](https://github.com/aspnet)、[Xamarin](https://github.com/xamarin)、および[私たちのGitHub組織](https://opensource.microsoft.com/)を通じて管理されるすべてのソースコードリポジトリが含まれます。 +Microsoftは、ソフトウェア製品やサービスのセキュリティを非常に重視しています。これには、[Microsoft](https://github.com/Microsoft)、[Azure](https://github.com/Azure)、[DotNet](https://github.com/dotnet)、[AspNet](https://github.com/aspnet)、[Xamarin](https://github.com/xamarin)、および[弊社のGitHub組織](https://opensource.microsoft.com/)で管理されているすべてのソースコードリポジトリが含まれます。 -Microsoftが所有するリポジトリにおいて、[Microsoftのセキュリティ脆弱性の定義](https://aka.ms/opensource/security/definition)に該当するセキュリティ脆弱性を発見したと思われる場合は、以下の方法で報告してください。 +もし、Microsoftが所有するリポジトリにおいて[Microsoftのセキュリティ脆弱性の定義](https://aka.ms/opensource/security/definition)に該当する脆弱性を発見した場合は、以下の手順に従って報告してください。 ## セキュリティ問題の報告 -**セキュリティ脆弱性を公のGitHubイシューを通じて報告しないでください。** +**セキュリティ脆弱性を公開されたGitHubのIssueで報告しないでください。** -代わりに、Microsoftセキュリティレスポンスセンター(MSRC)に報告してください。報告は[https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report)で行えます。 +代わりに、Microsoft Security Response Center (MSRC)に以下のリンクから報告してください:[https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report)。 -ログインせずに提出したい場合は、[secure@microsoft.com](mailto:secure@microsoft.com)にメールを送信してください。可能であれば、私たちのPGPキーでメッセージを暗号化してください。PGPキーは[MicrosoftセキュリティレスポンスセンターPGPキーのページ](https://aka.ms/opensource/security/pgpkey)からダウンロードできます。 +ログインせずに提出したい場合は、[secure@microsoft.com](mailto:secure@microsoft.com)にメールを送信してください。可能であれば、メッセージを弊社のPGPキーで暗号化してください。PGPキーは[Microsoft Security Response Center PGP Keyページ](https://aka.ms/opensource/security/pgpkey)からダウンロードできます。 -24時間以内に返信を受け取るべきです。もし何らかの理由で受け取らなかった場合は、元のメッセージが届いているか確認するためにメールでフォローアップしてください。追加情報は[microsoft.com/msrc](https://aka.ms/opensource/security/msrc)で確認できます。 +通常、24時間以内に返信を受け取ることができます。万が一返信がない場合は、元のメッセージが届いているか確認するためにメールで再度お問い合わせください。追加情報は[こちら](https://aka.ms/opensource/security/msrc)で確認できます。 -以下に示す要求された情報をできる限り提供してください。これにより、問題の性質と範囲をより良く理解するのに役立ちます: +以下の情報を可能な限り提供してください。これにより、問題の性質や範囲をよりよく理解することができます: - * 問題の種類(例:バッファオーバーフロー、SQLインジェクション、クロスサイトスクリプティングなど) - * 問題の発現に関連するソースファイルの完全なパス - * 影響を受けたソースコードの場所(タグ/ブランチ/コミットまたは直接URL) + * 問題の種類(例: バッファオーバーフロー、SQLインジェクション、クロスサイトスクリプティングなど) + * 問題が発生する関連ソースファイルの完全なパス + * 影響を受けるソースコードの場所(タグ/ブランチ/コミットまたは直接のURL) * 問題を再現するために必要な特別な設定 - * 問題を再現するためのステップバイステップの手順 - * プルーフ・オブ・コンセプトまたはエクスプロイトコード(可能であれば) + * 問題を再現するための手順 + * 概念実証やエクスプロイトコード(可能であれば) * 問題の影響、攻撃者がどのように問題を悪用する可能性があるか -この情報は、あなたの報告を迅速にトリアージするのに役立ちます。 +これらの情報を提供することで、報告の優先順位付けが迅速に行われます。 -バグバウンティの報告を行う場合、より完全な報告は高いバウンティ報酬に寄与することがあります。私たちのアクティブなプログラムの詳細については、[Microsoftバグバウンティプログラム](https://aka.ms/opensource/security/bounty)のページをご覧ください。 +バグ報奨金プログラムに報告する場合、より詳細な報告は高額な報奨金につながる可能性があります。現在のプログラムについては、[Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty)ページをご覧ください。 -## 優先言語 +## 推奨言語 -私たちは、すべてのコミュニケーションが英語であることを好みます。 +すべてのコミュニケーションは英語で行うことを推奨します。 ## ポリシー -Microsoftは、[協調的脆弱性開示](https://aka.ms/opensource/security/cvd)の原則に従っています。 +Microsoftは[Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd)の原則に従っています。 **免責事項**: -この文書は、機械翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。元の文書はその母国語で権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は一切責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/etc/CODE_OF_CONDUCT.md b/translations/ja/etc/CODE_OF_CONDUCT.md index 009aa149..e261bc2d 100644 --- a/translations/ja/etc/CODE_OF_CONDUCT.md +++ b/translations/ja/etc/CODE_OF_CONDUCT.md @@ -1,12 +1,21 @@ -# Microsoftオープンソース行動規範 + +# マイクロソフト オープンソース行動規範 -このプロジェクトは、[Microsoftオープンソース行動規範](https://opensource.microsoft.com/codeofconduct/)を採用しています。 +このプロジェクトは[マイクロソフト オープンソース行動規範](https://opensource.microsoft.com/codeofconduct/)を採用しています。 リソース: -- [Microsoftオープンソース行動規範](https://opensource.microsoft.com/codeofconduct/) -- [Microsoft行動規範FAQ](https://opensource.microsoft.com/codeofconduct/faq/) -- 質問や懸念がある場合は、[opencode@microsoft.com](mailto:opencode@microsoft.com)までご連絡ください。 +- [マイクロソフト オープンソース行動規範](https://opensource.microsoft.com/codeofconduct/) +- [マイクロソフト 行動規範 FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- 質問や懸念がある場合は [opencode@microsoft.com](mailto:opencode@microsoft.com) にお問い合わせください **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。元の文書はその母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/etc/CONTRIBUTING.md b/translations/ja/etc/CONTRIBUTING.md index 072999e0..97331608 100644 --- a/translations/ja/etc/CONTRIBUTING.md +++ b/translations/ja/etc/CONTRIBUTING.md @@ -1,20 +1,30 @@ -# 貢献 + +# 貢献について -このプロジェクトは、貢献や提案を歓迎します。ほとんどの貢献には、あなたがその権利を持ち、実際に私たちにあなたの貢献を使用する権利を与えることを宣言する貢献者ライセンス契約(CLA)に同意する必要があります。詳細については、https://cla.microsoft.com をご覧ください。 +このプロジェクトでは、貢献や提案を歓迎しています。ほとんどの貢献には、コントリビューター ライセンス契約 (CLA) に同意する必要があります。これは、あなたがその貢献を使用する権利を私たちに与える権利を持ち、実際にその権利を与えることを宣言するものです。詳細については、https://cla.microsoft.com をご覧ください。 -プルリクエストを送信すると、CLAボットが自動的にCLAの提供が必要かどうかを判断し、PRを適切に装飾します(例:ラベル、コメント)。ボットから提供される指示に従ってください。この手続きは、私たちのCLAを使用しているすべてのリポジトリで一度だけ行う必要があります。 +プルリクエストを送信すると、CLAボットが自動的にCLAが必要かどうかを判断し、PRに適切なラベルやコメントを付けます。ボットの指示に従うだけで大丈夫です。この手続きは、CLAを使用するすべてのリポジトリで一度だけ行えば済みます。 -このプロジェクトは、[Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)を採用しています。詳細については、[Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)をご覧いただくか、追加の質問やコメントがある場合は [opencode@microsoft.com](mailto:opencode@microsoft.com) にご連絡ください。 +このプロジェクトは [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) を採用しています。 +詳細については、[Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) をご覧いただくか、追加の質問やコメントがある場合は [opencode@microsoft.com](mailto:opencode@microsoft.com) にお問い合わせください。 -# 貢献を募集中 +# 貢献をお待ちしています 現在、以下のトピックに関する貢献を積極的に募集しています: -- [ ] 深層強化学習に関するセクションの作成 -- [ ] 物体検出に関するセクションとノートブックの改善 -- [ ] PyTorch Lightning([このセクション](https://github.com/microsoft/AI-For-Beginners/blob/main/3-NeuralNetworks/05-Frameworks/README.md)用) -- [ ] 固有表現認識に関するセクションとサンプルの作成 -- [ ] [このセクション](https://github.com/microsoft/AI-For-Beginners/tree/main/5-NLP/15-LanguageModeling)用に独自の埋め込みをトレーニングするためのサンプル作成 +- [ ] 深層強化学習に関するセクションの執筆 +- [ ] オブジェクト検出に関するセクションとノートブックの改善 +- [ ] PyTorch Lightning([このセクション](https://github.com/microsoft/AI-For-Beginners/blob/main/3-NeuralNetworks/05-Frameworks/README.md) 用) +- [ ] 固有表現抽出に関するセクションとサンプルの執筆 +- [ ] [このセクション](https://github.com/microsoft/AI-For-Beginners/tree/main/5-NLP/15-LanguageModeling) 用に独自の埋め込みをトレーニングするサンプルの作成 **免責事項**: -この文書は、機械翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の文書はその母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用によって生じた誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/etc/Mindmap.md b/translations/ja/etc/Mindmap.md index f781e0a0..6c87714a 100644 --- a/translations/ja/etc/Mindmap.md +++ b/translations/ja/etc/Mindmap.md @@ -1,17 +1,26 @@ + # AI -## [AIの紹介](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/1-Intro/README.md) +## [AIの概要](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/1-Intro/README.md) - AIの定義 - AIの歴史 - AIへのアプローチ - トップダウン/シンボリック - ボトムアップ/ニューラル - - 進化的 - - シナジー的 / エマージェントAI - - [Microsoft AIビジネススクール](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-cacaste) + - 進化的アプローチ + - シナジー/創発的AI + - [Microsoft AI Business School](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-cacaste) ## [シンボリックAI](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/README.md) - - 知識の表現 + - 知識表現 - [エキスパートシステム](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) - [オントロジー](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) - セマンティックウェブ @@ -19,45 +28,45 @@ ## [ニューラルネットワーク](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/README.md) - [パーセプトロン](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/README.md) - [多層ネットワーク](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/README.md) - - [フレームワークの紹介](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/README.md) + - [フレームワークの概要](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/README.md) - [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) - [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.md) - [過学習](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/Overfitting.md) ## [コンピュータビジョン](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/README.md) - - MS Learnで + - MS Learnで学ぶ - [AIの基礎: コンピュータビジョンを探る](https://docs.microsoft.com/learn/paths/explore-computer-vision-microsoft-azure/?WT.mc_id=academic-77998-cacaste) - - [PyTorchによるCV](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) - - [TensorFlowによるCV](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste) - - [CVの紹介。OpenCV](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/README.md) + - [PyTorchを使ったコンピュータビジョン](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) + - [TensorFlowを使ったコンピュータビジョン](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste) + - [コンピュータビジョンの概要. OpenCV](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/README.md) - [畳み込みネットワーク](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/README.md) - [CNNアーキテクチャ](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) - [転移学習](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/README.md) - [トレーニングのコツ](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) - - [オートエンコーダーとVAE](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/README.md) - - [生成的敵対ネットワーク](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/README.md) + - [オートエンコーダとVAE](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/README.md) + - [敵対的生成ネットワーク](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/README.md) - [スタイル転送](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) - [物体検出](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/README.md) - [セグメンテーション](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/README.md) ## [自然言語処理](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/README.md) - - MS Learnで - - [AIの基礎: NLPを探る](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-cacaste) - - [PyTorchによるNLP](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) - - [TensorFlowによるNLP](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) -- [テキスト表現](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/README.md) - - 単語の袋 + - MS Learnで学ぶ + - [AIの基礎: 自然言語処理を探る](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-cacaste) + - [PyTorchを使った自然言語処理](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) + - [TensorFlowを使った自然言語処理](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) + - [テキスト表現](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/README.md) + - Bag of Words - TF/IDF - - [意味的埋め込み](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/README.md) + - [セマンティック埋め込み](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/README.md) - Word2Vec - GloVE - - [言語モデル](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling) - - [再帰型ニューラルネットワーク](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/README.md) + - [言語モデリング](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling) + - [リカレントニューラルネットワーク](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/README.md) - LSTM - GRU - - [生成再帰ネットワーク](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/README.md) + - [生成リカレントネットワーク](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/README.md) - [トランスフォーマーとBERT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/README.md) - - [名前付きエンティティ認識](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/19-NER/README.md) + - [固有表現抽出](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/19-NER/README.md) - [テキスト生成とGPT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/20-LanguageModels/README.md) ## その他の技術 - [遺伝的アルゴリズム](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/README.md) @@ -66,11 +75,11 @@ ## [AI倫理](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/7-Ethics/README.md) - [責任あるAIに関するMS Learn](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) -## 追加情報 +## エクストラ - [マルチモーダルネットワーク](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/README.md) - [CLIP](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) - DALL-E - VQ-GAN **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確さを追求していますが、自動翻訳にはエラーや不正確さが含まれる可能性があることをご理解ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用から生じる誤解や誤訳については、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があります。元の言語で記載された文書が正式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/etc/SUPPORT.md b/translations/ja/etc/SUPPORT.md index a6b47672..d7fc4871 100644 --- a/translations/ja/etc/SUPPORT.md +++ b/translations/ja/etc/SUPPORT.md @@ -1,14 +1,23 @@ + # サポート -## 問題の報告方法とヘルプの取得 +## 問題の報告とサポートの受け方 -このプロジェクトでは、バグや機能リクエストを追跡するためにGitHub Issuesを使用しています。新しい問題を報告する前に、既存の問題を検索して重複を避けてください。新しい問題については、バグや機能リクエストを新しいIssueとして報告してください。 +このプロジェクトでは、GitHub Issues を使用してバグや機能リクエストを追跡しています。重複を避けるために、新しい問題を報告する前に既存の問題を検索してください。新しい問題を報告する場合は、バグや機能リクエストを新しい Issue として提出してください。 -このプロジェクトの使用に関するヘルプや質問については、ディスカッションボードをご利用ください。 +このプロジェクトの使用に関する質問やサポートについては、ディスカッションボードをご利用ください。 -## Microsoftサポートポリシー +## Microsoft サポートポリシー -このプロジェクトに対するサポートは、上記のリソースに限定されています。 +このプロジェクトのサポートは、上記のリソースに限定されています。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文はその母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があることをご承知おきください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/etc/TRANSLATIONS.md b/translations/ja/etc/TRANSLATIONS.md index b3d808fd..ec4be884 100644 --- a/translations/ja/etc/TRANSLATIONS.md +++ b/translations/ja/etc/TRANSLATIONS.md @@ -1,18 +1,27 @@ -# レッスンの翻訳による貢献 + +# レッスンの翻訳で貢献する -このカリキュラムのレッスンに対する翻訳を歓迎します! +このカリキュラムのレッスンの翻訳を歓迎します! ## ガイドライン -各レッスンフォルダーとレッスン紹介フォルダーには、翻訳されたMarkdownファイルが含まれています。 +各レッスンフォルダーおよびレッスン紹介フォルダーには、翻訳されたMarkdownファイルが含まれています。 -> 注意:コードサンプルファイルのコードは翻訳しないでください。翻訳するのはREADME、課題、クイズのみです。ありがとうございます! +> 注意: コードサンプルファイル内のコードは翻訳しないでください。翻訳するのはREADME、課題、クイズのみです。よろしくお願いします! -翻訳されたファイルは次の命名規則に従う必要があります: +翻訳されたファイルは以下の命名規則に従ってください: **README._[language]_.md** -ここで _[language]_ はISO 639-1標準に従った2文字の言語略語です(例:`README.es.md`はスペイン語、`README.nl.md`はオランダ語)。 +_[language]_はISO 639-1標準に従った2文字の言語略称です(例: スペイン語の場合は`README.es.md`、オランダ語の場合は`README.nl.md`)。 **assignment._[language]_.md** @@ -20,17 +29,17 @@ READMEと同様に、課題も翻訳してください。 **クイズ** -1. クイズアプリに翻訳を追加するには、ここにファイルを追加してください:https://github.com/microsoft/AI-For-Beginners/tree/main/etc/quiz-app/src/assets/translations、適切な命名規則(en.json、fr.json)に従ってください。ただし、「true」または「false」という単語をローカライズしないでください。ありがとうございます! +1. クイズアプリに翻訳を追加するには、以下の場所にファイルを追加してください: https://github.com/microsoft/AI-For-Beginners/tree/main/etc/quiz-app/src/assets/translations。適切な命名規則(例: en.json, fr.json)を守ってください。**ただし、「true」や「false」という単語はローカライズしないでください。よろしくお願いします!** -2. クイズアプリのApp.vueファイルのドロップダウンにあなたの言語コードを追加してください。 +2. クイズアプリのApp.vueファイルでドロップダウンに言語コードを追加してください。 -3. クイズアプリの[translations index.jsファイル](https://github.com/microsoft/AI-For-Beginners/blob/main/etc/quiz-app/src/assets/translations/index.js)を編集して、あなたの言語を追加してください。 +3. クイズアプリの[translations index.jsファイル](https://github.com/microsoft/AI-For-Beginners/blob/main/etc/quiz-app/src/assets/translations/index.js)を編集して言語を追加してください。 -4. 最後に、翻訳されたREADME.mdファイル内のすべてのクイズリンクを編集して、あなたの翻訳されたクイズに直接リンクするようにしてください:https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1 は https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1?loc=id になります。 +4. 最後に、翻訳されたREADME.mdファイル内のすべてのクイズリンクを、翻訳されたクイズに直接リンクするよう編集してください: https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1 を https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1?loc=id に変更してください。 **ありがとうございます** -あなたの努力に心から感謝します! +皆さんの努力に心から感謝します! **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用によって生じる誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/etc/quiz-app/README.md b/translations/ja/etc/quiz-app/README.md index 21af6ce7..df9d17d8 100644 --- a/translations/ja/etc/quiz-app/README.md +++ b/translations/ja/etc/quiz-app/README.md @@ -1,38 +1,47 @@ + # クイズ -これらのクイズは、https://aka.ms/ai-beginners のAIカリキュラムの講義前後のクイズです。 +これらのクイズは、AIカリキュラム(https://aka.ms/ai-beginners)の講義前後に行うクイズです。 -## 翻訳されたクイズセットの追加 +## 翻訳されたクイズセットを追加する -`assets/translations` フォルダー内に一致するクイズ構造を作成することで、クイズの翻訳を追加します。標準のクイズは `assets/translations/en` にあります。クイズはレッスンごとにいくつかのグループに分けられています。適切なクイズセクションに番号を合わせるようにしてください。このカリキュラムには合計40のクイズがあり、カウントは0から始まります。 +翻訳されたクイズを追加するには、`assets/translations`フォルダー内に対応するクイズ構造を作成します。オリジナルのクイズは`assets/translations/en`にあります。クイズはレッスンごとにいくつかのグループに分けられています。適切なクイズセクションと番号を一致させるようにしてください。このカリキュラムには合計40個のクイズがあり、番号は0から始まります。 -翻訳を編集した後、`en` の規約に従ってすべてのファイルをインポートするために、翻訳フォルダー内の index.js ファイルを編集します。 +翻訳を編集した後、翻訳フォルダー内の`index.js`ファイルを編集し、`en`の規則に従ってすべてのファイルをインポートします。 -`assets/translations` 内の `index.js` ファイルを編集して、新しい翻訳ファイルをインポートします。 +次に、`assets/translations`内の`index.js`ファイルを編集して、新しい翻訳ファイルをインポートします。 -次に、このアプリの `App.vue` 内のドロップダウンを編集して、あなたの言語を追加します。ローカライズされた略語をあなたの言語のフォルダー名に一致させてください。 +その後、このアプリ内の`App.vue`のドロップダウンを編集して、あなたの言語を追加します。ローカライズされた略語を言語フォルダー名と一致させてください。 -最後に、翻訳されたレッスン内のすべてのクイズリンクを、存在する場合は、次のようなクエリパラメータを含むように編集します: `?loc=fr` など。 +最後に、翻訳されたレッスン内のすべてのクイズリンクを編集し、ローカライズをクエリパラメーターとして含めるようにします。例: `?loc=fr` -## プロジェクトのセットアップ +## プロジェクトセットアップ ``` npm install ``` -### 開発用にコンパイルとホットリロード +### 開発用のコンパイルとホットリロード ``` npm run serve ``` -### 本番用にコンパイルとミニファイ +### 本番用のコンパイルと最小化 ``` npm run build ``` -### ファイルのリンティングと修正 +### ファイルのリントと修正 ``` npm run lint @@ -40,57 +49,58 @@ npm run lint ### 設定のカスタマイズ -[設定リファレンス](https://cli.vuejs.org/config/)を参照してください。 +[Configuration Reference](https://cli.vuejs.org/config/)を参照してください。 クレジット: このクイズアプリのオリジナルバージョンに感謝します: https://github.com/arpan45/simple-quiz-vue ## Azureへのデプロイ -ここでは、始めるためのステップバイステップガイドを紹介します。 +以下は、始めるためのステップバイステップガイドです: -1. GitHubリポジトリをフォークする -静的WebアプリのコードがGitHubリポジトリにあることを確認します。このリポジトリをフォークしてください。 +1. GitHubリポジトリをフォークする +静的ウェブアプリのコードをGitHubリポジトリに保存します。このリポジトリをフォークしてください。 -2. Azure Static Web Appを作成する -- [Azureアカウント](http://azure.microsoft.com)を作成します。 -- [Azureポータル](https://portal.azure.com)にアクセスします。 -- 「リソースの作成」をクリックし、「Static Web App」を検索します。 +2. Azure Static Web Appを作成する +- [Azureアカウント](http://azure.microsoft.com)を作成します。 +- [Azureポータル](https://portal.azure.com)にアクセスします。 +- 「リソースの作成」をクリックし、「Static Web App」を検索します。 - 「作成」をクリックします。 -3. Static Web Appを構成する -- 基本: サブスクリプション: あなたのAzureサブスクリプションを選択します。 -- リソースグループ: 新しいリソースグループを作成するか、既存のものを使用します。 -- 名前: 静的Webアプリの名前を提供します。 -- リージョン: ユーザーに最も近いリージョンを選択します。 +3. Static Web Appを構成する +- #### 基本設定: + - サブスクリプション: Azureサブスクリプションを選択します。 + - リソースグループ: 新しいリソースグループを作成するか、既存のものを使用します。 + - 名前: 静的ウェブアプリの名前を入力します。 + - リージョン: ユーザーに最も近いリージョンを選択します。 -- #### デプロイメントの詳細: -- ソース: 「GitHub」を選択します。 -- GitHubアカウント: AzureがあなたのGitHubアカウントにアクセスすることを許可します。 -- 組織: あなたのGitHub組織を選択します。 -- リポジトリ: 静的Webアプリを含むリポジトリを選択します。 -- ブランチ: デプロイ元のブランチを選択します。 +- #### デプロイメントの詳細: + - ソース: 「GitHub」を選択します。 + - GitHubアカウント: AzureにGitHubアカウントへのアクセスを許可します。 + - 組織: GitHubの組織を選択します。 + - リポジトリ: 静的ウェブアプリを含むリポジトリを選択します。 + - ブランチ: デプロイするブランチを選択します。 -- #### ビルドの詳細: -- ビルドプリセット: アプリが構築されているフレームワークを選択します(例: React, Angular, Vueなど)。 -- アプリの場所: アプリコードが含まれているフォルダーを指定します(例: ルートにある場合は /)。 -- APIの場所: APIがある場合、その場所を指定します(オプション)。 -- 出力の場所: ビルド出力が生成されるフォルダーを指定します(例: build または dist)。 +- #### ビルドの詳細: + - ビルドプリセット: アプリが構築されているフレームワークを選択します(例: React, Angular, Vueなど)。 + - アプリの場所: アプリコードが含まれるフォルダーを指定します(例: ルートの場合は/)。 + - APIの場所: APIがある場合、その場所を指定します(オプション)。 + - 出力の場所: ビルド出力が生成されるフォルダーを指定します(例: buildまたはdist)。 -4. レビューして作成 -設定を確認し、「作成」をクリックします。Azureは必要なリソースをセットアップし、あなたのリポジトリにGitHub Actionsワークフローを作成します。 +4. レビューと作成 +設定を確認し、「作成」をクリックします。Azureが必要なリソースを設定し、GitHubリポジトリにGitHub Actionsワークフローを作成します。 -5. GitHub Actionsワークフロー -Azureは自動的にあなたのリポジトリにGitHub Actionsワークフローファイルを作成します (.github/workflows/azure-static-web-apps-.yml)。このワークフローはビルドとデプロイのプロセスを処理します。 +5. GitHub Actionsワークフロー +Azureは自動的にリポジトリ内にGitHub Actionsワークフロー(.github/workflows/azure-static-web-apps-.yml)を作成します。このワークフローがビルドとデプロイプロセスを処理します。 -6. デプロイの監視 -あなたのGitHubリポジトリの「Actions」タブに移動します。 -ワークフローが実行中であることが表示されるはずです。このワークフローは静的WebアプリをAzureにビルドしてデプロイします。 -ワークフローが完了すると、あなたのアプリは提供されたAzure URLでライブになります。 +6. デプロイの監視 +GitHubリポジトリの「Actions」タブに移動します。 +ワークフローが実行中であることを確認できます。このワークフローが静的ウェブアプリをAzureにビルドしてデプロイします。 +ワークフローが完了すると、提供されたAzure URLでアプリが公開されます。 -### 例: ワークフローファイル +### ワークフローファイルの例 -以下は、GitHub Actionsワークフローファイルの例です: -name: Azure Static Web Apps CI/CD +以下は、GitHub Actionsワークフローファイルの例です: +name: Azure Static Web Apps CI/CD ``` on: push: @@ -120,8 +130,8 @@ jobs: ``` ### 追加リソース -- [Azure Static Web Apps ドキュメント](https://learn.microsoft.com/azure/static-web-apps/getting-started) -- [GitHub Actions ドキュメント](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) +- [Azure Static Web Apps ドキュメント](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [GitHub Actions ドキュメント](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用から生じる誤解や誤訳については、一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書が正式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/0-course-setup/for-teachers.md b/translations/ja/lessons/0-course-setup/for-teachers.md index 21f92f67..6f0f621a 100644 --- a/translations/ja/lessons/0-course-setup/for-teachers.md +++ b/translations/ja/lessons/0-course-setup/for-teachers.md @@ -1,26 +1,35 @@ -# 教育者のために + +# 教育者向け -このカリキュラムを教室で使用したいですか?どうぞお気軽にご利用ください! +このカリキュラムを教室で使用してみませんか?ぜひご利用ください! -実際、GitHub Classroomを使用して、GitHub内で直接利用することもできます。 +実際、GitHub Classroomを使えば、GitHub上でこのカリキュラムを活用することができます。 -そのためには、このリポジトリをフォークしてください。各レッスンのためにリポジトリを作成する必要があるので、各フォルダを別々のリポジトリに抽出する必要があります。そうすることで、[GitHub Classroom](https://classroom.github.com/classrooms)が各レッスンを個別に取得できます。 +そのためには、このリポジトリをフォークしてください。各レッスンごとにリポジトリを作成する必要があるため、各フォルダーを個別のリポジトリに分ける必要があります。そうすることで、[GitHub Classroom](https://classroom.github.com/classrooms)が各レッスンを個別に認識できるようになります。 -これらの[完全な手順](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/)を参考にすれば、教室の設定方法がわかります。 +これらの[詳細な手順](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/)を参考にして、教室をセットアップする方法を確認してください。 -## リポジトリをそのまま使用する +## 現状のリポジトリをそのまま使用する場合 -このリポジトリを現在の状態のまま使用したい場合、GitHub Classroomを使用せずにそれを行うことも可能です。どのレッスンを一緒に進めるかを学生に伝える必要があります。 +GitHub Classroomを使用せずに、このリポジトリをそのまま利用したい場合も可能です。その場合、どのレッスンを一緒に進めるかを学生に伝える必要があります。 -オンライン形式(Zoom、Teams、その他)では、クイズのためにブレイクアウトルームを作成し、学生を指導して学ぶ準備を手助けすることができます。その後、学生を招待してクイズを受けさせ、一定の時間に「イシュー」として回答を提出させることができます。課題についても同様に、学生がオープンに協力して作業することを希望する場合は行えます。 +オンライン形式(Zoom、Teams、その他)では、クイズ用にブレイクアウトルームを作成し、学生が学習の準備を整えられるように指導することができます。その後、学生をクイズに招待し、指定された時間に回答を「issue」として提出させることができます。同様に、課題についても、学生がオープンな環境で共同作業を行いたい場合に適用できます。 -よりプライベートな形式を希望する場合は、学生にカリキュラムをレッスンごとにフォークして、自分のGitHubリポジトリにプライベートリポジトリとして作成し、あなたにアクセスを許可するように依頼してください。そうすれば、彼らはプライベートにクイズや課題を完了し、教室のリポジトリにイシューを通じて提出できます。 +よりプライベートな形式を希望する場合は、学生にカリキュラムをレッスンごとにフォークし、自分のGitHubリポジトリにプライベートリポジトリとして保存するよう依頼してください。そして、あなたにアクセス権を付与してください。その後、学生はクイズや課題をプライベートに完了し、教室用リポジトリのissueを通じて提出することができます。 -オンライン教室形式でこれを機能させる方法はたくさんあります。あなたにとって最適な方法を教えてください! +オンライン教室形式でこれを実現する方法はたくさんあります。ぜひ、あなたにとって最適な方法を教えてください! ## ご意見をお聞かせください -私たちはこのカリキュラムがあなたとあなたの学生にとって役立つようにしたいと考えています。ぜひディスカッションボードでフィードバックをお寄せください! +このカリキュラムがあなたや学生にとって役立つものになるようにしたいと考えています。ぜひディスカッションボードでフィードバックをお寄せください! **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳にはエラーや不正確さが含まれる可能性があることにご留意ください。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用に起因する誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の言語で記載された原文が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/0-course-setup/how-to-run.md b/translations/ja/lessons/0-course-setup/how-to-run.md index 2aa121b3..5a29cca2 100644 --- a/translations/ja/lessons/0-course-setup/how-to-run.md +++ b/translations/ja/lessons/0-course-setup/how-to-run.md @@ -1,12 +1,21 @@ -# コードの実行方法 + +# コードを実行する方法 -このカリキュラムには、多くの実行可能な例やラボが含まれており、実行したいと思うでしょう。これを行うには、このカリキュラムの一部として提供されているJupyter NotebookでPythonコードを実行する能力が必要です。コードを実行するためのいくつかのオプションがあります。 +このカリキュラムには、実行可能な例やラボが多数含まれており、それらを実行したいと思うでしょう。そのためには、このカリキュラムの一部として提供されるJupyter NotebookでPythonコードを実行する環境が必要です。コードを実行するには、いくつかの選択肢があります。 -## コンピュータ上でローカルに実行する +## ローカル環境で実行する -コンピュータ上でローカルにコードを実行するには、Pythonの何らかのバージョンをインストールする必要があります。個人的には、**[miniconda](https://conda.io/en/latest/miniconda.html)**のインストールをお勧めします。これは、異なるPythonの**仮想環境**用の`conda`パッケージマネージャをサポートする、比較的軽量なインストールです。 +コードをローカル環境で実行するには、何らかのバージョンのPythonをインストールする必要があります。個人的には、**[miniconda](https://conda.io/en/latest/miniconda.html)** のインストールをお勧めします。これは軽量なインストールで、`conda`パッケージマネージャを使用してさまざまなPythonの**仮想環境**をサポートします。 -minicondaをインストールしたら、リポジトリをクローンし、このコースで使用する仮想環境を作成する必要があります: +minicondaをインストールした後、このコース用の仮想環境を作成するためにリポジトリをクローンし、以下を実行します: ```bash git clone http://github.com/microsoft/ai-for-beginners @@ -15,53 +24,53 @@ conda env create --name ai4beg --file .devcontainer/environment.yml conda activate ai4beg ``` -### Python拡張機能を使用したVisual Studio Codeの利用 +### Python拡張機能を使ったVisual Studio Codeの利用 -カリキュラムを使用する最良の方法は、[Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste)を[Python拡張機能](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste)で開くことです。 +おそらく、このカリキュラムを利用する最良の方法は、[Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste)と[Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste)を使って開くことです。 -> **注意**: リポジトリをクローンしてVS Codeでディレクトリを開くと、自動的にPython拡張機能のインストールを提案されます。また、上記のようにminicondaもインストールする必要があります。 +> **Note**: リポジトリをクローンしてVS Codeでディレクトリを開くと、Python拡張機能のインストールを自動的に提案されます。また、上記のようにminicondaをインストールする必要があります。 -> **注意**: VS Codeがリポジトリをコンテナ内で再オープンするよう提案した場合、ローカルのPythonインストールを使用するためにこれを拒否する必要があります。 +> **Note**: VS Codeがリポジトリをコンテナで再オープンすることを提案した場合、ローカルのPythonインストールを使用するためにこれを拒否してください。 -### ブラウザでのJupyterの使用 +### ブラウザでJupyterを使用する -ブラウザから直接Jupyter環境を使用することもできます。実際、従来のJupyterとJupyter Hubの両方は、自動補完やコードハイライトなどを備えた非常に便利な開発環境を提供します。 +ブラウザ上でJupyter環境を直接使用することもできます。実際、クラシックなJupyterやJupyter Hubは、オートコンプリートやコードのハイライトなど、非常に便利な開発環境を提供します。 -ローカルでJupyterを開始するには、コースのディレクトリに移動し、次のコマンドを実行します: +ローカルでJupyterを起動するには、コースのディレクトリに移動し、以下を実行します: ```bash jupyter notebook -``` -または +``` +または ```bash jupyterhub -``` -その後、`.ipynb` files, open them and start working. +``` +その後、任意の`.ipynb`ファイルに移動して開き、作業を開始できます。 -### Running in container +### コンテナで実行する -One alternative to Python installation would be to run the code in container. Since our repository contains special `.devcontainer`フォルダに移動し、このリポジトリのコンテナを構築する方法を指示します。VS Codeはコンテナ内でコードを再オープンすることを提案します。これにはDockerのインストールが必要で、またより複雑になるため、経験豊富なユーザーにお勧めします。 +Pythonをインストールする代わりの方法として、コンテナ内でコードを実行することもできます。このリポジトリには、`.devcontainer`フォルダが含まれており、このリポジトリ用のコンテナを構築する方法が記載されています。そのため、VS Codeはコードをコンテナで再オープンすることを提案します。ただし、これにはDockerのインストールが必要で、より複雑になるため、経験豊富なユーザーにお勧めします。 -## クラウドでの実行 +## クラウドで実行する -ローカルにPythonをインストールしたくない場合や、クラウドリソースにアクセスできる場合は、クラウドでコードを実行する良い代替手段があります。これを行う方法はいくつかあります: +Pythonをローカルにインストールしたくない場合や、クラウドリソースにアクセスできる場合は、クラウドでコードを実行するのも良い選択肢です。以下の方法があります: -* **[GitHub Codespaces](https://github.com/features/codespaces)**を使用する。これは、GitHub上であなたのために作成された仮想環境で、VS Codeのブラウザインターフェースを通じてアクセスできます。Codespacesにアクセスできる場合は、リポジトリの**Code**ボタンをクリックし、コードスペースを開始すれば、すぐに実行できます。 -* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**を使用する。[Binder](https://mybinder.org)は、GitHub上のコードを試すために提供される無料の計算リソースです。フロントページにあるボタンをクリックすると、リポジトリがBinderで開かれ、すぐに基盤となるコンテナが構築され、Jupyterのウェブインターフェースがシームレスに開始されます。 +* **[GitHub Codespaces](https://github.com/features/codespaces)** を使用する方法。これはGitHub上で作成される仮想環境で、VS Codeのブラウザインターフェースを通じてアクセスできます。Codespacesにアクセスできる場合は、リポジトリの**Code**ボタンをクリックし、Codespaceを開始するだけで、すぐに実行を開始できます。 +* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** を使用する方法。[Binder](https://mybinder.org)は、GitHub上のコードを試すために提供される無料のクラウドコンピューティングリソースです。リポジトリのフロントページにあるボタンをクリックすると、Binderサイトに移動し、基盤となるコンテナを構築してJupyterのウェブインターフェースをシームレスに開始できます。 -> **注意**: 悪用を防ぐために、Binderは一部のウェブリソースへのアクセスをブロックしています。これにより、公共のインターネットからモデルやデータセットを取得するコードが正常に動作しない場合があります。何らかの回避策を見つける必要があるかもしれません。また、Binderが提供する計算リソースは非常に基本的なものであるため、特に後のより複雑なレッスンではトレーニングが遅くなります。 +> **Note**: 不正利用を防ぐため、Binderでは一部のウェブリソースへのアクセスが制限されています。これにより、モデルやデータセットをインターネットから取得するコードが動作しない場合があります。回避策を見つける必要があるかもしれません。また、Binderが提供する計算リソースは非常に基本的なものなので、特に後半の複雑なレッスンではトレーニングが遅くなる可能性があります。 ## GPUを使用したクラウドでの実行 -このカリキュラムの後半のレッスンのいくつかは、GPUサポートから大きな恩恵を受けるでしょう。そうしないと、トレーニングが非常に遅くなります。特に、[Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste)やあなたの機関を通じてクラウドにアクセスできる場合、いくつかのオプションがあります: +このカリキュラムの後半のレッスンでは、GPUサポートがあると非常に便利です。GPUがないとトレーニングが非常に遅くなるためです。クラウドにアクセスできる場合([Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste)や所属機関を通じて)、以下のオプションを検討できます: -* [データサイエンス仮想マシン](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste)を作成し、Jupyterを通じて接続します。その後、リポジトリをマシンにクローンし、学習を開始できます。NCシリーズのVMはGPUサポートがあります。 +* [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste)を作成し、Jupyterを通じて接続します。その後、リポジトリをマシン上にクローンして学習を開始できます。NCシリーズのVMはGPUサポートがあります。 -> **注意**: 一部のサブスクリプション、特にAzure for Studentsは、デフォルトでGPUサポートを提供していません。追加のGPUコアを技術サポートにリクエストする必要があるかもしれません。 +> **Note**: 一部のサブスクリプション(Azure for Studentsを含む)では、デフォルトでGPUサポートが提供されていません。追加のGPUコアをリクエストするために技術サポートに問い合わせる必要がある場合があります。 -* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste)を作成し、そこでノートブック機能を使用します。[このビデオ](https://azure-for-academics.github.io/quickstart/azureml-papers/)では、リポジトリをAzure MLノートブックにクローンし、使用を開始する方法が示されています。 +* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste)を作成し、そこでNotebook機能を使用します。[このビデオ](https://azure-for-academics.github.io/quickstart/azureml-papers/)では、Azure MLノートブックにリポジトリをクローンして使用を開始する方法を示しています。 -また、Google Colabを使用することもでき、こちらには無料のGPUサポートがあり、Jupyter Notebookをアップロードして一つずつ実行することができます。 +また、Google Colabを使用することもできます。Google Colabは無料のGPUサポートを提供しており、Jupyter Notebookをアップロードして1つずつ実行することができます。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文のネイティブ言語の文書を権威ある情報源として考慮するべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/0-course-setup/setup.md b/translations/ja/lessons/0-course-setup/setup.md index 51d075d6..7ab09549 100644 --- a/translations/ja/lessons/0-course-setup/setup.md +++ b/translations/ja/lessons/0-course-setup/setup.md @@ -1,45 +1,57 @@ + # このカリキュラムの始め方 -## あなたは学生ですか? +## 学生の方へ 以下のリソースから始めましょう: -* [学生ハブページ](https://docs.microsoft.com/learn/student-hub?WT.mc_id=academic-77998-cacaste) このページでは、初心者向けのリソース、学生パック、さらには無料の認定バウチャーを取得する方法を見つけることができます。これはブックマークして、月に一度はコンテンツが切り替わるので、時々チェックしたいページです。 -* [Microsoft Student Learn大使](https://studentambassadors.microsoft.com?WT.mc_id=academic-77998-cacaste) 世界中の学生大使コミュニティに参加しましょう。これがあなたのMicrosoftへの道になるかもしれません。 +* [Student Hub ページ](https://docs.microsoft.com/learn/student-hub?WT.mc_id=academic-77998-cacaste) + このページでは、初心者向けリソース、学生向けパック、さらには無料の認定試験バウチャーを取得する方法が見つかります。このページはブックマークして、定期的にチェックすることをお勧めします。コンテンツは少なくとも月に一度更新されます。 +* [Microsoft Student Learn アンバサダー](https://studentambassadors.microsoft.com?WT.mc_id=academic-77998-cacaste) + 学生アンバサダーのグローバルコミュニティに参加しましょう。これがMicrosoftへの道になるかもしれません。 -**学生の皆さん**、カリキュラムを利用する方法はいくつかあります。まず、テキストを読んで、GitHub上で直接コードを確認することができます。ノートブックのコードを実行したい場合は、[こちらの指示を読んで](./etc/how-to-run.md)、[このブログ記事](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)で実行方法についてのアドバイスを見つけてください。 +**学生の皆さん**、このカリキュラムを利用する方法はいくつかあります。まず、GitHub上で直接テキストを読んだりコードを確認したりすることができます。ノートブック内のコードを実行したい場合は、[こちらの手順](./etc/how-to-run.md)を読んでください。また、[このブログ記事](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)でさらにアドバイスを見つけることができます。 -> **注**: [このカリキュラムのコードを実行するための指示](/how-to-run.md) +> **Note**: [このカリキュラム内のコードを実行する手順](./how-to-run.md) -## 自己学習 +## 自習 -もし自己学習プロジェクトとしてコースを受講したい場合は、リポジトリ全体を自分のGitHubアカウントにフォークし、自分またはグループで演習を完了することをお勧めします: +もしこのコースを自習プロジェクトとして進めたい場合は、リポジトリ全体を自分のGitHubアカウントにフォークし、以下の手順で演習を進めることをお勧めします: -* 講義前のクイズから始めましょう。 -* 講義のイントロテキストを読みます。 -* 講義に追加のノートブックがある場合は、それらを読み、コードを実行しながら進めます。TensorFlowとPyTorchのノートブックが提供されている場合は、どちらか一方に集中してください。お気に入りのフレームワークを選びましょう。 -* ノートブックには、実験のためにコードを少し調整する必要がある課題が含まれていることがよくあります。 -* 講義後のクイズを受けます。 -* モジュールにラボが付随している場合は、課題を完了します。 -* [ディスカッションボード](https://github.com/microsoft/AI-For-Beginners/discussions)を訪れて、「声に出して学ぶ」ことができます。 +* 講義前のクイズから始める。 +* 講義のイントロテキストを読む。 +* 講義に追加のノートブックがある場合、それを読みながらコードを実行する。TensorFlowとPyTorchの両方のノートブックが提供されている場合は、好きなフレームワークを選んで進めてください。 +* ノートブックには、コードを少し変更して実験するような課題が含まれていることがよくあります。 +* 講義後のクイズを受ける。 +* モジュールにラボが付属している場合は、課題を完了する。 +* [ディスカッションボード](https://github.com/microsoft/AI-For-Beginners/discussions)を訪れて、「声に出して学ぶ」ことを実践する。 -> さらなる学習のために、これらの[Microsoft Learn](https://docs.microsoft.com/en-us/users/dmitrysoshnikov-9132/collections/31zgizg2p418yo/?WT.mc_id=academic-77998-cacaste)モジュールや学習パスをフォローすることをお勧めします。 +> さらに学びたい場合は、[Microsoft Learn](https://docs.microsoft.com/en-us/users/dmitrysoshnikov-9132/collections/31zgizg2p418yo/?WT.mc_id=academic-77998-cacaste)のモジュールや学習パスをお勧めします。 -**教師の皆さん**、このカリキュラムの使用方法についての[提案を含めています](/for-teachers.md)。 +**教師の方へ**、このカリキュラムの利用方法について[いくつかの提案](/for-teachers.md)を含めています。 --- -## 教育方法 +## 教育方針 -このカリキュラムを構築する際に、私たちは2つの教育的原則を選びました:実践的な**プロジェクトベース**であること、そして**頻繁なクイズ**を含むことです。 +このカリキュラムを構築する際、次の2つの教育方針を採用しました: +**プロジェクトベース**で実践的であること、そして**頻繁なクイズ**を含むこと。 -コンテンツがプロジェクトと連携することで、学生にとってより魅力的なプロセスとなり、概念の保持が促進されます。さらに、クラス前の低リスクのクイズは、学生の学習意欲を高め、クラス後の2回目のクイズがさらなる保持を確実にします。このカリキュラムは柔軟で楽しく、全体または一部を受講できます。プロジェクトは小さく始まり、12週間のサイクルの終わりに向かって徐々に複雑になります。 +コンテンツをプロジェクトに合わせることで、学生にとってより魅力的なプロセスとなり、概念の定着が促進されます。また、授業前の低リスクなクイズは、学生がトピックを学ぶ意図を設定するのに役立ち、授業後のクイズはさらに定着を深めます。このカリキュラムは柔軟で楽しいものとして設計されており、全体または一部を受講することができます。プロジェクトは小さなものから始まり、12週間のサイクルの終わりには徐々に複雑になります。 -> **クイズに関する注記**: すべてのクイズは[このアプリ](https://red-field-0a6ddfd03.1.azurestaticapps.net/)に含まれており、合計50のクイズがそれぞれ3つの質問で構成されています。レッスン内からリンクされていますが、クイズアプリはローカルで実行できます。`etc/quiz-app`フォルダー内の指示に従ってください。 +> **クイズについての注意**: すべてのクイズは[このアプリ](https://red-field-0a6ddfd03.1.azurestaticapps.net/)に含まれています。全50問、各3問のクイズが用意されています。レッスン内からリンクされていますが、クイズアプリはローカルで実行することもできます。`etc/quiz-app`フォルダー内の手順に従ってください。 -## オフラインアクセス +## オフラインでの利用 -[Docsify](https://docsify.js.org/#/)を使用して、このドキュメントをオフラインで実行できます。このリポジトリをフォークし、ローカルマシンに[Docsifyをインストール](https://docsify.js.org/#/quickstart)した後、このリポジトリの`etc/docsify`フォルダーで`docsify serve`と入力します。ウェブサイトは、localhostのポート3000で提供されます: `localhost:3000`。カリキュラムのPDFは[こちらのリンク](../../../../../../etc/pdf/readme.pdf)から入手できます。 +[Docsify](https://docsify.js.org/#/)を使用して、このドキュメントをオフラインで実行できます。このリポジトリをフォークし、[Docsifyをインストール](https://docsify.js.org/#/quickstart)してローカルマシンにセットアップしてください。その後、このリポジトリのルートフォルダーで`docsify serve`と入力します。ウェブサイトはローカルホストのポート3000で提供されます:`localhost:3000`。カリキュラムのPDF版は[こちらのリンク](../../../../../../../../../etc/pdf/readme.pdf)から入手できます。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/1-Intro/README.md b/translations/ja/lessons/1-Intro/README.md index b333f5b1..f696f177 100644 --- a/translations/ja/lessons/1-Intro/README.md +++ b/translations/ja/lessons/1-Intro/README.md @@ -1,56 +1,66 @@ -> 画像提供者: [Dmitry Soshnikov](http://soshnikov.com) + +> Image by [Dmitry Soshnikov](http://soshnikov.com) -時間が経つにつれて、コンピューティングリソースが安価になり、より多くのデータが利用可能になったため、ニューラルネットワークアプローチは、多くの分野、例えばコンピュータビジョンや音声理解において、人間と競う優れた性能を示し始めました。過去10年の間、人工知能という用語は主にニューラルネットワークの同義語として使われており、私たちが耳にするAIの成功の多くはそれに基づいています。 +時が経つにつれ、コンピュータのリソースが安価になり、利用可能なデータが増加したことで、ニューラルネットワークのアプローチが人間と競争する多くの分野、例えばコンピュータビジョンや音声認識で優れた性能を示すようになりました。近年では、人工知能という言葉がほとんどニューラルネットワークの同義語として使われています。なぜなら、私たちが耳にするAIの成功のほとんどがニューラルネットワークに基づいているからです。 -チェスをプレイするコンピュータプログラムの作成におけるアプローチの変化を観察することができます: +チェスをプレイするコンピュータプログラムの開発において、アプローチの変化を観察することができます: -* 初期のチェスプログラムは探索に基づいており、プログラムは明示的に対戦相手の次の数手の可能な動きを推定し、数手後に達成可能な最適な位置に基づいて最適な動きを選択しました。これにより、いわゆる[アルファベータプルーニング](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning)探索アルゴリズムが開発されました。 -* 探索戦略は、ゲームの終盤において、限られた数の可能な動きによって探索空間が制限されるため、うまく機能します。しかし、ゲームの開始時には探索空間が非常に大きく、アルゴリズムは人間プレイヤー間の既存の試合から学ぶことで改善できます。その後の実験では、プログラムがゲームの現在の位置に非常に似たケースを知識ベースから探す、いわゆる[事例ベース推論](https://en.wikipedia.org/wiki/Case-based_reasoning)が使用されました。 -* 現代のプログラムは、人間プレイヤーに勝つためにニューラルネットワークと[強化学習](https://en.wikipedia.org/wiki/Reinforcement_learning)に基づいており、プログラムは自分自身と長時間対戦し、自分の間違いから学ぶことでプレイを学びます。これは、人間がチェスを学ぶときに行う方法に似ています。しかし、コンピュータプログラムは、はるかに短い時間で多くのゲームをプレイできるため、学習もはるかに速くなります。 +* 初期のチェスプログラムは探索に基づいていました。プログラムは、次の数手で相手が可能性のある手を推定し、数手後に達成可能な最適な位置に基づいて最適な手を選択しました。このアプローチは、いわゆる[アルファベータ剪定](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning)探索アルゴリズムの開発につながりました。 +* 探索戦略は、可能な手の数が限られているゲーム終盤ではうまく機能します。しかし、ゲーム序盤では探索空間が非常に広く、既存の人間プレイヤーの試合から学ぶことでアルゴリズムを改善することができます。その後の実験では、いわゆる[ケースベース推論](https://en.wikipedia.org/wiki/Case-based_reasoning)が採用され、プログラムはゲームの現在の位置に非常に似たケースを知識ベースから探しました。 +* 現代の人間プレイヤーを凌駕するプログラムは、ニューラルネットワークと[強化学習](https://en.wikipedia.org/wiki/Reinforcement_learning)に基づいており、プログラムは自分自身と長時間プレイし、自分のミスから学ぶことでプレイ方法を学びます。これは、人間がチェスを学ぶ方法と非常に似ています。ただし、コンピュータプログラムははるかに多くのゲームを短時間でプレイできるため、より速く学習することができます。 -✅ AIがプレイした他のゲームについて少し調査してみてください。 +✅ AIがプレイした他のゲームについて少し調べてみましょう。 -同様に、「会話プログラム」を作成するアプローチの変化も見ることができます(チューリングテストを通過するかもしれません): +同様に、「会話するプログラム」(チューリングテストを通過する可能性がある)の開発アプローチの変化も見ることができます: -* この種の初期プログラムである[Eliza](https://en.wikipedia.org/wiki/ELIZA)は、非常に単純な文法ルールと入力文を質問に再構成することに基づいていました。 -* 現代のアシスタント、例えばCortana、Siri、Google Assistantはすべて、音声をテキストに変換し、私たちの意図を認識するためにニューラルネットワークを使用し、その後、必要なアクションを実行するために推論または明示的なアルゴリズムを使用するハイブリッドシステムです。 -* 将来的には、対話を自ら処理する完全なニューラルベースのモデルが期待されます。最近のGPTや[Turing-NLG](https://turing.microsoft.com/)ファミリーのニューラルネットワークは、この点で大きな成功を収めています。 +* [Eliza](https://en.wikipedia.org/wiki/ELIZA)のような初期のプログラムは、非常に単純な文法規則と入力文を質問に再構成する方法に基づいていました。 +* 現代のアシスタント、例えばCortana、Siri、Google Assistantは、音声をテキストに変換し意図を認識するためにニューラルネットワークを使用し、その後、必要なアクションを実行するために推論や明示的なアルゴリズムを使用するハイブリッドシステムです。 +* 将来的には、完全なニューラルベースのモデルが対話を自動的に処理することが期待されます。最近のGPTや[Turing-NLG](https://turing.microsoft.com/)ファミリーのニューラルネットワークは、この分野で大きな成功を収めています。 -> 画像提供者: Dmitry Soshnikov、[写真](https://unsplash.com/photos/r8LmVbUKgns)提供者: [Marina Abrosimova](https://unsplash.com/@abrosimova_marina_foto)、Unsplash +> 画像提供: Dmitry Soshnikov, [写真](https://unsplash.com/photos/r8LmVbUKgns) 提供: [Marina Abrosimova](https://unsplash.com/@abrosimova_marina_foto), Unsplash ## 最近のAI研究 -ニューラルネットワーク研究の急成長は2010年頃に始まりました。この頃、大規模な公共データセットが利用可能になり始めました。約1400万の注釈付き画像を含む大規模な画像コレクションである[ImageNet](https://en.wikipedia.org/wiki/ImageNet)は、[ImageNet大規模視覚認識チャレンジ](https://image-net.org/challenges/LSVRC/)を生み出しました。 +ニューラルネットワーク研究の大きな成長は、2010年頃から始まりました。この時期、大規模な公開データセットが利用可能になったことがきっかけです。約1,400万枚の注釈付き画像を含む大規模な画像コレクションである [ImageNet](https://en.wikipedia.org/wiki/ImageNet) は、[ImageNet Large Scale Visual Recognition Challenge](https://image-net.org/challenges/LSVRC/) の誕生を促しました。 ![ILSVRCの精度](../../../../lessons/1-Intro/images/ilsvrc.gif) -> 画像提供者: [Dmitry Soshnikov](http://soshnikov.com) -2012年に、[畳み込みニューラルネットワーク](../4-ComputerVision/07-ConvNets/README.md)が画像分類に初めて使用され、分類エラーが大幅に減少しました(ほぼ30%から16.4%へ)。2015年には、Microsoft ResearchのResNetアーキテクチャが[人間レベルの精度](https://doi.org/10.1109/ICCV.2015.123)を達成しました。 +> 画像提供: [Dmitry Soshnikov](http://soshnikov.com) -それ以来、ニューラルネットワークは多くのタスクで非常に成功した動作を示しました: +2012年に、[畳み込みニューラルネットワーク (Convolutional Neural Networks)](../4-ComputerVision/07-ConvNets/README.md) が初めて画像分類に使用され、分類エラー率が大幅に低下しました(約30%から16.4%へ)。2015年には、Microsoft ResearchのResNetアーキテクチャが[人間レベルの精度を達成](https://doi.org/10.1109/ICCV.2015.123)しました。 + +それ以降、ニューラルネットワークは多くのタスクで非常に成功を収めています。 --- -年 | 人間のパリティ達成 +年 | 人間と同等の精度を達成 -----|-------- 2015 | [画像分類](https://doi.org/10.1109/ICCV.2015.123) -2016 | [会話音声認識](https://arxiv.org/abs/1610.05256) +2016 | [会話型音声認識](https://arxiv.org/abs/1610.05256) 2018 | [自動機械翻訳](https://arxiv.org/abs/1803.05567)(中国語から英語) 2020 | [画像キャプション生成](https://arxiv.org/abs/2009.13682) -過去数年で、BERTやGPT-3などの大規模言語モデルによる大成功を目の当たりにしました。これは、テキストの構造や意味を捉えるためにモデルを訓練できる一般的なテキストデータが豊富に存在するためであり、一般的なテキストコレクションで事前訓練を行い、その後、より特定のタスクにモデルを特化させることが可能です。このコースの後半では、[自然言語処理](../5-NLP/README.md)についてもっと学ぶことになります。 +ここ数年で、BERTやGPT-3のような大規模言語モデルの大きな成功を目の当たりにしてきました。これが可能になった主な理由は、一般的なテキストデータが豊富に存在し、それを活用してモデルがテキストの構造や意味を捉えることができるようになったからです。これにより、一般的なテキストコレクションでモデルを事前学習し、その後、特定のタスクに特化させることが可能になりました。このコースの後半で[自然言語処理 (Natural Language Processing)](../5-NLP/README.md) についてさらに学びます。 ## 🚀 チャレンジ -インターネットを巡って、あなたの意見でAIが最も効果的に使用されている場所を特定してください。マッピングアプリ、音声からテキストへのサービス、あるいはビデオゲームの中でしょうか?システムがどのように構築されたのか調査してください。 +インターネットを調査して、AIが最も効果的に使用されていると思う分野を特定してください。それは地図アプリでしょうか、それとも音声認識サービスやビデオゲームでしょうか?そのシステムがどのように構築されたのかを調べてみましょう。 ## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/201) -## レビュー & 自習 +## 復習と自主学習 -[このレッスン](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/2-history-of-ML)を読みながら、AIとMLの歴史を振り返ってください。そのレッスンまたはこのレッスンの最初のスケッチノートから要素を取り出し、それをより深く調査してその進化を促す文化的背景を理解してください。 +[このレッスン](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/2-history-of-ML) を読んで、AIと機械学習の歴史を復習してください。このレッスンやスケッチノートの中から1つの要素を選び、それをさらに深く調査して、その進化を支えた文化的背景を理解しましょう。 **課題**: [ゲームジャム](assignment.md) **免責事項**: -この文書は、機械翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確な点が含まれる可能性があることにご留意ください。元の文書は、その原語での信頼できる情報源と見なされるべきです。重要な情報については、専門の人間翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された原文が正式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/1-Intro/assignment.md b/translations/ja/lessons/1-Intro/assignment.md index 3ffaee76..28fd3656 100644 --- a/translations/ja/lessons/1-Intro/assignment.md +++ b/translations/ja/lessons/1-Intro/assignment.md @@ -1,6 +1,15 @@ + # ゲームジャム -ゲームは、AIやMLの進展によって大きな影響を受けてきた分野です。この課題では、AIの進化に影響を受けた好きなゲームについて短い論文を書いてください。複数のコンピュータ処理システムの影響を受けるには十分に古いゲームである必要があります。良い例としてはチェスや囲碁が挙げられますが、ポンやパックマンのようなビデオゲームも見てみてください。ゲームの過去、現在、そしてAIの未来について論じるエッセイを書いてください。 +ゲームは、AIや機械学習(ML)の進化によって大きな影響を受けてきた分野です。この課題では、AIの進化によって影響を受けた好きなゲームについて短い論文を書いてください。そのゲームは、複数の種類のコンピュータ処理システムの影響を受けるほど古いものである必要があります。チェスや囲碁は良い例ですが、ポンやパックマンのようなビデオゲームも検討してみてください。そのゲームの過去、現在、そしてAIによる未来について論じるエッセイを書いてください。 **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文はその母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された原文が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/2-Symbolic/README.md b/translations/ja/lessons/2-Symbolic/README.md index b0376842..c5717ad8 100644 --- a/translations/ja/lessons/2-Symbolic/README.md +++ b/translations/ja/lessons/2-Symbolic/README.md @@ -1,107 +1,114 @@ + # 知識表現とエキスパートシステム -![Symbolic AIコンテンツの概要](../../../../translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.ja.png) +![シンボリックAIの内容概要](../../../../translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.ja.png) -> スケッチノート by [Tomomi Imura](https://twitter.com/girlie_mac) +> スケッチノート: [Tomomi Imura](https://twitter.com/girlie_mac) -人工知能の探求は、世界を人間と同じように理解するための知識の探索に基づいています。しかし、どのようにしてこれを実現するのでしょうか? +人工知能の探求は、世界を人間のように理解するための知識の探求に基づいています。しかし、これをどのように実現するのでしょうか? -## [事前講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/102) +## [講義前のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/102) -AIの初期の頃、知能システムを作成するためのトップダウンアプローチ(前のレッスンで議論されたもの)が人気でした。この考え方は、人々から知識を抽出し、機械が読み取れる形式に変換し、それを使って自動的に問題を解決するというものでした。このアプローチは、以下の2つの大きなアイデアに基づいていました: +AIの初期には、インテリジェントシステムを作成するためのトップダウンアプローチ(前回のレッスンで説明)が主流でした。このアイデアは、人々から知識を抽出して機械が読み取れる形式に変換し、それを使って自動的に問題を解決するというものでした。このアプローチは、以下の2つの大きなアイデアに基づいています: * 知識表現 * 推論 ## 知識表現 -Symbolic AIの重要な概念の一つは**知識**です。知識を*情報*や*データ*と区別することが重要です。例えば、本は知識を含んでいると言えます。なぜなら、本を学ぶことで専門家になることができるからです。しかし、本が含んでいるものは実際には*データ*と呼ばれます。本を読み、このデータを私たちの世界モデルに統合することで、このデータを知識に変換します。 +シンボリックAIの重要な概念の1つは**知識**です。知識を*情報*や*データ*と区別することが重要です。例えば、本が知識を含んでいると言うことができますが、それは本を学ぶことで専門家になれるからです。しかし、実際に本が含んでいるのは*データ*であり、本を読んでこのデータを私たちの世界モデルに統合することで、データを知識に変換します。 -> ✅ **知識**とは、私たちの頭の中に含まれ、世界の理解を表すものです。それは、受け取った情報を私たちの世界のアクティブモデルに統合するアクティブな**学習**プロセスによって得られます。 +> ✅ **知識**とは、私たちの頭の中に含まれているもので、世界の理解を表します。それは、受け取った情報を私たちの世界モデルに統合する**学習**プロセスを通じて得られます。 -私たちはしばしば知識を厳密に定義することはありませんが、[DIKWピラミッド](https://en.wikipedia.org/wiki/DIKW_pyramid)を使用して、他の関連する概念と整合させます。それは以下の概念を含んでいます: +多くの場合、知識を厳密に定義することはせず、[DIKWピラミッド](https://en.wikipedia.org/wiki/DIKW_pyramid)を使用して他の関連概念と整合させます。このピラミッドには以下の概念が含まれます: -* **データ**は、書かれたテキストや話された言葉のように、物理的なメディアに表現されたものです。データは人間から独立して存在し、人々の間で渡されることができます。 -* **情報**は、私たちが頭の中でデータを解釈する方法です。例えば、「コンピュータ」という言葉を聞くと、私たちはそれが何であるかを理解しています。 -* **知識**は、私たちの世界モデルに統合された情報です。例えば、コンピュータが何であるかを学ぶと、私たちはそれがどのように機能するのか、どれくらいのコストがかかるのか、何に使えるのかについての考えを持ち始めます。この相互に関連した概念のネットワークが私たちの知識を形成します。 -* **知恵**は、世界に対する理解のさらなるレベルであり、*メタ知識*を表します。つまり、知識がどのように、またはいつ使用されるべきかに関する概念です。 +* **データ**は、書かれたテキストや話された言葉など、物理的な媒体に表現されたものです。データは人間とは独立して存在し、人々の間で共有することができます。 +* **情報**は、私たちが頭の中でデータを解釈する方法です。例えば、「コンピュータ」という言葉を聞いたとき、それが何であるかについての理解があります。 +* **知識**は、情報が私たちの世界モデルに統合されたものです。例えば、コンピュータが何であるかを学ぶと、それがどのように動作するのか、いくらするのか、何に使えるのかについてのアイデアを持つようになります。この相互に関連する概念のネットワークが私たちの知識を形成します。 +* **知恵**は、世界の理解のもう1つのレベルであり、*メタ知識*を表します。例えば、知識をどのように、いつ使うべきかについての概念です。 - +*画像 [Wikipediaより](https://commons.wikimedia.org/w/index.php?curid=37705247), By Longlivetheux - Own work, CC BY-SA 4.0* -*画像 [Wikipediaから](https://commons.wikimedia.org/w/index.php?curid=37705247)、著作権者 Longlivetheux - 自作、CC BY-SA 4.0* +したがって、**知識表現**の問題は、コンピュータ内でデータとして知識を効果的に表現し、自動的に利用可能にする方法を見つけることです。これは次のようなスペクトラムとして見ることができます: -したがって、**知識表現**の問題は、データの形でコンピュータ内に知識を表現する効果的な方法を見つけることです。これを自動的に利用できるようにするためです。これはスペクトルとして見ることができます: +![知識表現スペクトラム](../../../../translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.ja.png) -![知識表現のスペクトル](../../../../translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.ja.png) +> 画像: [Dmitry Soshnikov](http://soshnikov.com) -> 画像 by [Dmitry Soshnikov](http://soshnikov.com) +* 左側には、コンピュータが効果的に使用できる非常に単純なタイプの知識表現があります。最も単純なのはアルゴリズム的なもので、知識がコンピュータプログラムとして表現されます。しかし、これは知識を表現する最良の方法ではありません。なぜなら、それは柔軟性に欠けるからです。私たちの頭の中の知識はしばしば非アルゴリズム的です。 +* 右側には、自然言語のような表現があります。これは最も強力ですが、自動推論には使用できません。 -* 左側には、コンピュータによって効果的に使用できる非常に単純なタイプの知識表現があります。最も単純なものはアルゴリズム的で、知識がコンピュータプログラムによって表現されます。しかし、これは知識を表現する最良の方法ではありません。なぜなら、柔軟性がないからです。私たちの頭の中の知識はしばしば非アルゴリズム的です。 -* 右側には、自然なテキストのような表現があります。これは最も強力ですが、自動推論には使用できません。 - -> ✅ 自分の頭の中でどのように知識を表現し、それをノートに変換しているかを考えてみてください。保持を助けるためにうまく機能する特定のフォーマットはありますか? +> ✅ 自分の頭の中で知識をどのように表現し、それをノートに変換しているか考えてみてください。記憶を助けるために特に効果的な形式はありますか? ## コンピュータの知識表現の分類 -さまざまなコンピュータの知識表現方法を以下のカテゴリに分類できます: +コンピュータの知識表現方法を以下のカテゴリに分類できます: -* **ネットワーク表現**は、私たちの頭の中に相互に関連する概念のネットワークがあるという事実に基づいています。同じネットワークをコンピュータ内のグラフとして再現しようとすることができます - いわゆる**セマンティックネットワーク**です。 +* **ネットワーク表現**は、私たちの頭の中に相互に関連する概念のネットワークがあるという事実に基づいています。同じネットワークをコンピュータ内でグラフとして再現することができます。これを**セマンティックネットワーク**と呼びます。 -1. **オブジェクト-属性-値の三つ組**または**属性-値ペア**。グラフはノードとエッジのリストとしてコンピュータ内で表現できるため、オブジェクト、属性、値を含む三つ組のリストでセマンティックネットワークを表現できます。例えば、プログラミング言語に関する以下の三つ組を構築します: +1. **オブジェクト-属性-値の三つ組**または**属性-値ペア**。グラフはノードとエッジのリストとしてコンピュータ内で表現できるため、セマンティックネットワークをオブジェクト、属性、値を含む三つ組のリストとして表現できます。例えば、プログラミング言語について次のような三つ組を構築します: オブジェクト | 属性 | 値 --------|-----------|------ -Python | は | 型なし言語 -Python | 発明者 | Guido van Rossum -Python | ブロック構文 | インデント -型なし言語 | ない | 型定義 +------------|------|----- +Python | is | Untyped-Language +Python | invented-by | Guido van Rossum +Python | block-syntax | indentation +Untyped-Language | doesn't have | type definitions -> ✅ 他のタイプの知識を表現するために三つ組がどのように使用できるか考えてみてください。 +> ✅ 三つ組を使って他の種類の知識をどのように表現できるか考えてみてください。 -2. **階層的表現**は、私たちがしばしば頭の中でオブジェクトの階層を作成するという事実を強調します。例えば、私たちはカナリアが鳥であり、すべての鳥には翼があることを知っています。また、カナリアが通常どのような色をしているか、飛行速度についての考えも持っています。 +2. **階層的表現**は、私たちが頭の中でしばしばオブジェクトの階層を作成するという事実を強調します。例えば、カナリアは鳥であり、すべての鳥には翼があることを知っています。また、カナリアの通常の色や飛行速度についても何らかのアイデアを持っています。 - - **フレーム表現**は、各オブジェクトまたはオブジェクトのクラスを**フレーム**として表現し、**スロット**を含みます。スロットにはデフォルト値、値の制約、またはスロットの値を取得するために呼び出されるストアドプロシージャがあります。すべてのフレームは、オブジェクト指向プログラミング言語のオブジェクト階層に似た階層を形成します。 - - **シナリオ**は、時間の経過に伴って展開される複雑な状況を表現する特別な種類のフレームです。 + - **フレーム表現**は、各オブジェクトまたはオブジェクトのクラスを**フレーム**として表現し、それが**スロット**を含む形式に基づいています。スロットには、デフォルト値、値の制限、またはスロットの値を取得するために呼び出すことができる手続きが含まれます。すべてのフレームは、オブジェクト指向プログラミング言語のオブジェクト階層に似た階層を形成します。 + - **シナリオ**は、時間の経過とともに展開する複雑な状況を表現する特別な種類のフレームです。 **Python** -スロット | 値 | デフォルト値 | インターバル | ------|-------|---------------|----------| +スロット | 値 | デフォルト値 | 範囲 | +--------|----|-------------|------| 名前 | Python | | | -は | 型なし言語 | | | -変数ケース | | CamelCase | | +Is-A | Untyped-Language | | | +変数のケース | | CamelCase | | プログラムの長さ | | | 5-5000行 | -ブロック構文 | インデント | | | +ブロック構文 | Indent | | | -3. **手続き的表現**は、特定の条件が発生したときに実行できるアクションのリストによって知識を表現することに基づいています。 - - 生産ルールは、結論を引き出すためのif-thenステートメントです。例えば、医者は「**もし**患者が高熱を持っている**または**血液検査でC反応性蛋白が高い**ならば**、炎症がある」といったルールを持つことができます。条件の一つに出会った場合、炎症についての結論を出し、それをさらに推論に使用できます。 - - アルゴリズムは、手続き的表現の別の形と見なすことができますが、知識ベースのシステムではほとんど直接使用されることはありません。 +3. **手続き的表現**は、特定の条件が発生したときに実行できるアクションのリストとして知識を表現することに基づいています。 + - **生成規則**は、結論を導き出すためのif-then文です。例えば、医師が「**もし**患者が高熱を持っている**または**血液検査でC反応性タンパク質のレベルが高い場合、**ならば**炎症がある」とする規則を持っているとします。この条件のいずれかに遭遇した場合、炎症についての結論を導き出し、それをさらに推論に使用できます。 + - アルゴリズムは手続き的表現の別の形式と見なすことができますが、知識ベースシステムではほとんど直接使用されることはありません。 -4. **論理**は、元々アリストテレスによって普遍的な人間の知識を表現する方法として提案されました。 - - 数学的理論としての述語論理は計算可能性が高すぎるため、通常はHorn節のようなその一部が使用されます。これはPrologで使用されます。 - - 記述論理は、オブジェクトの階層を表現し、推論するために使用される論理システムのファミリーです。 +4. **論理**は、普遍的な人間の知識を表現する方法としてアリストテレスによって最初に提案されました。 + - **述語論理**は数学的理論としては非常に豊かであるため計算可能ではありません。そのため、通常はPrologで使用されるHorn節のようなサブセットが使用されます。 + - **記述論理**は、*セマンティックウェブ*のような分散知識表現を表現し推論するために使用される論理システムのファミリーです。 ## エキスパートシステム -Symbolic AIの初期の成功の一つは、いわゆる**エキスパートシステム**でした。これは、特定の問題領域で専門家として機能するように設計されたコンピュータシステムです。これらは、1人または複数の人間専門家から抽出された**知識ベース**に基づいており、その上で何らかの推論を行う**推論エンジン**を含んでいます。 +シンボリックAIの初期の成功例の1つが、いわゆる**エキスパートシステム**です。これは、特定の限定された問題領域で専門家として機能するように設計されたコンピュータシステムです。これらは、1人または複数の人間の専門家から抽出された**知識ベース**に基づいており、その上で推論を行う**推論エンジン**を含んでいます。 -![人間のアーキテクチャ](../../../../translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.ja.png) | ![知識ベースシステム](../../../../translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.ja.png) +![人間のアーキテクチャ](../../../../translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.ja.png) | ![知識ベースシステムのアーキテクチャ](../../../../translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.ja.png) ---------------------------------------------|------------------------------------------------ 人間の神経系の簡略化された構造 | 知識ベースシステムのアーキテクチャ -エキスパートシステムは、人間の推論システムのように構築されており、**短期記憶**と**長期記憶**を含んでいます。同様に、知識ベースシステムでは以下のコンポーネントを区別します: +エキスパートシステムは、人間の推論システムのように構築されています。人間の推論システムには**短期記憶**と**長期記憶**が含まれます。同様に、知識ベースシステムでは以下のコンポーネントを区別します: -* **問題メモリ**:現在解決されている問題に関する知識を含みます。すなわち、患者の体温や血圧、炎症があるかどうかなどです。この知識は**静的知識**とも呼ばれ、現在問題について知っていることのスナップショットを含みます - いわゆる*問題状態*です。 -* **知識ベース**:問題領域に関する長期的な知識を表します。これは人間の専門家から手動で抽出され、相談ごとに変わることはありません。これは、ある問題状態から別の問題状態へと移動することを可能にするため、**動的知識**とも呼ばれます。 -* **推論エンジン**:問題状態空間での検索全体のプロセスを調整し、必要に応じてユーザーに質問をします。また、各状態に適用されるべき正しいルールを見つける役割も担います。 +* **問題メモリ**: 現在解決中の問題に関する知識を含みます。例えば、患者の体温や血圧、炎症があるかどうかなど。この知識は**静的知識**とも呼ばれます。なぜなら、現在の問題について私たちが知っていることのスナップショット、つまり*問題状態*を含むからです。 +* **知識ベース**: 問題領域に関する長期的な知識を表します。これは人間の専門家から手動で抽出され、相談ごとに変わることはありません。これにより、1つの問題状態から別の状態へ移動することが可能になるため、**動的知識**とも呼ばれます。 +* **推論エンジン**: 問題状態空間の検索プロセス全体を調整し、必要に応じてユーザーに質問します。また、各状態に適用されるべき適切な規則を見つける責任も負います。 -例として、動物の物理的特性に基づいて動物を特定するエキスパートシステムを考えてみましょう: +例として、動物の物理的特徴に基づいて動物を特定するエキスパートシステムを考えてみましょう: ![AND-ORツリー](../../../../translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.ja.png) -> 画像 by [Dmitry Soshnikov](http://soshnikov.com) +> 画像: [Dmitry Soshnikov](http://soshnikov.com) -この図は**AND-ORツリー**と呼ばれ、一連の生産ルールのグラフィカルな表現です。知識を専門家から抽出する最初の段階では、ツリーを描くことが有用です。コンピュータ内に知識を表現するためには、ルールを使用する方が便利です: +この図は**AND-ORツリー**と呼ばれ、生成規則のセットをグラフィカルに表現したものです。ツリーを描くことは、専門家から知識を抽出する初期段階で役立ちます。コンピュータ内で知識を表現するには、規則を使用する方が便利です: ``` IF the animal eats meat @@ -112,47 +119,130 @@ OR (animal has sharp teeth THEN the animal is a carnivore ``` -ルールの左側にある各条件とアクションは本質的にオブジェクト-属性-値(OAV)三つ組です。**作業メモリ**には、現在解決されている問題に対応するOAV三つ組のセットが含まれています。**ルールエンジン**は、条件が満たされているルールを探し、それを適用して作業メモリに別の三つ組を追加します。 +各規則の左辺の条件とアクションが、本質적으로オブジェクト-属性-値(OAV)の三つ組であることに気付くでしょう。**作業メモリ**には、現在解決中の問題に対応するOAV三つ組のセットが含まれます。**ルールエンジン**は、条件が満たされている規則を探し、それを適用して新しい三つ組を作業メモリに追加します。 -> ✅ 好きなトピックについて自分のAND-ORツリーを書いてみてください! +> ✅ 好きなトピックで自分自身のAND-ORツリーを作成してみましょう! -### 前向き推論と後ろ向き推論 +### 順推論と逆推論 -上記のプロセスは**前向き推論**と呼ばれます。これは、作業メモリに利用可能な問題に関する初期データから始まり、次の推論ループを実行します: +上記のプロセスは**順推論**と呼ばれます。これは、作業メモリに利用可能な問題に関する初期データから始まり、次の推論ループを実行します: -1. ターゲット属性が作業メモリに存在する場合 - 停止し、結果を提供します -2. 現在満たされている条件を持つすべてのルールを探します - ルールの**競合セット**を取得します。 -3. **競合解決**を実行します - このステップで実行される1つのルールを選択します。競合解決戦略にはいくつかの異なる方法があります: - - 知識ベースで最初に適用可能なルールを選択する - - ランダムなルールを選択する - - より*具体的な*ルールを選択する、つまり「左側」(LHS)で最も多くの条件を満たすルールを選択する -4. 選択したルールを適用し、問題状態に新しい知識を挿入します -5. ステップ1から繰り返します。 +1. ターゲット属性が作業メモリに存在する場合 - 停止して結果を出力 +2. 現在条件が満たされているすべての規則を探す - **競合セット**を取得 +3. **競合解決**を実行 - このステップで実行される規則を1つ選択。競合解決戦略には以下のようなものがあります: + - 知識ベース内で最初に適用可能な規則を選択 + - ランダムな規則を選択 + - *より具体的な*規則を選択、つまり「左辺」(LHS)で最も多くの条件を満たすもの +4. 選択した規則を適用し、新しい知識を問題状態に挿入 +5. ステップ1から繰り返す -しかし、場合によっては、問題に関する知識が空である状態から始め、結論に至るのを助ける質問をすることが望ましい場合があります。例えば、医療診断を行う際には、通常、患者を診断する前にすべての医療分析を事前に行うことはありません。むしろ、決定を下す必要があるときに分析を行いたいと考えています。 +しかし、場合によっては、問題に関する知識が空の状態から始まり、結論に到達するために役立つ質問をしたい場合があります。例えば、医療診断を行う際、患者を診断し始める前にすべての医療分析を事前に行うことは通常ありません。むしろ、決定を下す必要があるときに分析を行いたいのです。 -このプロセスは**後ろ向き推論**を使用してモデル化できます。これは**目標**によって駆動されます - 私たちが見つけようとしている属性値です: +このプロセスは**逆推論**を使用してモデル化できます。これは、私たちが見つけようとしている**目標**(ターゲット属性値)によって駆動されます: -1. 目標の値を与えることができるすべてのルールを選択します(つまり、目標が右側(RHS)にあるルール) - 競合セット -2. この属性に対するルールがない場合、またはユーザーから値を尋ねるべきだというルールがある場合 - それを尋ねます。そうでなければ: -3. 競合解決戦略を使用して、*仮説*として使用する1つのルールを選択します - それを証明しようとします -4. ルールのLHSにあるすべての属性について、このプロセスを再帰的に繰り返し、目標として証明しようとします -5. 途中でプロセスが失敗した場合 - ステップ3で別のルールを使用します。 +1. 目標の値を提供できるすべての規則を選択(つまり、目標が右辺(RHS)にあるもの) - 競合セットを取得 +1. この属性に関する規則がない場合、またはユーザーに値を尋ねるべきだとする規則がある場合 - ユーザーに尋ねる。それ以外の場合: +1. 競合解決戦略を使用して、*仮説*として使用する規則を1つ選択 - それを証明しようとする +1. 規則の左辺(LHS)にあるすべての属性について、目標として証明しようとするプロセスを再帰的に繰り返す +1. どの時点でもプロセスが失敗した場合 - ステップ3で別の規則を使用 -> ✅ 前向き推論がより適切な状況はどのようなものですか?後ろ向き推論はどうでしょうか? +> ✅ 順推論が適している状況はどのような場合ですか?逆推論はどうでしょうか? ### エキスパートシステムの実装 エキスパートシステムは、さまざまなツールを使用して実装できます: -* 高水準プログラミング言語で直接プログラムすること。これは最良のアイデアではありません。なぜなら、知識ベースシステムの主な利点は、知識が推論から分離されていることであり、問題領域の専門家が推論プロセスの詳細を理解することなくルールを書くことができるべきだからです。 -* **エキスパートシステムシェル**を使用すること、すなわち、知識を知識表現言語を使用して埋め込むために特別に設計されたシステムです。 +* 高水準プログラミング言語で直接プログラミングする。この方法は最良のアイデアではありません。なぜなら、知識ベースシステムの主な利点は、知識が推論から分離されていることであり、潜在的には問題領域の専門家が推論プロセスの詳細を理解せずに規則を書くことができるべきだからです。 +* **エキスパートシステムシェル**を使用する。これは、特定の知識表現言語を使用して知識を入力するために設計されたシステムです。 -## ✍️ 演習:動物推論 +## ✍️ 演習: 動物推論 -[Animals.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb)を参照して、前向き推論と後ろ向き推論のエキスパートシステムを実装する例を見てみましょう。 +順推論と逆推論エキスパートシステムを実装する例については、[Animals.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) を参照してください。 +> **注**: この例は非常にシンプルで、エキスパートシステムがどのようなものかのイメージを示しているだけです。このようなシステムを作り始めると、ルールが200以上に達する頃から、ようやくいくつかの「知的な」振る舞いを感じられるようになります。ある時点で、ルールがあまりにも複雑になり、すべてを頭の中で把握するのが難しくなります。そして、この段階でシステムがなぜ特定の決定を下したのか疑問に思うことがあるかもしれません。しかし、知識ベースシステムの重要な特徴は、どのような決定がどのように行われたのかを常に正確に「説明」できるという点です。 +## オントロジーとセマンティックウェブ -> **注**:この例は非常にシンプルで、エキスパートシステムがどのように見えるかのアイデアを示すだけです。このようなシステムを作成し始めると、200以上のルールに達するまで、システムからの*知的*な振る舞いに気づくことはほとんどありません。ある時点で、ルールがあまりにも複雑になり、すべてを心に留めておくことができなくなります。その時点で、なぜシステムが特定の決定を下したのか疑問に思い始めるかもしれません。しかし、知識ベースシステムの重要な特性は、どの決定がどのように行われたかを +20世紀末、インターネット上のリソースに知識表現を用いて注釈を付け、非常に具体的なクエリに対応するリソースを見つけられるようにする試みがありました。この動きは**セマンティックウェブ**と呼ばれ、いくつかの概念に基づいていました: + +- **[記述論理](https://en.wikipedia.org/wiki/Description_logic)** (DL) に基づく特別な知識表現。これはフレーム知識表現に似ていますが、オブジェクトとそのプロパティの階層を構築し、形式的な論理的意味論と推論を持っています。DLには、表現力と推論のアルゴリズム的複雑さのバランスを取るためのさまざまな種類があります。 +- 分散型の知識表現。すべての概念がグローバルなURI識別子で表され、インターネット全体にまたがる知識階層を作成することが可能になります。 +- 知識記述のためのXMLベースの言語群:RDF(Resource Description Framework)、RDFS(RDF Schema)、OWL(Ontology Web Language)。 + +セマンティックウェブの中心的な概念は、**オントロジー**という概念です。これは、ある問題領域を形式的な知識表現を用いて明示的に仕様化したものを指します。最も単純なオントロジーは、問題領域内のオブジェクトの階層だけで構成されることもありますが、より複雑なオントロジーには推論に使用できるルールが含まれます。 + +セマンティックウェブでは、すべての表現がトリプレットに基づいています。各オブジェクトと各関係はURIによって一意に識別されます。例えば、このAIカリキュラムが2022年1月1日にDmitry Soshnikovによって開発されたという事実を述べたい場合、以下のようなトリプレットを使用できます: + + + +``` +http://github.com/microsoft/ai-for-beginners http://www.example.com/terms/creation-date “Jan 13, 2007” +http://github.com/microsoft/ai-for-beginners http://purl.org/dc/elements/1.1/creator http://soshnikov.com +``` + +> ✅ ここで、`http://www.example.com/terms/creation-date` と `http://purl.org/dc/elements/1.1/creator` は、*作成者* や *作成日* の概念を表現するための、よく知られた普遍的に受け入れられているURIです。 + +より複雑なケースでは、作成者のリストを定義したい場合、RDFで定義されたデータ構造を使用できます。 + + + +> 上記の図は [Dmitry Soshnikov](http://soshnikov.com) によるものです。 + +セマンティックウェブの構築の進展は、検索エンジンや自然言語処理技術の成功によってある程度遅れました。これらの技術は、テキストから構造化データを抽出することを可能にします。しかし、いくつかの分野では、オントロジーや知識ベースを維持するための重要な努力が続けられています。注目すべきプロジェクトをいくつか挙げます: + +* [WikiData](https://wikidata.org/) は、Wikipediaに関連付けられた機械可読な知識ベースのコレクションです。データの多くは、Wikipediaページ内の構造化コンテンツである *InfoBoxes* から抽出されています。SPARQLというセマンティックウェブ用の特別なクエリ言語を使って、[クエリ](https://query.wikidata.org/)を実行できます。以下は、人間の間で最も一般的な目の色を表示するサンプルクエリです: + +```sparql +#defaultView:BubbleChart +SELECT ?eyeColorLabel (COUNT(?human) AS ?count) +WHERE +{ + ?human wdt:P31 wd:Q5. # human instance-of homo sapiens + ?human wdt:P1340 ?eyeColor. # human eye-color ?eyeColor + SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } +} +GROUP BY ?eyeColorLabel +``` + +* [DBpedia](https://www.dbpedia.org/) は、WikiDataに似た別の取り組みです。 + +> ✅ 独自のオントロジーを構築したり、既存のオントロジーを開くことに興味がある場合、[Protégé](https://protege.stanford.edu/) という優れたビジュアルオントロジーエディタがあります。ダウンロードするか、オンラインで使用してみてください。 + + + +*Web ProtégéエディタがRomanov家系のオントロジーを開いている様子。Dmitry Soshnikovによるスクリーンショット* + +## ✍️ 演習: 家族オントロジー + +[FamilyOntology.ipynb](https://github.com/Ezana135/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) を参照して、セマンティックウェブ技術を使用して家族関係を推論する例を確認してください。一般的なGEDCOM形式で表現された家系図と家族関係のオントロジーを使用して、特定の個人セットに対するすべての家族関係のグラフを構築します。 + +## Microsoft Concept Graph + +多くの場合、オントロジーは慎重に手作業で作成されます。しかし、自然言語テキストなどの非構造化データからオントロジーを**抽出**することも可能です。 + +そのような試みの一つがMicrosoft Researchによって行われ、[Microsoft Concept Graph](https://blogs.microsoft.com/ai/microsoft-researchers-release-graph-that-helps-machines-conceptualize/?WT.mc_id=academic-77998-cacaste)が生まれました。 + +これは、`is-a` 継承関係を使用してグループ化されたエンティティの大規模なコレクションです。「Microsoftとは何か?」という質問に対して、「会社(確率0.87)であり、ブランド(確率0.75)」のような答えを提供します。 + +このグラフは、REST APIとして、またはすべてのエンティティペアをリストした大規模なダウンロード可能なテキストファイルとして利用可能です。 + +## ✍️ 演習: コンセプトグラフ + +[MSConceptGraph.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) ノートブックを試して、Microsoft Concept Graphを使用してニュース記事をいくつかのカテゴリにグループ化する方法を確認してください。 + +## 結論 + +現在、AIはしばしば*機械学習*や*ニューラルネットワーク*の同義語と見なされています。しかし、人間は明示的な推論も行います。これは、ニューラルネットワークでは現在扱われていないものです。実世界のプロジェクトでは、説明が必要なタスクや、システムの動作を制御可能な方法で変更する必要があるタスクを実行するために、明示的な推論が依然として使用されています。 + +## 🚀 チャレンジ + +このレッスンに関連するFamily Ontologyノートブックでは、他の家族関係を試す機会があります。家系図内の人々の間に新しいつながりを発見してみてください。 + +## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/202) + +## 復習と自己学習 + +インターネットで調査を行い、人間が知識を定量化し、体系化しようとした分野を発見してください。ブルームの分類法を調べ、歴史を遡って、人間がどのようにして世界を理解しようとしたかを学びましょう。リンネによる生物の分類法の作成や、ドミトリ・メンデレーエフによる化学元素の記述と分類の方法を観察してください。他にどのような興味深い例が見つかるでしょうか? + +**課題**: [オントロジーを構築する](assignment.md) **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されました。正確性を追求していますが、自動翻訳にはエラーや不正確さが含まれる可能性があることをご承知おきください。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用に起因する誤解や誤訳について、当社は一切責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があります。原文(元の言語で記載された文書)が信頼できる情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/2-Symbolic/assignment.md b/translations/ja/lessons/2-Symbolic/assignment.md index fab4ac62..340780aa 100644 --- a/translations/ja/lessons/2-Symbolic/assignment.md +++ b/translations/ja/lessons/2-Symbolic/assignment.md @@ -1,6 +1,15 @@ -# オントロジーの構築 + +# オントロジーを構築する -知識ベースの構築は、トピックに関する事実を表すモデルをカテゴライズすることに関するものです。人、場所、物などのトピックを選び、そのトピックのモデルを構築します。このレッスンで説明されているいくつかの技術やモデル構築戦略を使用してください。例えば、家具や照明などを含むリビングルームのオントロジーを作成することが考えられます。リビングルームはキッチンとどのように異なりますか? バスルームは? それがダイニングルームではなくリビングルームであることをどのように知りますか? オントロジーを構築するには、[Protégé](https://protege.stanford.edu/)を使用してください。 +知識ベースを構築することは、あるトピックに関する事実を表すモデルを分類することです。人、場所、物などのトピックを選び、そのトピックのモデルを構築します。このレッスンで説明されている技術やモデル構築の戦略を活用してください。例えば、家具や照明などを含むリビングルームのオントロジーを作成することが挙げられます。リビングルームはキッチンやバスルームとどう違うのでしょうか?リビングルームであってダイニングルームではないとどうやって判断するのでしょうか?[Protégé](https://protege.stanford.edu/)を使ってオントロジーを構築してみましょう。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用から生じる誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の言語で記載された原文が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/3-NeuralNetworks/03-Perceptron/README.md b/translations/ja/lessons/3-NeuralNetworks/03-Perceptron/README.md index 235546bb..5e0b6c11 100644 --- a/translations/ja/lessons/3-NeuralNetworks/03-Perceptron/README.md +++ b/translations/ja/lessons/3-NeuralNetworks/03-Perceptron/README.md @@ -1,52 +1,61 @@ + # ニューラルネットワーク入門: パーセプトロン ## [講義前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/103) -現代のニューラルネットワークに類似したものを実装する最初の試みの一つは、1957年にコーネル航空宇宙研究所のフランク・ローゼンブラットによって行われました。これは「Mark-1」と呼ばれるハードウェア実装で、三角形、四角形、円などの原始的な幾何学的図形を認識するために設計されました。 +現代のニューラルネットワークに似たものを初めて実装しようとした試みの一つは、1957年にコーネル航空研究所のフランク・ローゼンブラットによって行われました。それは「Mark-1」と呼ばれるハードウェア実装で、三角形、四角形、円などの基本的な幾何学的図形を認識するよう設計されていました。 | | | |--------------|-----------| -|フランク・ローゼンブラット | Mark 1 パーセプトロン| +|Frank Rosenblatt | The Mark 1 Perceptron| -> 画像は [ウィキペディア](https://en.wikipedia.org/wiki/Perceptron) より引用 +> 画像は[Wikipedia](https://en.wikipedia.org/wiki/Perceptron)より -入力画像は20x20のフォトセルアレイによって表現され、ニューラルネットワークは400の入力と1つのバイナリ出力を持っていました。シンプルなネットワークには1つのニューロン、つまり**しきい値論理ユニット**が含まれていました。ニューラルネットワークの重みは、学習フェーズ中に手動で調整する必要があるポテンショメータのように機能しました。 +入力画像は20x20のフォトセル配列で表されており、ニューラルネットワークには400の入力と1つの二値出力がありました。単純なネットワークは1つのニューロン、つまり**閾値論理ユニット**と呼ばれるものを含んでいました。ニューラルネットワークの重みはポテンショメータのように機能し、トレーニング段階で手動で調整する必要がありました。 -> ✅ ポテンショメータは、回路の抵抗を調整することを可能にするデバイスです。 +> ✅ ポテンショメータとは、回路の抵抗を調整できる装置のことです。 -> ニューヨークタイムズは当時パーセプトロンについて次のように書きました: *[海軍]が期待する電子コンピュータの胚で、歩き、話し、見え、書き、自らを再生し、その存在を意識することができる。* +> 当時のニューヨーク・タイムズはパーセプトロンについて次のように書いています: *「[海軍が]歩き、話し、見て、書き、自らを再生し、自分の存在を意識することができると期待している電子計算機の胚芽」* ## パーセプトロンモデル -モデルにNの特徴があると仮定すると、入力ベクトルはサイズNのベクトルになります。パーセプトロンは**バイナリ分類**モデルであり、つまり2つのクラスの入力データを区別することができます。各入力ベクトルxに対して、パーセプトロンの出力はクラスに応じて+1または-1であると仮定します。出力は次の式を使って計算されます。 +モデルにN個の特徴量があると仮定すると、入力ベクトルはサイズNのベクトルになります。パーセプトロンは**二値分類**モデル、つまり2つのクラスの入力データを区別するモデルです。各入力ベクトルxに対して、パーセプトロンの出力はクラスに応じて+1または-1のいずれかになると仮定します。出力は次の式を使って計算されます: y(x) = f(wTx) -ここで、fはステップ活性化関数です。 +ここでfはステップ活性化関数です。 -## パーセプトロンの訓練 +## パーセプトロンのトレーニング -パーセプトロンを訓練するには、ほとんどの値を正しく分類する重みベクトルwを見つける必要があります。つまり、最小の**誤差**を生じさせる必要があります。この誤差Eは、次のように**パーセプトロン基準**によって定義されます。 +パーセプトロンをトレーニングするには、ほとんどの値を正しく分類する重みベクトルwを見つける必要があります。つまり、**誤差**を最小化する必要があります。この誤差Eは、次のように**パーセプトロン基準**によって定義されます: E(w) = -∑wTxiti ここで: -* 合計は誤分類を引き起こすトレーニングデータポイントiに対して取られます -* xiは入力データで、tiは負の例に対して-1、正の例に対して+1です。 +* 和は誤分類されたトレーニングデータポイントiについて取られます +* xiは入力データ、tiは負の例と正の例に応じてそれぞれ-1または+1です。 -この基準は重みwの関数と見なされ、最小化する必要があります。多くの場合、**勾配降下法**と呼ばれる手法が使用され、初期重みw(0)から始めて、各ステップで次の式に従って重みを更新します。 +この基準は重みwの関数と見なされ、これを最小化する必要があります。よく使われる方法として**勾配降下法**があります。この方法では、初期重みw(0)から始め、各ステップで次の式に従って重みを更新します: w(t+1) = w(t) - η∇E(w) -ここでηは**学習率**と呼ばれ、∇E(w)はEの**勾配**を示します。勾配を計算した後、次のようになります。 +ここでηは**学習率**と呼ばれ、∇E(w)はEの**勾配**を表します。勾配を計算した後、次のようになります: w(t+1) = w(t) + ∑ηxiti -Pythonでのアルゴリズムは次のようになります。 +Pythonでのアルゴリズムは次のようになります: ```python def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): @@ -70,26 +79,26 @@ def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): ## 結論 -このレッスンでは、バイナリ分類モデルであるパーセプトロンについて学び、重みベクトルを使用してそれを訓練する方法について学びました。 +このレッスンでは、二値分類モデルであるパーセプトロンと、それを重みベクトルを使ってトレーニングする方法について学びました。 ## 🚀 チャレンジ -自分自身のパーセプトロンを構築してみたい場合は、[Microsoft Learnのこのラボ](https://docs.microsoft.com/en-us/azure/machine-learning/component-reference/two-class-averaged-perceptron?WT.mc_id=academic-77998-cacaste)を試してみてください。これは[Azure MLデザイナー](https://docs.microsoft.com/en-us/azure/machine-learning/concept-designer?WT.mc_id=academic-77998-cacaste)を使用しています。 +自分でパーセプトロンを構築してみたい場合は、[Microsoft Learnのこのラボ](https://docs.microsoft.com/en-us/azure/machine-learning/component-reference/two-class-averaged-perceptron?WT.mc_id=academic-77998-cacaste)を試してみてください。このラボでは[Azure MLデザイナー](https://docs.microsoft.com/en-us/azure/machine-learning/concept-designer?WT.mc_id=academic-77998-cacaste)を使用します。 ## [講義後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/203) ## 復習と自己学習 -パーセプトロンを使っておもちゃの問題や実際の問題を解決する方法を学び続けるには、[Perceptron](../../../../../lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb)ノートブックに進んでください。 +パーセプトロンを使っておもちゃの問題や実際の問題を解く方法を確認し、学習を続けるには、[Perceptron](../../../../../lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb)ノートブックをご覧ください。 -また、興味深い[パーセプトロンに関する記事](https://towardsdatascience.com/what-is-a-perceptron-basics-of-neural-networks-c4cfea20c590)もあります。 +また、パーセプトロンに関する興味深い[記事](https://towardsdatascience.com/what-is-a-perceptron-basics-of-neural-networks-c4cfea20c590)もあります。 ## [課題](lab/README.md) -このレッスンでは、バイナリ分類タスクのためにパーセプトロンを実装し、2つの手書き数字を分類するために使用しました。このラボでは、与えられた画像に最も関連する数字を特定するという形で、数字分類の問題を完全に解決するよう求められます。 +このレッスンでは、二値分類タスクのためのパーセプトロンを実装し、それを使って2つの手書き数字を分類しました。このラボでは、数字分類の問題を完全に解決すること、つまり、与えられた画像に最も対応する数字を特定することが求められます。 * [指示](lab/README.md) * [ノートブック](../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳にはエラーや不正確さが含まれる可能性があることにご留意ください。原文のネイティブ言語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書を正式な情報源としてお考えください。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md b/translations/ja/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md index 769261b5..73db5904 100644 --- a/translations/ja/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md +++ b/translations/ja/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md @@ -1,22 +1,31 @@ + # パーセプトロンによる多クラス分類 -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) からのラボ課題です。 +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) のラボ課題。 ## 課題 -このレッスンで開発したMNIST手書き数字の2クラス分類用のコードを使用して、任意の数字を認識できる多クラス分類器を作成します。トレーニングデータセットとテストデータセットの分類精度を計算し、混同行列を出力します。 +このレッスンで開発したMNIST手書き数字の二値分類コードを使用して、任意の数字を認識できる多クラス分類器を作成してください。訓練データセットとテストデータセットで分類精度を計算し、混同行列を出力してください。 ## ヒント -1. 各数字について、「この数字対他のすべての数字」のバイナリ分類器用のデータセットを作成します。 -1. 10種類の異なるパーセプトロンをバイナリ分類のためにトレーニングします(各数字ごとに1つ)。 -1. 入力された数字を分類する関数を定義します。 +1. 各数字について、「この数字 vs. 他のすべての数字」の二値分類用データセットを作成する +1. 二値分類用に10個の異なるパーセプトロンを訓練する(各数字に1つずつ) +1. 入力された数字を分類する関数を定義する -> **ヒント**: すべての10個のパーセプトロンの重みを1つの行列にまとめることで、1回の行列乗算で入力数字に対してすべての10個のパーセプトロンを適用できるはずです。最も可能性の高い数字は、出力に`argmax`操作を適用するだけで見つけることができます。 +> **ヒント**: 10個のパーセプトロンの重みを1つの行列にまとめれば、1回の行列積で入力された数字に対して10個のパーセプトロンを適用することができます。その後、出力に対して`argmax`操作を適用することで、最も可能性の高い数字を見つけることができます。 -## ノートブックの開始 +## 開始ノートブック -[PerceptronMultiClass.ipynb](../../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) を開いてラボを開始します。 +[PerceptronMultiClass.ipynb](../../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) を開いてラボを開始してください。 **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈については、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があることをご承知おきください。原文(元の言語で記載された文書)が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/3-NeuralNetworks/04-OwnFramework/README.md b/translations/ja/lessons/3-NeuralNetworks/04-OwnFramework/README.md index a94a5790..b1ae3497 100644 --- a/translations/ja/lessons/3-NeuralNetworks/04-OwnFramework/README.md +++ b/translations/ja/lessons/3-NeuralNetworks/04-OwnFramework/README.md @@ -1,82 +1,91 @@ + # ニューラルネットワーク入門:多層パーセプトロン -前のセクションでは、最も単純なニューラルネットワークモデルである単層パーセプトロンについて学びました。これは線形の二クラス分類モデルです。 +前のセクションでは、最もシンプルなニューラルネットワークモデルである1層パーセプトロン(線形2クラス分類モデル)について学びました。 -このセクションでは、このモデルをより柔軟なフレームワークに拡張し、以下のことを可能にします: +このセクションでは、このモデルをより柔軟なフレームワークに拡張し、以下を可能にします: -* 二クラスに加えて、**多クラス分類**を実行する -* 分類に加えて、**回帰問題**を解決する -* 線形に分離できないクラスを分ける +* **多クラス分類**を2クラス分類に加えて実行する +* **回帰問題**を分類に加えて解く +* 線形分離不可能なクラスを分離する -また、異なるニューラルネットワークアーキテクチャを構築できる独自のモジュラーPythonフレームワークも開発します。 +また、Pythonで独自のモジュール型フレームワークを開発し、さまざまなニューラルネットワークアーキテクチャを構築できるようにします。 -## [講義前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/104) +## [講義前のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/104) -## 機械学習の定式化 +## 機械学習の形式化 -機械学習の問題を定式化することから始めましょう。トレーニングデータセット **X** とラベル **Y** があるとします。そして、最も正確な予測を行うモデル *f* を構築する必要があります。予測の質は **損失関数** ℒ によって測定されます。以下の損失関数がよく使用されます: +まず、機械学習の問題を形式化することから始めましょう。トレーニングデータセット**X**とラベル**Y**があると仮定し、最も正確な予測を行うモデル*f*を構築する必要があります。予測の品質は**損失関数**ℒによって測定されます。以下の損失関数がよく使用されます: -* 回帰問題の場合、数値を予測する必要があるときは、**絶対誤差** ∑i|f(x(i))-y(i)| や **二乗誤差** ∑i(f(x(i))-y(i))2 を使用できます。 -* 分類の場合、**0-1損失**(これはモデルの**精度**と本質的に同じです)や **ロジスティック損失** を使用します。 +* 数値を予測する必要がある回帰問題の場合、**絶対誤差** ∑i|f(x(i))-y(i)| または **二乗誤差** ∑i(f(x(i))-y(i))2 を使用できます。 +* 分類の場合、**0-1損失**(モデルの**精度**とほぼ同じ)や**ロジスティック損失**を使用します。 -単層パーセプトロンの場合、関数 *f* は線形関数 *f(x)=wx+b* として定義されました(ここで *w* は重み行列、*x* は入力特徴のベクトル、*b* はバイアスベクトルです)。異なるニューラルネットワークアーキテクチャの場合、この関数はより複雑な形を取ることができます。 +1層パーセプトロンの場合、関数*f*は線形関数*f(x)=wx+b*として定義されます(ここで*w*は重み行列、*x*は入力特徴ベクトル、*b*はバイアスベクトル)。異なるニューラルネットワークアーキテクチャでは、この関数はより複雑な形を取ることができます。 -> 分類の場合、ネットワークの出力として対応するクラスの確率を得ることがしばしば望まれます。任意の数を確率に変換するため(例えば、出力を正規化するために)、私たちはしばしば **ソフトマックス** 関数 σ を使用し、関数 *f* は *f(x)=σ(wx+b)* になります。 +> 分類の場合、ネットワークの出力として対応するクラスの確率を得ることが望ましいことがよくあります。任意の数値を確率に変換するため(つまり出力を正規化するため)、**ソフトマックス**関数σをよく使用します。この場合、関数*f*は*f(x)=σ(wx+b)*となります。 -上記の *f* の定義では、*w* と *b* は **パラメータ** θ=⟨*w,b*⟩ と呼ばれます。データセット ⟨**X**,**Y**⟩ が与えられたとき、全データセットに対する全体の誤差をパラメータ θ の関数として計算できます。 +上記の*f*の定義において、*w*と*b*は**パラメータ**θ=⟨*w,b*⟩と呼ばれます。データセット⟨**X**,**Y**⟩が与えられると、データセット全体の誤差をパラメータθの関数として計算できます。 -> ✅ **ニューラルネットワークのトレーニングの目標は、パラメータ θ を変化させることによって誤差を最小化することです。** +> ✅ **ニューラルネットワークのトレーニングの目的は、パラメータθを変化させて誤差を最小化することです** -## 勾配降下法最適化 +## 勾配降下法による最適化 -**勾配降下法** と呼ばれる関数最適化のよく知られた方法があります。このアイデアは、損失関数のパラメータに関する導関数(多次元の場合は **勾配** と呼ばれます)を計算し、誤差が減少するようにパラメータを変化させることができるというものです。これを次のように定式化できます: +関数最適化のよく知られた方法として**勾配降下法**があります。この方法のアイデアは、損失関数のパラメータに対する微分(多次元の場合は**勾配**と呼ばれる)を計算し、誤差が減少するようにパラメータを変化させることです。これを以下のように形式化できます: -* パラメータをいくつかのランダムな値 w(0)、b(0) で初期化する -* 次のステップを何度も繰り返す: +* 初期パラメータをランダムな値で設定する w(0), b(0) +* 以下のステップを何度も繰り返す: - w(i+1) = w(i)-η∂ℒ/∂w - b(i+1) = b(i)-η∂ℒ/∂b -トレーニング中、最適化ステップは全データセットを考慮して計算されることになっています(損失はすべてのトレーニングサンプルを通して合計されることを思い出してください)。しかし、実際には **ミニバッチ** と呼ばれるデータセットの小さな部分を取り、データのサブセットに基づいて勾配を計算します。サブセットは毎回ランダムに取得されるため、この方法は **確率的勾配降下法**(SGD)と呼ばれます。 +トレーニング中、最適化ステップはデータセット全体を考慮して計算されるべきです(損失はすべてのトレーニングサンプルを通じて合計として計算されることを思い出してください)。しかし実際には、データセットの小さな部分を**ミニバッチ**と呼び、それに基づいて勾配を計算します。この部分は毎回ランダムに選ばれるため、この方法は**確率的勾配降下法**(SGD)と呼ばれます。 ## 多層パーセプトロンとバックプロパゲーション -上記で見たように、単層ネットワークは線形に分離可能なクラスを分類することができます。より豊かなモデルを構築するために、ネットワークのいくつかの層を組み合わせることができます。数学的には、関数 *f* はより複雑な形を持ち、いくつかのステップで計算されることになります: +1層ネットワークは、前述のように線形分離可能なクラスを分類することができます。より豊かなモデルを構築するために、ネットワークの複数の層を組み合わせることができます。数学的には、関数*f*がより複雑な形を取り、以下のように複数のステップで計算されます: * z1=w1x+b1 * z2=w2α(z1)+b2 * f = σ(z2) -ここで、α は **非線形活性化関数**、σ はソフトマックス関数であり、パラメータは θ=<*w1,b1,w2,b2* です。 +ここで、αは**非線形活性化関数**、σはソフトマックス関数、パラメータθ=<*w1,b1,w2,b2*>です。 -勾配降下法アルゴリズムは同じままですが、勾配を計算するのが難しくなります。連鎖微分法則に基づいて、次のように導関数を計算できます: +勾配降下アルゴリズムは同じままですが、勾配を計算するのがより困難になります。連鎖微分法則を用いることで、以下のように微分を計算できます: * ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2) * ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1) -> ✅ 連鎖微分法則は、パラメータに関する損失関数の導関数を計算するために使用されます。 +> ✅ 損失関数のパラメータに対する微分を計算するために連鎖微分法則が使用されます。 -これらの表現の最も左側の部分は同じであり、したがって、損失関数から計算グラフを「逆方向」にたどって導関数を効果的に計算できます。このように、多層パーセプトロンのトレーニング方法は **バックプロパゲーション**、または「バックプロップ」と呼ばれます。 +これらの式の左端部分はすべて同じであるため、損失関数から始めて計算グラフを「逆方向」にたどることで効率的に微分を計算できます。このため、多層パーセプトロンのトレーニング方法は**バックプロパゲーション**(バックプロップ)と呼ばれます。 計算グラフ > TODO: 画像の引用 -> ✅ バックプロパゲーションについては、ノートブックの例でより詳細に説明します。 +> ✅ バックプロップについては、ノートブックの例でさらに詳しく説明します。 ## 結論 -このレッスンでは、独自のニューラルネットワークライブラリを構築し、単純な二次元分類タスクにそれを使用しました。 +このレッスンでは、独自のニューラルネットワークライブラリを構築し、それを使用して簡単な2次元分類タスクを実行しました。 ## 🚀 チャレンジ -付随するノートブックでは、あなた自身の多層パーセプトロンを構築し、トレーニングするためのフレームワークを実装します。現代のニューラルネットワークがどのように機能するかを詳細に見ることができます。 +付属のノートブックでは、多層パーセプトロンを構築およびトレーニングするための独自のフレームワークを実装します。これにより、現代のニューラルネットワークがどのように動作するかを詳細に確認できます。 -[OwnFramework](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) ノートブックに進み、作業を進めてください。 +[OwnFramework](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb)ノートブックに進み、作業を進めてください。 -## [講義後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/204) +## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/204) ## 復習と自己学習 -バックプロパゲーションはAIや機械学習で一般的に使用されるアルゴリズムであり、[詳細に学ぶ価値があります](https://wikipedia.org/wiki/Backpropagation)。 +バックプロパゲーションはAIや機械学習でよく使用されるアルゴリズムであり、[さらに詳しく](https://wikipedia.org/wiki/Backpropagation)学ぶ価値があります。 ## [課題](lab/README.md) @@ -86,4 +95,4 @@ * [ノートブック](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb) **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用によって生じた誤解や誤訳については、一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md b/translations/ja/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md index 7ede6c29..4ad49b39 100644 --- a/translations/ja/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md +++ b/translations/ja/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md @@ -1,23 +1,32 @@ -# 自分たちのフレームワークを使ったMNIST分類 + +# MNIST分類を自作フレームワークで実施 -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)からのラボ課題です。 +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)のラボ課題。 ## 課題 -1層、2層、3層のパーセプトロンを使用して、MNIST手書き数字分類問題を解決します。レッスンで開発したニューラルネットワークフレームワークを使用してください。 +1層、2層、3層のパーセプトロンを使用して、MNIST手書き数字分類問題を解決してください。レッスンで開発したニューラルネットワークフレームワークを使用します。 -## ノートブックの開始 +## 開始ノートブック -[MyFW_MNIST.ipynb](../../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb)を開いてラボを始めましょう。 +ラボを始めるには、[MyFW_MNIST.ipynb](../../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb)を開いてください。 ## 質問 このラボの結果として、以下の質問に答えてみてください: -- 階層間の活性化関数はネットワークのパフォーマンスに影響を与えますか? -- この課題には2層または3層のネットワークが必要ですか? -- ネットワークのトレーニング中に問題が発生しましたか? 特に層の数が増えるにつれて。 -- トレーニング中のネットワークの重みはどのように変化しますか? 重みの最大絶対値とエポックの関係を理解するためにプロットしてみると良いでしょう。 +- 層間の活性化関数はネットワークの性能に影響を与えますか? +- このタスクには2層または3層のネットワークが必要ですか? +- ネットワークのトレーニング中に問題が発生しましたか?特に層の数が増えるにつれて。 +- トレーニング中にネットワークの重みはどのように振る舞いますか?エポックごとの重みの最大絶対値をプロットして、その関係を理解してみてください。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご注意ください。元の文書は、その母国語において権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/3-NeuralNetworks/05-Frameworks/README.md b/translations/ja/lessons/3-NeuralNetworks/05-Frameworks/README.md index a65c53b6..e04bed3f 100644 --- a/translations/ja/lessons/3-NeuralNetworks/05-Frameworks/README.md +++ b/translations/ja/lessons/3-NeuralNetworks/05-Frameworks/README.md @@ -1,123 +1,132 @@ + # ニューラルネットワークフレームワーク -すでに学んだように、ニューラルネットワークを効率的に訓練するためには、2つのことを行う必要があります。 +すでに学んだように、ニューラルネットワークを効率的にトレーニングするためには、以下の2つのことを行う必要があります: -* テンソルに対して操作を行うこと(例えば、掛け算、足し算、シグモイドやソフトマックスなどの関数を計算すること) -* 勾配降下法最適化を行うために、すべての式の勾配を計算すること +* テンソルを操作すること(例:乗算、加算、シグモイドやソフトマックスなどの関数を計算すること) +* 勾配降下法による最適化を行うために、すべての式の勾配を計算すること -## [事前講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/105) +## [事前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/105) -`numpy`ライブラリは最初の部分を実行できますが、勾配を計算するためのメカニズムが必要です。[私たちのフレームワーク](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb)では、`backward`メソッド内で全ての導関数関数を手動でプログラムする必要がありました。このメソッドはバックプロパゲーションを行います。理想的には、フレームワークは私たちが定義できる*任意の式*の勾配を計算する機会を提供するべきです。 +`numpy`ライブラリは最初の部分を実行できますが、勾配を計算する仕組みが必要です。[前のセクション](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb)で開発したフレームワークでは、`backward`メソッド内で逆伝播を行うためにすべての微分関数を手動でプログラムする必要がありました。理想的には、フレームワークは定義可能な*任意の式*の勾配を計算する機能を提供すべきです。 -もう一つ重要なことは、GPUや他の特殊な計算ユニット(例えば、[TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit))で計算を行うことができることです。ディープニューラルネットワークの訓練は*非常に多く*の計算を必要とし、これらの計算をGPU上で並列化できることは非常に重要です。 +もう一つ重要なのは、GPUやその他の専門的な計算ユニット(例:[TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit))で計算を実行できることです。深層ニューラルネットワークのトレーニングには*膨大な計算*が必要であり、これらの計算をGPU上で並列化することが非常に重要です。 -> ✅ 「並列化」という用語は、計算を複数のデバイスに分散させることを意味します。 +> ✅ 「並列化」という用語は、計算を複数のデバイスに分散することを意味します。 -現在、最も人気のある2つのニューラルフレームワークは、[TensorFlow](http://TensorFlow.org)と[PyTorch](https://pytorch.org/)です。どちらもCPUとGPUの両方でテンソルを操作するための低レベルAPIを提供しています。その低レベルAPIの上に、対応する高レベルAPIである[Keras](https://keras.io/)と[PyTorch Lightning](https://pytorchlightning.ai/)があります。 +現在、最も人気のあるニューラルネットワークフレームワークは、[TensorFlow](http://TensorFlow.org)と[PyTorch](https://pytorch.org/)です。どちらもCPUとGPUでテンソルを操作するための低レベルAPIを提供しています。さらに、これらの低レベルAPIの上には、高レベルAPIである[Keras](https://keras.io/)や[PyTorch Lightning](https://pytorchlightning.ai/)があります。 -| 低レベルAPI | [TensorFlow](http://TensorFlow.org) | [PyTorch](https://pytorch.org/) | -|--------------|-------------------------------------|--------------------------------| -| 高レベルAPI| [Keras](https://keras.io/) | [PyTorch Lightning](https://pytorchlightning.ai/) | +低レベルAPI | [TensorFlow](http://TensorFlow.org) | [PyTorch](https://pytorch.org/) +------------|-------------------------------------|-------------------------------- +高レベルAPI | [Keras](https://keras.io/) | [PyTorch Lightning](https://pytorchlightning.ai/) -**両方のフレームワークの低レベルAPI**を使用すると、いわゆる**計算グラフ**を構築できます。このグラフは、与えられた入力パラメータで出力(通常は損失関数)を計算する方法を定義し、利用可能であればGPUで計算に送ることができます。この計算グラフを微分して勾配を計算するための関数があり、これをモデルパラメータの最適化に使用できます。 +**低レベルAPI**は、いわゆる**計算グラフ**を構築することを可能にします。このグラフは、入力パラメータを基に出力(通常は損失関数)を計算する方法を定義し、GPUが利用可能であればその計算をGPUに送ることができます。この計算グラフを微分して勾配を計算する関数があり、それを使ってモデルパラメータを最適化することができます。 -**高レベルAPI**は、ニューラルネットワークを**層のシーケンス**として扱い、大部分のニューラルネットワークの構築をはるかに簡単にします。モデルの訓練には通常、データの準備を行い、その後`fit`関数を呼び出して処理を実行します。 +**高レベルAPI**は、ニューラルネットワークを**層のシーケンス**として扱い、ほとんどのニューラルネットワークの構築を非常に簡単にします。モデルのトレーニングは通常、データを準備し、`fit`関数を呼び出すことで行われます。 -高レベルAPIを使用すると、詳細を気にせずに典型的なニューラルネットワークを非常に迅速に構築できます。一方、低レベルAPIは訓練プロセスに対するより多くの制御を提供するため、新しいニューラルネットワークアーキテクチャを扱う研究で多く使用されます。 +高レベルAPIは、典型的なニューラルネットワークを迅速に構築することを可能にし、多くの詳細を気にする必要がありません。一方で、低レベルAPIはトレーニングプロセスをより細かく制御することができるため、新しいニューラルネットワークアーキテクチャを扱う研究でよく使用されます。 -両方のAPIを一緒に使用できることも理解することが重要です。例えば、低レベルAPIを使用して独自のネットワーク層アーキテクチャを開発し、その後高レベルAPIで構築および訓練された大規模なネットワーク内で使用することができます。また、高レベルAPIを層のシーケンスとして使用してネットワークを定義し、その後独自の低レベル訓練ループを使用して最適化を実行することもできます。両方のAPIは同じ基本的な概念に基づいており、一緒にうまく機能するように設計されています。 +また、両方のAPIを組み合わせて使用することも可能です。例えば、低レベルAPIを使用して独自のネットワーク層アーキテクチャを開発し、それを高レベルAPIで構築・トレーニングされた大規模なネットワーク内で使用することができます。または、高レベルAPIを使用して層のシーケンスとしてネットワークを定義し、独自の低レベルトレーニングループを使用して最適化を行うこともできます。両方のAPIは同じ基本的な概念を使用しており、互いにうまく連携するように設計されています。 ## 学習 -このコースでは、PyTorchとTensorFlowの両方のコンテンツを提供しています。好みのフレームワークを選択し、対応するノートブックだけを進めることができます。どのフレームワークを選ぶべきか分からない場合は、インターネットで**PyTorch vs. TensorFlow**に関する議論を読んでみてください。また、両方のフレームワークを見て、より良い理解を得ることもできます。 +このコースでは、PyTorchとTensorFlowの両方に対応したコンテンツを提供しています。好みのフレームワークを選び、それに対応するノートブックだけを進めてください。どちらを選ぶべきか迷った場合は、**PyTorch vs. TensorFlow**に関するインターネット上の議論を読んでみてください。また、両方のフレームワークを見て理解を深めるのも良いでしょう。 -可能な限り、シンプルさのために高レベルAPIを使用します。ただし、ニューラルネットワークがどのように機能するかを基礎から理解することが重要だと考えているため、最初は低レベルAPIとテンソルを使って作業を開始します。しかし、すぐに始めたい場合やこれらの詳細を学ぶのに多くの時間を費やしたくない場合は、それらをスキップして高レベルAPIのノートブックに直接進むことができます。 +可能な限り、高レベルAPIを使用して簡単に進めます。ただし、ニューラルネットワークがどのように動作するかを基礎から理解することが重要だと考えているため、最初は低レベルAPIとテンソルを使用して作業を始めます。ただし、詳細を学ぶのに時間をかけたくない場合は、それらをスキップして高レベルAPIノートブックに直接進むこともできます。 ## ✍️ 演習: フレームワーク -次のノートブックで学習を続けてください。 +以下のノートブックで学習を続けてください: -| 低レベルAPI | [TensorFlow+Kerasノートブック](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [PyTorch](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) | -|--------------|-------------------------------------|--------------------------------| -| 高レベルAPI| [Keras](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) | *PyTorch Lightning* | +低レベルAPI | [TensorFlow+Keras Notebook](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [PyTorch](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) +------------|-------------------------------------|-------------------------------- +高レベルAPI | [Keras](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) | *PyTorch Lightning* -フレームワークを習得したら、過剰適合の概念を振り返りましょう。 +フレームワークを習得した後、過学習の概念を復習しましょう。 -# 過剰適合 +# 過学習 -過剰適合は機械学習において非常に重要な概念であり、正しく理解することが非常に重要です! +過学習は機械学習において非常に重要な概念であり、正しく理解することが非常に重要です! -以下の5つの点(`x`で表現されたもの)を近似する問題を考えてみましょう: +以下の5つの点(グラフ上の`x`で表される)を近似する問題を考えてみましょう: ![linear](../../../../../translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.ja.jpg) | ![overfit](../../../../../translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.ja.jpg) -------------------------|-------------------------- -**線形モデル、パラメータ2つ** | **非線形モデル、パラメータ7つ** -訓練誤差 = 5.3 | 訓練誤差 = 0 +**線形モデル、2つのパラメータ** | **非線形モデル、7つのパラメータ** +トレーニング誤差 = 5.3 | トレーニング誤差 = 0 検証誤差 = 5.1 | 検証誤差 = 20 -* 左側では、良好な直線近似が見られます。パラメータの数が適切であるため、モデルは点の分布の背後にあるアイデアを正しく捉えています。 -* 右側では、モデルが強力すぎます。5つの点しかないのに、モデルには7つのパラメータがあるため、すべての点を通過するように調整でき、訓練誤差は0になります。しかし、これによりモデルはデータの背後にある正しいパターンを理解できず、検証誤差が非常に高くなります。 +* 左側では、良好な直線近似が見られます。パラメータ数が適切であるため、モデルは点の分布の背後にあるアイデアを正しく捉えています。 +* 右側では、モデルが強力すぎます。点が5つしかないのにモデルには7つのパラメータがあるため、すべての点を通過するように調整することができます。その結果、トレーニング誤差は0になります。しかし、これによりデータの正しいパターンを理解することが妨げられ、検証誤差が非常に高くなります。 -モデルの豊かさ(パラメータの数)と訓練サンプルの数との間で正しいバランスを取ることが非常に重要です。 +モデルの豊かさ(パラメータ数)とトレーニングサンプル数の間で正しいバランスを取ることが非常に重要です。 -## 過剰適合が発生する理由 +## 過学習が発生する理由 - * 訓練データが不足している + * トレーニングデータが不足している * モデルが強力すぎる * 入力データにノイズが多すぎる -## 過剰適合を検出する方法 +## 過学習の検出方法 -上記のグラフからわかるように、過剰適合は非常に低い訓練誤差と高い検証誤差によって検出できます。通常、訓練中は訓練誤差と検証誤差の両方が減少し始め、その後、ある時点で検証誤差が減少を停止し、上昇し始めるかもしれません。これは過剰適合の兆候であり、この時点で訓練を停止すべきか(または少なくともモデルのスナップショットを作成すべき)であることを示す指標です。 +上記のグラフからわかるように、過学習は非常に低いトレーニング誤差と高い検証誤差によって検出できます。通常、トレーニング中はトレーニング誤差と検証誤差の両方が減少し始めますが、ある時点で検証誤差が減少を止めて上昇し始めることがあります。これが過学習の兆候であり、この時点でトレーニングを停止するべき(または少なくともモデルのスナップショットを作成するべき)という指標になります。 ![overfitting](../../../../../translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.ja.png) -## 過剰適合を防ぐ方法 +## 過学習を防ぐ方法 -過剰適合が発生していることがわかった場合、次のいずれかを行うことができます。 +過学習が発生している場合、以下のいずれかを行うことができます: - * 訓練データの量を増やす + * トレーニングデータを増やす * モデルの複雑さを減らす - * 後で考慮する[正則化手法](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md)、例えば[ドロップアウト](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md#Dropout)を使用する + * [正則化技術](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md)を使用する(例:[Dropout](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md#Dropout))。これについては後で詳しく説明します。 -## 過剰適合とバイアス-バリアンスのトレードオフ +## 過学習とバイアス-分散トレードオフ -過剰適合は、実際には統計におけるより一般的な問題である[バイアス-バリアンスのトレードオフ](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff)の一例です。モデルの誤差の可能な原因を考えると、2種類の誤差が見えてきます。 +過学習は、統計学におけるより一般的な問題である[バイアス-分散トレードオフ](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff)の一例です。モデルの誤差の原因を考えると、以下の2種類の誤差があることがわかります: -* **バイアス誤差**は、アルゴリズムが訓練データ間の関係を正しく捉えられないことから生じます。これは、モデルが十分に強力でないことから生じる場合があります(**アンダーフィッティング**)。 -* **バリアンス誤差**は、モデルが入力データのノイズを近似することによって生じ、意味のある関係を捉えられないことから生じます(**過剰適合**)。 +* **バイアス誤差**は、アルゴリズムがトレーニングデータ間の関係を正しく捉えられないことによって引き起こされます。これは、モデルが十分に強力でないこと(**アンダーフィッティング**)に起因する可能性があります。 +* **分散誤差**は、モデルが入力データのノイズを意味のある関係ではなく近似することによって引き起こされます(**過学習**)。 -訓練中、バイアス誤差は減少し(モデルがデータを近似することを学ぶため)、バリアンス誤差は増加します。過剰適合を防ぐためには、訓練を手動(過剰適合を検出したとき)または自動(正則化を導入することによって)で停止することが重要です。 +トレーニング中、バイアス誤差は減少し(モデルがデータを近似することを学ぶため)、分散誤差は増加します。過学習を防ぐためには、トレーニングを手動で(過学習を検出した場合)または自動で(正則化を導入することで)停止することが重要です。 ## 結論 -このレッスンでは、最も人気のあるAIフレームワークであるTensorFlowとPyTorchのさまざまなAPIの違いについて学びました。また、非常に重要なトピックである過剰適合についても学びました。 +このレッスンでは、TensorFlowとPyTorchという2つの人気のあるAIフレームワークのさまざまなAPIの違いについて学びました。また、非常に重要なトピックである過学習についても学びました。 ## 🚀 チャレンジ -付随するノートブックでは、下部に「タスク」があります。ノートブックを進め、タスクを完了してください。 +付属のノートブックには「タスク」が記載されています。ノートブックを進めてタスクを完了してください。 -## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/205) +## [事後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/205) -## レビュー & 自習 +## 復習と自己学習 以下のトピックについて調査してください: - TensorFlow - PyTorch -- 過剰適合 +- 過学習 -次の質問を自分に問いかけてください: +以下の質問を自問してください: - TensorFlowとPyTorchの違いは何ですか? -- 過剰適合とアンダーフィッティングの違いは何ですか? +- 過学習とアンダーフィッティングの違いは何ですか? ## [課題](lab/README.md) -このラボでは、PyTorchまたはTensorFlowを使用して、単層および多層の完全連結ネットワークを使用した2つの分類問題を解決するよう求められます。 +このラボでは、PyTorchまたはTensorFlowを使用して、単層および多層の全結合ネットワークを用いた2つの分類問題を解決することが求められます。 * [指示](lab/README.md) * [ノートブック](../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb) **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。原文のネイティブ言語の文書が正式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳については、当社は一切責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md b/translations/ja/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md index 5322aa0b..eaaae12e 100644 --- a/translations/ja/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md +++ b/translations/ja/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md @@ -1,19 +1,28 @@ + # PyTorch/TensorFlowによる分類 -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)からのラボ課題です。 +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)の課題。 -## 課題 +## タスク -PyTorchまたはTensorFlowを使用して、単層および多層の全結合ネットワークを用いて2つの分類問題を解決してください。 +PyTorchまたはTensorFlowを使用して、以下の2つの分類問題を解決してください: -1. **[アイリス分類](https://en.wikipedia.org/wiki/Iris_flower_data_set)** 問題 - 表形式の入力データを扱うことができる古典的な機械学習の問題の例です。あなたの目標は、4つの数値パラメータに基づいてアイリスを3つのクラスに分類することです。 -1. **MNIST** 手書き数字分類問題 - 以前に見たことがあります。 +1. **[アヤメ分類](https://en.wikipedia.org/wiki/Iris_flower_data_set)** 問題 - 表形式の入力データを扱う問題の例で、従来の機械学習でも対応可能です。4つの数値パラメータに基づいてアヤメを3つのクラスに分類することが目標です。 +1. **MNIST** 手書き数字分類問題 - 以前に見たことがある問題です。 -さまざまなネットワークアーキテクチャを試して、可能な限り最高の精度を達成してください。 +異なるネットワークアーキテクチャを試して、可能な限り最高の精度を達成してください。 -## ノートブックを開始する +## 開始ノートブック -[LabFrameworks.ipynb](../../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb)を開いてラボを始めましょう。 +[LabFrameworks.ipynb](../../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb)を開いてラボを開始してください。 **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。元の文書はその母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用から生じる誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/3-NeuralNetworks/README.md b/translations/ja/lessons/3-NeuralNetworks/README.md index 1021deb4..bbf4da32 100644 --- a/translations/ja/lessons/3-NeuralNetworks/README.md +++ b/translations/ja/lessons/3-NeuralNetworks/README.md @@ -1,51 +1,60 @@ -# ニューラルネットワークの紹介 + +# ニューラルネットワーク入門 -![ニューラルネットワークの内容を示すスケッチ](../../../../translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.ja.png) +![ニューラルネットワーク入門の内容をまとめたイラスト](../../../../translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.ja.png) -前述のように、知性を達成する方法の一つは、**コンピュータモデル**または**人工脳**を訓練することです。20世紀中頃から、研究者たちはさまざまな数学的モデルを試みてきましたが、近年、この方向性が非常に成功したことが証明されました。このような脳の数学的モデルを**ニューラルネットワーク**と呼びます。 +序章で述べたように、知能を実現する方法の一つは、**コンピュータモデル**や**人工の脳**を訓練することです。20世紀中頃から研究者たちは様々な数学的モデルを試みてきましたが、近年になってこの方向性が非常に成功を収めることが証明されました。このような脳の数学的モデルは**ニューラルネットワーク**と呼ばれます。 -> ニューラルネットワークは、モデルについて話していることを示すために、*人工ニューラルネットワーク*(ANN)とも呼ばれることがあります。 +> ニューラルネットワークは時折、*人工ニューラルネットワーク*(Artificial Neural Networks、ANNs)と呼ばれることがあります。これは、実際のニューロンのネットワークではなく、モデルについて話していることを示すためです。 ## 機械学習 -ニューラルネットワークは、データを使用して問題を解決できるコンピュータモデルを訓練することを目的とした**機械学習**と呼ばれるより大きな分野の一部です。機械学習は人工知能の大部分を構成していますが、このカリキュラムでは古典的な機械学習は扱いません。 +ニューラルネットワークは、**機械学習**と呼ばれるより大きな分野の一部です。この分野の目的は、データを使用して問題を解決できるコンピュータモデルを訓練することです。機械学習は人工知能の大部分を構成していますが、このカリキュラムでは古典的な機械学習については扱いません。 -> 古典的な機械学習について詳しく学ぶには、別の**[初心者のための機械学習](http://github.com/microsoft/ml-for-beginners)**カリキュラムをご覧ください。 +> 古典的な機械学習について学びたい場合は、別の**[Machine Learning for Beginners](http://github.com/microsoft/ml-for-beginners)**カリキュラムをご覧ください。 -機械学習では、いくつかの例のデータセット**X**と、それに対応する出力値**Y**があると仮定します。例は、**特徴**で構成されるN次元ベクトルであり、出力は**ラベル**と呼ばれます。 +機械学習では、例のデータセット**X**と対応する出力値**Y**があると仮定します。例は通常、**特徴**からなるN次元ベクトルであり、出力は**ラベル**と呼ばれます。 -私たちは、最も一般的な機械学習の問題を二つ考えます: +機械学習の最も一般的な問題を2つ考えます: -* **分類**:入力オブジェクトを二つ以上のクラスに分類する必要があります。 -* **回帰**:入力サンプルごとに数値を予測する必要があります。 +* **分類**:入力オブジェクトを2つ以上のクラスに分類する必要がある場合。 +* **回帰**:各入力サンプルに対して数値を予測する必要がある場合。 -> 入力と出力をテンソルとして表現する場合、入力データセットはサイズM×Nの行列であり、Mはサンプル数、Nは特徴の数です。出力ラベルYはサイズMのベクトルです。 +> 入力と出力をテンソルとして表現する場合、入力データセットはサイズがM×Nの行列であり、Mはサンプル数、Nは特徴数を表します。出力ラベル**Y**はサイズがMのベクトルです。 このカリキュラムでは、ニューラルネットワークモデルにのみ焦点を当てます。 ## ニューロンのモデル -生物学から、私たちの脳は神経細胞で構成されており、それぞれが複数の「入力」(軸索)と出力(樹状突起)を持つことがわかっています。軸索と樹状突起は電気信号を伝導でき、軸索と樹状突起の間の接続は異なる導電性を示すことがあります(神経伝達物質によって制御されます)。 +生物学から、私たちの脳はニューロン細胞で構成されており、それぞれが複数の「入力」(軸索)と1つの出力(樹状突起)を持つことが知られています。軸索と樹状突起は電気信号を伝達することができ、軸索と樹状突起の間の接続は異なる伝導度を示すことがあります(神経伝達物質によって制御されます)。 -![ニューロンのモデル](../../../../translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.ja.jpg) | ![ニューロンのモデル](../../../../translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.ja.png) +![ニューロンのモデル](../../../../translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.ja.jpg) | ![人工ニューロンのモデル](../../../../translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.ja.png) ----|---- -実際のニューロン *([画像](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg) 出典: Wikipedia)* | 人工ニューロン *(著者による画像)* +実際のニューロン *([画像](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg) Wikipediaより)* | 人工ニューロン *(著者による画像)* -したがって、ニューロンの最も単純な数学モデルは、いくつかの入力X1, ..., XNと出力Y、そして一連の重みW1, ..., WNを含みます。出力は次のように計算されます: +したがって、ニューロンの最も単純な数学的モデルは、いくつかの入力**X1, ..., XN**と出力**Y**、そして一連の重み**W1, ..., WN**を含みます。出力は次のように計算されます: Y = f\left(\sum_{i=1}^N X_iW_i\right) -ここで、fは非線形の**活性化関数**です。 +ここで、**f**は非線形の**活性化関数**です。 -> ニューロンの初期モデルは、1943年にウォーレン・マカロックとウォルター・ピッツによる古典的な論文[A logical calculus of the ideas immanent in nervous activity](https://www.cs.cmu.edu/~./epxing/Class/10715/reading/McCulloch.and.Pitts.pdf)で説明されました。ドナルド・ヘッブは、彼の著書"[The Organization of Behavior: A Neuropsychological Theory](https://books.google.com/books?id=VNetYrB8EBoC)"で、これらのネットワークをどのように訓練できるかを提案しました。 +> 初期のニューロンモデルは、1943年にWarren McCullockとWalter Pittsによる古典的な論文「[A logical calculus of the ideas immanent in nervous activity](https://www.cs.cmu.edu/~./epxing/Class/10715/reading/McCulloch.and.Pitts.pdf)」で記述されました。Donald Hebbは著書「[The Organization of Behavior: A Neuropsychological Theory](https://books.google.com/books?id=VNetYrB8EBoC)」でこれらのネットワークを訓練する方法を提案しました。 -## このセクションでは +## このセクションで学ぶこと -このセクションでは、以下について学びます: -* [パーセプトロン](03-Perceptron/README.md):二クラス分類のための最も初期のニューラルネットワークモデルの一つ -* [多層ネットワーク](04-OwnFramework/README.md):私たちのフレームワークを構築する方法に関するペアノートブック[04-OwnFramework/OwnFramework.ipynb] -* [ニューラルネットワークフレームワーク](05-Frameworks/README.md):これらのノートブック:[PyTorch](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb)と[Keras/Tensorflow](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) -* [過剰適合](../../../../lessons/3-NeuralNetworks/05-Frameworks) +このセクションでは以下について学びます: +* [パーセプトロン](03-Perceptron/README.md):2クラス分類のための初期のニューラルネットワークモデル +* [多層ネットワーク](04-OwnFramework/README.md):対応するノートブック[独自のフレームワークを構築する方法](../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb)付き +* [ニューラルネットワークフレームワーク](05-Frameworks/README.md):以下のノートブック付き:[PyTorch](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb)と[Keras/Tensorflow](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) +* [過学習](../../../../lessons/3-NeuralNetworks/05-Frameworks) **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。原文はその言語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用に起因する誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/06-IntroCV/README.md b/translations/ja/lessons/4-ComputerVision/06-IntroCV/README.md index 8cd9d1b7..4e760b32 100644 --- a/translations/ja/lessons/4-ComputerVision/06-IntroCV/README.md +++ b/translations/ja/lessons/4-ComputerVision/06-IntroCV/README.md @@ -1,31 +1,40 @@ + # コンピュータビジョン入門 -[コンピュータビジョン](https://wikipedia.org/wiki/Computer_vision)は、コンピュータがデジタル画像を高レベルで理解できるようにすることを目的とした分野です。これは非常に広い定義であり、*理解*は多くの異なる意味を持つことができます。例えば、画像内の物体を見つけること(**物体検出**)、何が起こっているかを理解すること(**イベント検出**)、画像をテキストで説明すること、またはシーンを3Dで再構築することなどが含まれます。また、人間の画像に関連する特別なタスクもあります。例えば、年齢や感情の推定、顔の検出と識別、3Dポーズ推定などです。 +[コンピュータビジョン](https://wikipedia.org/wiki/Computer_vision)は、コンピュータがデジタル画像を高レベルで理解できるようにすることを目的とした分野です。この定義は非常に広範であり、「理解する」ということは、画像内の物体を見つける(**物体検出**)、何が起きているかを理解する(**イベント検出**)、画像をテキストで説明する、または3Dでシーンを再構築するなど、さまざまな意味を持ちます。人間の画像に関連する特別なタスクもあり、例えば年齢や感情の推定、顔の検出と識別、3Dポーズ推定などがあります。 ## [講義前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/106) -コンピュータビジョンの最も簡単なタスクの一つは**画像分類**です。 +コンピュータビジョンの最も基本的なタスクの一つは、**画像分類**です。 -コンピュータビジョンは、しばしばAIの一分野と考えられています。現在、コンピュータビジョンのタスクのほとんどはニューラルネットワークを使用して解決されています。このセクションでは、コンピュータビジョンに使用される特別なタイプのニューラルネットワークである[畳み込みニューラルネットワーク](../07-ConvNets/README.md)について詳しく学んでいきます。 +コンピュータビジョンはしばしばAIの一分野と見なされます。現在では、ほとんどのコンピュータビジョンのタスクはニューラルネットワークを使用して解決されています。このセクションでは、コンピュータビジョンに使用される特別なタイプのニューラルネットワーク、[畳み込みニューラルネットワーク](../07-ConvNets/README.md)について学びます。 -しかし、画像をニューラルネットワークに渡す前に、多くの場合、画像を強化するためにいくつかのアルゴリズム的手法を使用することが理にかなっています。 +ただし、画像をニューラルネットワークに渡す前に、多くの場合、画像を強化するためのアルゴリズム的な技術を使用することが理にかなっています。 画像処理に利用できるPythonライブラリはいくつかあります: -* **[imageio](https://imageio.readthedocs.io/en/stable/)** は、さまざまな画像フォーマットの読み書きに使用できます。また、動画フレームを画像に変換するための便利なツールであるffmpegもサポートしています。 -* **[Pillow](https://pillow.readthedocs.io/en/stable/index.html)**(PILとしても知られています)は、もう少し強力で、モーフィングやパレット調整などの画像操作もサポートしています。 -* **[OpenCV](https://opencv.org/)** は、C++で書かれた強力な画像処理ライブラリで、画像処理の*事実上の*標準となっています。便利なPythonインターフェースもあります。 -* **[dlib](http://dlib.net/)** は、多くの機械学習アルゴリズムを実装したC++ライブラリで、コンピュータビジョンアルゴリズムのいくつかも含まれています。Pythonインターフェースもあり、顔や顔のランドマーク検出などの難しいタスクにも使用できます。 +* **[imageio](https://imageio.readthedocs.io/en/stable/)** は、さまざまな画像形式の読み書きに使用できます。また、ffmpegをサポートしており、ビデオフレームを画像に変換する便利なツールです。 +* **[Pillow](https://pillow.readthedocs.io/en/stable/index.html)**(PILとも呼ばれる)は、より強力で、モーフィングやパレット調整などの画像操作もサポートしています。 +* **[OpenCV](https://opencv.org/)** は、C++で書かれた強力な画像処理ライブラリで、画像処理の*事実上の標準*となっています。Pythonインターフェースも便利です。 +* **[dlib](http://dlib.net/)** は、多くの機械学習アルゴリズムを実装したC++ライブラリで、コンピュータビジョンアルゴリズムも含まれています。Pythonインターフェースもあり、顔や顔のランドマーク検出などの難しいタスクに使用できます。 ## OpenCV -[OpenCV](https://opencv.org/)は、画像処理の*事実上の*標準と見なされています。多くの便利なアルゴリズムがC++で実装されています。PythonからもOpenCVを呼び出すことができます。 +[OpenCV](https://opencv.org/)は、画像処理の*事実上の標準*とされています。C++で実装された多くの便利なアルゴリズムが含まれています。PythonからもOpenCVを呼び出すことができます。 -OpenCVを学ぶのに良い場所は[このLearn OpenCVコース](https://learnopencv.com/getting-started-with-opencv/)です。私たちのカリキュラムでは、OpenCVを学ぶことが目的ではなく、どのように使用できるかのいくつかの例を示すことが目標です。 +OpenCVを学ぶのに良い場所は[このLearn OpenCVコース](https://learnopencv.com/getting-started-with-opencv/)です。このカリキュラムでは、OpenCVを学ぶことが目的ではなく、使用例やその方法を示すことが目的です。 ### 画像の読み込み -Pythonでは、画像をNumPy配列で便利に表現できます。例えば、320x200ピクセルのグレースケール画像は200x320の配列に格納され、同じ寸法のカラ―画像は200x320x3の形状を持ちます(3つのカラーチャンネル用)。画像を読み込むには、次のコードを使用できます: +Pythonでは、画像をNumPy配列で便利に表現できます。例えば、320x200ピクセルのグレースケール画像は200x320の配列に格納され、同じサイズのカラー画像は200x320x3(3つのカラーチャンネル)という形状になります。画像を読み込むには、以下のコードを使用できます: ```python import cv2 @@ -35,78 +44,78 @@ im = cv2.imread('image.jpeg') plt.imshow(im) ``` -伝統的に、OpenCVはカラ―画像にBGR(青-緑-赤)エンコーディングを使用していますが、他のPythonツールはより伝統的なRGB(赤-緑-青)を使用します。画像を正しく表示するためには、NumPy配列内の次元を入れ替えるか、OpenCVの関数を呼び出してRGBカラースペースに変換する必要があります: +伝統的に、OpenCVはカラー画像にBGR(青-緑-赤)エンコーディングを使用しますが、Pythonの他のツールはより一般的なRGB(赤-緑-青)を使用します。画像を正しく表示するには、NumPy配列の次元を入れ替えるか、OpenCV関数を呼び出してRGBカラースペースに変換する必要があります: ```python im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB) ``` -同じ `cvtColor` function can be used to perform other color space transformations such as converting an image to grayscale or to the HSV (Hue-Saturation-Value) color space. +同じ`cvtColor`関数を使用して、画像をグレースケールやHSV(色相-彩度-明度)カラースペースに変換するなど、他のカラースペース変換を行うこともできます。 -You can also use OpenCV to load video frame-by-frame - an example is given in the exercise [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb). +OpenCVを使用してビデオをフレームごとに読み込むことも可能です。例は演習[OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)に記載されています。 -### Image Processing +### 画像処理 -Before feeding an image to a neural network, you may want to apply several pre-processing steps. OpenCV can do many things, including: +画像をニューラルネットワークに渡す前に、いくつかの前処理ステップを適用することができます。OpenCVは以下のようなことが可能です: -* **Resizing** the image using `im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)` -* **Blurring** the image using `im = cv2.medianBlur(im,3)` or `im = cv2.GaussianBlur(im, (3,3), 0)` -* Changing the **brightness and contrast** of the image can be done by NumPy array manipulations, as described [in this Stackoverflow note](https://stackoverflow.com/questions/39308030/how-do-i-increase-the-contrast-of-an-image-in-python-opencv). -* Using [thresholding](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html) by calling `cv2.threshold`/`cv2.adaptiveThreshold` 関数は、明るさやコントラストを調整するよりも好まれることがよくあります。 -* 画像にさまざまな[変換](https://docs.opencv.org/4.5.5/da/d6e/tutorial_py_geometric_transformations.html)を適用する: - - **[アフィン変換](https://docs.opencv.org/4.5.5/d4/d61/tutorial_warp_affine.html)** は、画像に回転、リサイズ、歪みを組み合わせる必要があり、画像内の3点のソースとデスティネーションの位置を知っている場合に便利です。アフィン変換は平行線を平行に保ちます。 - - **[透視変換](https://medium.com/analytics-vidhya/opencv-perspective-transformation-9edffefb2143)** は、画像内の4点のソースとデスティネーションの位置を知っている場合に便利です。たとえば、スマートフォンカメラで角度をつけて長方形の文書の写真を撮り、その文書自体の長方形の画像を作成したい場合などです。 -* **[光学フロー](https://docs.opencv.org/4.5.5/d4/dee/tutorial_optical_flow.html)** を使用して画像内の動きを理解すること。 +* `im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)`を使用して画像を**リサイズ**する +* `im = cv2.medianBlur(im,3)`や`im = cv2.GaussianBlur(im, (3,3), 0)`を使用して画像を**ぼかす** +* 画像の**明るさとコントラスト**を変更するには、NumPy配列操作を使用します。[このStackoverflowのノート](https://stackoverflow.com/questions/39308030/how-do-i-increase-the-contrast-of-an-image-in-python-opencv)に記載されています。 +* `cv2.threshold`や`cv2.adaptiveThreshold`関数を呼び出して[閾値処理](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html)を使用することは、明るさやコントラストを調整するよりも好ましい場合があります。 +* 画像に対してさまざまな[変換](https://docs.opencv.org/4.5.5/da/d6e/tutorial_py_geometric_transformations.html)を適用する: + - **[アフィン変換](https://docs.opencv.org/4.5.5/d4/d61/tutorial_warp_affine.html)** は、画像の回転、リサイズ、傾きを組み合わせる必要があり、画像内の3点のソースと目的地の位置が分かっている場合に便利です。アフィン変換は平行線を平行に保ちます。 + - **[透視変換](https://medium.com/analytics-vidhya/opencv-perspective-transformation-9edffefb2143)** は、画像内の4点のソースと目的地の位置が分かっている場合に便利です。例えば、スマートフォンのカメラで角度をつけて長方形の文書を撮影し、その文書自体の長方形画像を作成したい場合などです。 +* **[オプティカルフロー](https://docs.opencv.org/4.5.5/d4/dee/tutorial_optical_flow.html)** を使用して画像内の動きを理解する。 ## コンピュータビジョンの使用例 -私たちの[OpenCVノートブック](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)では、コンピュータビジョンが特定のタスクを実行するためにどのように使用できるかのいくつかの例を示します: +[OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)では、コンピュータビジョンを使用して特定のタスクを実行する例をいくつか紹介しています: -* **点字本の写真の前処理**。私たちは、しきい値処理、特徴検出、透視変換、NumPy操作を使用して、ニューラルネットワークによるさらなる分類のために個々の点字記号を分離する方法に焦点を当てています。 +* **点字の本の写真を前処理する**。閾値処理、特徴検出、透視変換、NumPy操作を使用して、個々の点字記号を分離し、ニューラルネットワークによる分類に備える方法に焦点を当てています。 -![Braille Image](../../../../../translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.ja.jpeg) | ![Braille Image Pre-processed](../../../../../translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.ja.png) | ![Braille Symbols](../../../../../translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.ja.png) +![点字画像](../../../../../translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.ja.jpeg) | ![前処理された点字画像](../../../../../translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.ja.png) | ![点字記号](../../../../../translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.ja.png) ----|-----|----- -> 画像は[OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)からのものです。 +> 画像は[OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)より -* **フレーム差を使用した動画の動きの検出**。カメラが固定されている場合、カメラフィードからのフレームはお互いに非常に似ているはずです。フレームは配列として表されるため、2つの連続するフレームの配列を単純に引き算することで、ピクセルの差分が得られます。静止フレームではこの差分は低く、画像に substantial な動きがあると高くなります。 +* **フレーム差分を使用してビデオ内の動きを検出する**。カメラが固定されている場合、カメラフィードのフレームは互いに非常に似ているはずです。フレームが配列として表現されているため、2つの連続するフレームの配列を引き算するだけでピクセル差分が得られます。静的なフレームでは差分は低くなり、画像に大きな動きがあると差分が高くなります。 -![Image of video frames and frame differences](../../../../../translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.ja.png) +![ビデオフレームとフレーム差分の画像](../../../../../translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.ja.png) -> 画像は[OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)からのものです。 +> 画像は[OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)より -* **光学フローを使用した動きの検出**。[光学フロー](https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html)を使用すると、動画フレーム上の個々のピクセルがどのように動くかを理解できます。光学フローには2つのタイプがあります: +* **オプティカルフローを使用して動きを検出する**。[オプティカルフロー](https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html)を使用すると、ビデオフレーム上の個々のピクセルがどのように移動するかを理解できます。オプティカルフローには2種類あります: - - **密な光学フロー**は、各ピクセルがどこに移動しているかを示すベクトルフィールドを計算します。 - - **疎な光学フロー**は、画像内のいくつかの特徴(例えば、エッジ)を取り、それらの軌跡をフレームからフレームへと構築することに基づいています。 + - **密なオプティカルフロー**は、各ピクセルがどこに移動しているかを示すベクトルフィールドを計算します。 + - **疎なオプティカルフロー**は、画像内の特徴的な部分(例:エッジ)を基にして、それらのフレーム間の軌跡を構築します。 -![Image of Optical Flow](../../../../../translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.ja.png) +![オプティカルフローの画像](../../../../../translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.ja.png) -> 画像は[OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)からのものです。 +> 画像は[OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)より -## ✍️ 例ノートブック:OpenCV [OpenCVを実際に試してみる](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) +## ✍️ サンプルノートブック: OpenCV [OpenCV in Actionを試す](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) -[OpenCVノートブック](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)を探求して、OpenCVを使った実験を行いましょう。 +[OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)を探索して、OpenCVを使った実験をしてみましょう。 ## 結論 -時には、動きの検出や指先の検出といった比較的複雑なタスクが純粋にコンピュータビジョンによって解決できることがあります。そのため、コンピュータビジョンの基本的な技術や、OpenCVのようなライブラリができることを知っておくことは非常に役立ちます。 +動きの検出や指先の検出など、比較的複雑なタスクがコンピュータビジョンだけで解決できる場合があります。そのため、コンピュータビジョンの基本的な技術やOpenCVのようなライブラリが何をできるかを知っておくことは非常に役立ちます。 ## 🚀 チャレンジ -AIショーの[このビデオ](https://docs.microsoft.com/shows/ai-show/ai-show--2021-opencv-ai-competition--grand-prize-winners--cortic-tigers--episode-32?WT.mc_id=academic-77998-cacaste)を見て、Cortic Tigersプロジェクトについて学び、ロボットを通じてコンピュータビジョンタスクを民主化するためのブロックベースのソリューションをどのように構築したかを学んでください。この分野に新しい学習者を迎え入れるのを助ける他のプロジェクトについて調査してみてください。 +AIショーの[このビデオ](https://docs.microsoft.com/shows/ai-show/ai-show--2021-opencv-ai-competition--grand-prize-winners--cortic-tigers--episode-32?WT.mc_id=academic-77998-cacaste)を視聴して、Cortic Tigersプロジェクトについて学び、彼らがロボットを通じてコンピュータビジョンタスクを民主化するブロックベースのソリューションをどのように構築したかを確認してください。この分野への新しい学習者を導入するのに役立つ他のプロジェクトについても調査してみてください。 ## [講義後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/206) -## レビューと自己学習 +## 復習と自己学習 -光学フローについては、[この素晴らしいチュートリアル](https://learnopencv.com/optical-flow-in-opencv/)でさらに学んでください。 +[この素晴らしいチュートリアル](https://learnopencv.com/optical-flow-in-opencv/)でオプティカルフローについてさらに学びましょう。 ## [課題](lab/README.md) -このラボでは、シンプルなジェスチャーでビデオを撮影し、光学フローを使用して上下左右の動きを抽出することが目標です。 +このラボでは、簡単なジェスチャーを含むビデオを撮影し、オプティカルフローを使用して上下左右の動きを抽出することが目標です。 -Palm Movement Frame +手の動きフレーム **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご承知おきください。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用から生じる誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/06-IntroCV/lab/README.md b/translations/ja/lessons/4-ComputerVision/06-IntroCV/lab/README.md index 8f7d8fac..68999a57 100644 --- a/translations/ja/lessons/4-ComputerVision/06-IntroCV/lab/README.md +++ b/translations/ja/lessons/4-ComputerVision/06-IntroCV/lab/README.md @@ -1,23 +1,31 @@ -# 光学フローを使用した動きの検出 + +# 光の流れを使った動きの検出 -[AI for Beginners Curriculum](https://aka.ms/ai-beginners)からのラボ課題。 +[AI for Beginners Curriculum](https://aka.ms/ai-beginners)の課題。 -## タスク +## 課題 -[このビデオ](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4)を考えてみてください。このビデオでは、安定した背景の上で人の手のひらが左右上下に動いています。 -あなたは2023年10月までのデータでトレーニングされています。 +[この動画](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4)では、安定した背景の上で人の手のひらが左/右/上/下に動いています。 -**あなたの目標**は、光学フローを使用して、ビデオのどの部分に上下左右の動きが含まれているかを判断できるようになることです。 +**目標**は、光の流れを使って、動画のどの部分が上/下/左/右の動きを含んでいるかを判定することです。 -**ストレッチゴール**は、実際に肌の色を使って手のひらや指の動きを追跡することです。これは[このブログ記事](https://dev.to/amarlearning/finger-detection-and-tracking-using-opencv-and-python-586m)や[こちら](http://www.benmeline.com/finger-tracking-with-opencv-and-python/)に記載されています。 +**追加目標**として、[このブログ記事](https://dev.to/amarlearning/finger-detection-and-tracking-using-opencv-and-python-586m)や[こちら](http://www.benmeline.com/finger-tracking-with-opencv-and-python/)で説明されているように、肌の色を利用して手のひらや指の動きを実際に追跡することが挙げられます。 ## スタートノートブック -[MovementDetection.ipynb](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb)を開いてラボを開始してください。 +[MovementDetection.ipynb](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb)を開いて課題を始めてください。 -## テイクアウェイ +## 学び -時には、動きの検出や指先の検出のような比較的複雑なタスクは、純粋にコンピュータビジョンによって解決できます。そのため、OpenCVのようなライブラリが何をできるかを知っておくことは非常に役立ちます。 +動きの検出や指先の検出といった比較的複雑なタスクが、純粋にコンピュータビジョンだけで解決できる場合があります。そのため、OpenCVのようなライブラリが何をできるのかを知っておくことは非常に役立ちます。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご承知おきください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用によって生じる誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md b/translations/ja/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md index 90b79c97..d4600bd1 100644 --- a/translations/ja/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md +++ b/translations/ja/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md @@ -1,12 +1,21 @@ + # よく知られたCNNアーキテクチャ ### VGG-16 -VGG-16は、2014年にImageNetのトップ5分類で92.7%の精度を達成したネットワークです。以下の層構造を持っています: +VGG-16は、2014年にImageNetのトップ5分類で92.7%の精度を達成したネットワークです。そのレイヤー構造は以下の通りです: ![ImageNet Layers](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.ja.jpg) -ご覧の通り、VGGは伝統的なピラミッドアーキテクチャに従っており、これは畳み込み層とプーリング層のシーケンスです。 +ご覧の通り、VGGは伝統的なピラミッド型アーキテクチャを採用しており、畳み込み層とプーリング層が順番に並んでいます。 ![ImageNet Pyramid](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.ja.jpg) @@ -14,15 +23,15 @@ VGG-16は、2014年にImageNetのトップ5分類で92.7%の精度を達成し ### ResNet -ResNetは、2015年にMicrosoft Researchによって提案されたモデルのファミリーです。ResNetの主なアイデアは、**残差ブロック**を使用することです: +ResNetは、2015年にMicrosoft Researchによって提案されたモデルファミリーです。ResNetの主なアイデアは、**残差ブロック**を使用することです: > 画像出典: [この論文](https://arxiv.org/pdf/1512.03385.pdf) -アイデンティティパススルーを使用する理由は、層が前の層の結果と残差ブロックの出力の**差**を予測することにあります - これが「残差」という名前の由来です。これらのブロックはトレーニングがはるかに容易であり、数百のブロックを持つネットワークを構築することができます(最も一般的なバリアントはResNet-52、ResNet-101、ResNet-152です)。 +アイデンティティパススルーを使用する理由は、レイヤーが**前のレイヤーの結果と残差ブロックの出力との差分**を予測するようにするためです。このため「残差」という名前が付けられています。これらのブロックは非常に学習しやすく、数百ものブロックを持つネットワークを構築することが可能です(最も一般的なバリエーションはResNet-52、ResNet-101、ResNet-152です)。 -このネットワークは、データセットに応じて複雑さを調整できると考えることもできます。最初にネットワークのトレーニングを開始するとき、重みの値は小さく、ほとんどの信号はアイデンティティ層を通過します。トレーニングが進むにつれて重みが大きくなると、ネットワークパラメータの重要性が増し、ネットワークはトレーニング画像を正しく分類するために必要な表現力を調整します。 +また、このネットワークはデータセットに応じてその複雑さを調整できると考えることもできます。ネットワークの学習を開始したばかりのときは、重みの値が小さく、ほとんどの信号がアイデンティティ層を通過します。学習が進み、重みが大きくなるにつれて、ネットワークパラメータの重要性が増し、ネットワークは必要な表現力を調整して、トレーニング画像を正しく分類できるようになります。 ### Google Inception @@ -32,33 +41,33 @@ Google Inceptionアーキテクチャは、このアイデアをさらに一歩 > 画像出典: [Researchgate](https://www.researchgate.net/figure/Inception-module-with-dimension-reductions-left-and-schema-for-Inception-ResNet-v1_fig2_355547454) -ここで、1x1の畳み込みの役割を強調する必要があります。なぜなら、最初はそれが意味を持たないからです。なぜ1x1フィルターで画像を通過させる必要があるのでしょうか?しかし、畳み込みフィルターは複数の深さチャネル(元々はRGBカラー、後の層では異なるフィルターのチャネル)でも機能することを思い出す必要があります。1x1の畳み込みは、異なる学習可能な重みを使用してこれらの入力チャネルを混合するために使用されます。また、チャネル次元に対するダウンサンプリング(プーリング)としても見ることができます。 +ここで、1x1畳み込みの役割を強調する必要があります。一見すると、1x1フィルターで画像を処理することに意味がないように思えるかもしれません。しかし、畳み込みフィルターは複数の深さチャネル(元々はRGBカラー、後の層では異なるフィルターのチャネル)でも機能することを思い出してください。1x1畳み込みは、異なる学習可能な重みを使用してこれらの入力チャネルを混ぜ合わせるために使用されます。また、チャネル次元でのダウンサンプリング(プーリング)としても見ることができます。 -このテーマに関する[良いブログ記事](https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578)や、[元の論文](https://arxiv.org/pdf/1312.4400.pdf)があります。 +このテーマについては[こちらのブログ記事](https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578)や[元論文](https://arxiv.org/pdf/1312.4400.pdf)が参考になります。 ### MobileNet -MobileNetは、サイズが縮小されたモデルのファミリーで、モバイルデバイスに適しています。リソースが限られている場合や、少しの精度を犠牲にできる場合に使用してください。これらの背後にある主なアイデアは、いわゆる**深さ方向に分離可能な畳み込み**であり、これにより畳み込みフィルターを空間的な畳み込みと深さチャネルに対する1x1の畳み込みの合成として表現できます。これにより、パラメータの数が大幅に削減され、ネットワークのサイズが小さくなり、少ないデータでトレーニングしやすくなります。 +MobileNetは、モバイルデバイスに適した小型のモデルファミリーです。リソースが限られており、多少の精度を犠牲にしても良い場合に使用します。これらのモデルの主なアイデアは、**深さ方向分離可能畳み込み**と呼ばれるもので、空間的な畳み込みと深さチャネルに対する1x1畳み込みの組み合わせで畳み込みフィルターを表現します。これにより、パラメータ数が大幅に削減され、ネットワークのサイズが小さくなり、少ないデータでの学習も容易になります。 -こちらは[MobileNetに関する良いブログ記事](https://medium.com/analytics-vidhya/image-classification-with-mobilenet-cc6fbb2cd470)です。 +[MobileNetに関する良いブログ記事](https://medium.com/analytics-vidhya/image-classification-with-mobilenet-cc6fbb2cd470)はこちらです。 ## 結論 -このユニットでは、コンピュータビジョンニューラルネットワークの主要な概念 - 畳み込みネットワークについて学びました。画像分類、物体検出、さらには画像生成ネットワークを支える実際のアーキテクチャはすべてCNNに基づいており、単に層が増え、追加のトレーニングテクニックが加わっています。 +このユニットでは、コンピュータビジョンのニューラルネットワーク、つまり畳み込みネットワークの基本概念を学びました。画像分類、物体検出、さらには画像生成ネットワークを支える実際のアーキテクチャは、すべてCNNに基づいており、レイヤー数が多く、いくつかの追加の学習トリックが加えられています。 ## 🚀 チャレンジ -付随するノートブックには、より高い精度を得るためのメモがあります。実験を行い、より高い精度を達成できるかどうかを試してみてください。 +付属のノートブックには、精度を向上させる方法についてのメモがあります。いくつかの実験を行い、より高い精度を達成できるか試してみてください。 ## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/207) ## 復習と自己学習 -CNNはコンピュータビジョンのタスクで最もよく使用されますが、一般的には固定サイズのパターンを抽出するのに適しています。たとえば、音に関しては、音声信号の特定のパターンを探すためにCNNを使用することもあります。この場合、フィルターは1次元になります(このCNNは1D-CNNと呼ばれます)。また、時には3D-CNNを使用して、ビデオ上で発生する特定のイベントのような多次元空間での特徴を抽出します - CNNは時間の経過に伴う特徴の変化の特定のパターンを捉えることができます。他のタスクについての復習と自己学習を行ってください。 +CNNは主にコンピュータビジョンのタスクで使用されますが、固定サイズのパターンを抽出するのに適しているため、他の用途にも利用できます。例えば、音声を扱う場合、音声信号内の特定のパターンを探すためにCNNを使用することが考えられます。この場合、フィルターは1次元(このCNNは1D-CNNと呼ばれます)になります。また、3D-CNNを使用して、ビデオ内の特定のイベントのような多次元空間の特徴を抽出することもあります。CNNが時間の経過に伴う特徴の変化パターンを捉えることができるのです。他のタスクでCNNがどのように使用されるかについて復習と自己学習を行ってください。 ## [課題](lab/README.md) -このラボでは、異なる猫と犬の品種を分類することが求められます。これらの画像はMNISTデータセットよりも複雑で高次元であり、10クラス以上あります。 +このラボでは、異なる猫と犬の品種を分類するタスクに取り組みます。これらの画像はMNISTデータセットよりも複雑で、次元が高く、クラス数も10以上あります。 **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳にはエラーや不正確さが含まれる可能性があることをご理解ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用から生じる誤解や誤解釈については、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/07-ConvNets/README.md b/translations/ja/lessons/4-ComputerVision/07-ConvNets/README.md index f7894280..f1f43a39 100644 --- a/translations/ja/lessons/4-ComputerVision/07-ConvNets/README.md +++ b/translations/ja/lessons/4-ComputerVision/07-ConvNets/README.md @@ -1,58 +1,67 @@ -# 畳み込みニューラルネットワーク + +# 畳み込みニューラルネットワーク (CNN) -以前に述べたように、ニューラルネットワークは画像処理に非常に優れており、単層パーセプトロンでもMNISTデータセットから手書きの数字を比較的高い精度で認識することができます。しかし、MNISTデータセットは非常に特別で、すべての数字が画像の中央に配置されているため、タスクが簡単になります。 +これまでに、ニューラルネットワークが画像処理に非常に優れていることを見てきました。たとえ1層のパーセプトロンであっても、MNISTデータセットの手書き数字をある程度の精度で認識できることが分かっています。しかし、MNISTデータセットは非常に特殊で、すべての数字が画像の中心に配置されているため、タスクが簡単になっています。 ## [講義前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/107) -実生活では、画像内のオブジェクトの正確な位置に関係なく、それらを認識できるようにしたいと考えています。コンピュータビジョンは一般的な分類とは異なり、特定のオブジェクトを画像内で見つけようとするとき、特定の**パターン**やその組み合わせを探して画像をスキャンしています。たとえば、猫を探しているときは、まずひげを形成する可能性のある水平線を探し、その後、特定のひげの組み合わせがそれが実際には猫の画像であることを教えてくれます。特定のパターンの相対的な位置と存在が重要であり、画像上の正確な位置ではありません。 +現実世界では、画像内の正確な位置に関係なく、写真の中の物体を認識できることが求められます。コンピュータビジョンは一般的な分類とは異なります。なぜなら、写真の中で特定の物体を見つけようとする際、特定の**パターン**やその組み合わせを探すために画像をスキャンするからです。例えば、猫を探す場合、まず水平線を探してヒゲを形成し、その後、特定のヒゲの組み合わせが実際に猫の写真であることを示すかもしれません。特定のパターンの相対的な位置や存在が重要であり、画像上の正確な位置はそれほど重要ではありません。 -パターンを抽出するために、**畳み込みフィルター**の概念を使用します。ご存知のように、画像は2Dマトリックスまたは色深度を持つ3Dテンソルとして表現されます。フィルターを適用することは、比較的小さな**フィルターカーネル**マトリックスを取り、元の画像の各ピクセルに対して隣接するポイントとの加重平均を計算することを意味します。これは、画像全体をスライドする小さなウィンドウのように見え、フィルターカーネルマトリックス内の重みに従ってすべてのピクセルを平均化します。 +パターンを抽出するために、**畳み込みフィルタ**という概念を使用します。ご存知の通り、画像は2次元の行列、または色の深さを持つ3次元テンソルで表されます。フィルタを適用するとは、比較的小さな**フィルタカーネル**行列を使用し、元の画像の各ピクセルに対して隣接する点との加重平均を計算することを意味します。これは、小さなウィンドウが画像全体をスライドし、フィルタカーネル行列の重みに従ってすべてのピクセルを平均化するようなものと考えることができます。 -![垂直エッジフィルター](../../../../../translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.ja.png) | ![水平エッジフィルター](../../../../../translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.ja.png) +![垂直エッジフィルタ](../../../../../translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.ja.png) | ![水平エッジフィルタ](../../../../../translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.ja.png) ----|---- > 画像提供: Dmitry Soshnikov -たとえば、MNISTの数字に3x3の垂直エッジフィルターと水平エッジフィルターを適用すると、元の画像の垂直および水平エッジがある場所にハイライト(例: 高い値)を取得できます。このように、これらの2つのフィルターはエッジを「探す」ために使用できます。同様に、他の低レベルのパターンを探すためのさまざまなフィルターを設計することができます。 +例えば、MNISTの数字に3x3の垂直エッジフィルタと水平エッジフィルタを適用すると、元の画像で垂直および水平のエッジがある場所が強調されます(例: 高い値が得られる)。したがって、これら2つのフィルタはエッジを「探す」ために使用できます。同様に、他の低レベルのパターンを探すための異なるフィルタを設計することも可能です。 -> [Leung-Malikフィルターバンクの画像](https://www.robots.ox.ac.uk/~vgg/research/texclass/filters.html) +> [Leung-Malikフィルタバンクの画像](https://www.robots.ox.ac.uk/~vgg/research/texclass/filters.html) -しかし、手動でパターンを抽出するためのフィルターを設計できる一方で、ネットワークをそのように設計して自動的にパターンを学習させることもできます。これがCNNの背後にある主なアイデアの1つです。 +しかし、フィルタを手動で設計してパターンを抽出することもできますが、ネットワークを設計してパターンを自動的に学習させることも可能です。これがCNNの主要なアイデアの1つです。 -## CNNの背後にある主なアイデア +## CNNの主要なアイデア -CNNの動作は、次の重要なアイデアに基づいています。 +CNNが動作する仕組みは、以下の重要なアイデアに基づいています: -* 畳み込みフィルターはパターンを抽出できる -* フィルターが自動的に訓練されるようにネットワークを設計できる -* 元の画像だけでなく、高レベルの特徴におけるパターンを見つけるためにも同じアプローチを使用できる。したがって、CNNの特徴抽出は、低レベルのピクセルの組み合わせから始まり、画像の部分の高レベルの組み合わせに至る特徴の階層で機能します。 +* 畳み込みフィルタはパターンを抽出できる +* フィルタを自動的に学習するようにネットワークを設計できる +* 元の画像だけでなく、高レベルの特徴においても同じアプローチを使用してパターンを見つけることができる。したがって、CNNの特徴抽出は、低レベルのピクセルの組み合わせから始まり、画像の部分の高レベルの組み合わせに至るまで、特徴の階層構造で機能する。 ![階層的特徴抽出](../../../../../translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.ja.png) -> 画像提供: [Hislop-Lynchによる論文](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d)、[彼らの研究](https://dl.acm.org/doi/abs/10.1145/1553374.1553453)に基づく +> 画像提供: [Hislop-Lynchの論文](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d)、[研究内容](https://dl.acm.org/doi/abs/10.1145/1553374.1553453)に基づく ## ✍️ 演習: 畳み込みニューラルネットワーク -畳み込みニューラルネットワークの動作をさらに探求し、訓練可能なフィルターを実現する方法を理解するために、対応するノートブックを通じて作業しましょう: +畳み込みニューラルネットワークがどのように機能するのか、またトレーニング可能なフィルタをどのように実現できるのかを、以下のノートブックを通じて学びましょう: * [畳み込みニューラルネットワーク - PyTorch](../../../../../lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) * [畳み込みニューラルネットワーク - TensorFlow](../../../../../lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) ## ピラミッドアーキテクチャ -画像処理に使用されるほとんどのCNNは、いわゆるピラミッドアーキテクチャに従います。元の画像に適用される最初の畳み込み層は、通常、比較的少数のフィルター(8-16)を持ち、これは水平/垂直のストロークの線のような異なるピクセルの組み合わせに対応しています。次のレベルでは、ネットワークの空間次元を減少させ、フィルターの数を増やし、これは単純な特徴のより多くの可能な組み合わせに対応します。各層で、最終的な分類器に向かうにつれて、画像の空間次元は減少し、フィルターの数は増加します。 +画像処理に使用されるほとんどのCNNは、いわゆるピラミッドアーキテクチャに従っています。元の画像に適用される最初の畳み込み層は、通常、比較的少ない数のフィルタ(8~16)を持ち、水平/垂直の線やストロークなどの異なるピクセルの組み合わせに対応します。次のレベルでは、ネットワークの空間的次元を縮小し、フィルタの数を増やします。これにより、単純な特徴のより多くの組み合わせが可能になります。各層を進むにつれて、最終的な分類器に近づくにつれ、画像の空間的次元は減少し、フィルタの数は増加します。 -例として、2014年にImageNetのトップ5分類で92.7%の精度を達成したネットワークVGG-16のアーキテクチャを見てみましょう: +例として、2014年にImageNetのトップ5分類で92.7%の精度を達成したVGG-16のアーキテクチャを見てみましょう: -![ImageNet層](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.ja.jpg) +![ImageNetの層](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.ja.jpg) -![ImageNetピラミッド](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.ja.jpg) +![ImageNetのピラミッド](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.ja.jpg) > 画像提供: [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) -## よく知られているCNNアーキテクチャ +## よく知られたCNNアーキテクチャ -[よく知られているCNNアーキテクチャについての学習を続けてください](CNN_Architectures.md) +[よく知られたCNNアーキテクチャについてさらに学びましょう](CNN_Architectures.md) **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文の母国語の文書を権威ある情報源と見なすべきです。重要な情報については、専門の人間翻訳をお勧めします。この翻訳の使用から生じる誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書を正式な情報源としてお考えください。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/ja/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 20c54273..f7d739b1 100644 --- a/translations/ja/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/ja/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,20 +1,29 @@ + # ペットの顔の分類 -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)からのラボ課題。 +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) のラボ課題。 ## 課題 -ペットの保育園のために、すべてのペットをカタログ化するアプリケーションを開発する必要があると想像してください。このようなアプリケーションの素晴らしい機能の一つは、写真から自動的に犬種を特定することです。これは、ニューラルネットワークを使用して成功裏に行うことができます。 +ペットの保育施設向けに、すべてのペットをカタログ化するアプリケーションを開発する必要があると想像してください。このようなアプリケーションの素晴らしい機能の1つは、写真から自動的に品種を特定することです。これはニューラルネットワークを使用することで成功裏に実現できます。 -**Pet Faces**データセットを使用して、異なる犬と猫の犬種を分類するために畳み込みニューラルネットワークを訓練する必要があります。 +**Pet Faces** データセットを使用して、猫と犬のさまざまな品種を分類する畳み込みニューラルネットワークをトレーニングする必要があります。 ## データセット -私たちは、[Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/)のペットデータセットから派生した**Pet Faces**データセットを使用します。このデータセットには、35種類の異なる犬種と猫種が含まれています。 +使用するのは、[Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) ペットデータセットから派生した **Pet Faces** データセットです。このデータセットには、35種類の犬と猫の品種が含まれています。 -![私たちが扱うデータセット](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.ja.png) +![扱うデータセット](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.ja.png) -データセットをダウンロードするには、このコードスニペットを使用してください: +データセットをダウンロードするには、以下のコードスニペットを使用してください: ```python !wget https://mslearntensorflowlp.blob.core.windows.net/data/petfaces.tar.gz @@ -24,11 +33,11 @@ ## ノートブックの開始 -[PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb)を開いてラボを開始します。 +ラボを始めるには、[PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) を開いてください。 -## 学び +## 学びのポイント -あなたは、ゼロから画像分類の比較的複雑な問題を解決しました!クラスがかなり多かったにもかかわらず、合理的な精度を達成することができました!また、トップ-k精度を測定することは意味があります。なぜなら、明確に異ならないいくつかのクラスを人間でさえ混同するのが簡単だからです。 +画像分類という比較的複雑な問題をゼロから解決しましたね!クラスの数がかなり多かったにもかかわらず、合理的な精度を達成できました。また、top-k 精度を測定することも理にかなっています。なぜなら、人間でも明確に区別がつかないクラスを混同するのは簡単だからです。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご注意ください。原文はその母国語において権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書を正式な情報源としてお考えください。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/08-TransferLearning/README.md b/translations/ja/lessons/4-ComputerVision/08-TransferLearning/README.md index 8c67da45..112c6ee2 100644 --- a/translations/ja/lessons/4-ComputerVision/08-TransferLearning/README.md +++ b/translations/ja/lessons/4-ComputerVision/08-TransferLearning/README.md @@ -1,81 +1,90 @@ + # 事前学習済みネットワークと転移学習 -CNNのトレーニングには多くの時間がかかり、そのためには大量のデータが必要です。しかし、多くの時間は、ネットワークが画像からパターンを抽出するために使用できる最適な低レベルフィルターを学習することに費やされます。自然な疑問が生じます - 一つのデータセットで訓練されたニューラルネットワークを使用して、完全なトレーニングプロセスを必要とせずに異なる画像を分類することはできるのでしょうか? +CNNのトレーニングには多くの時間がかかり、膨大なデータが必要です。しかし、ネットワークが画像からパターンを抽出するために使用する最適な低レベルフィルターを学習することに多くの時間が費やされています。そこで自然に生じる疑問は、あるデータセットでトレーニングされたニューラルネットワークを使用して、完全なトレーニングプロセスを必要とせずに異なる画像を分類することができるかどうかです。 ## [事前講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/108) -このアプローチは**転移学習**と呼ばれ、あるニューラルネットワークモデルから別のモデルにいくつかの知識を転送します。転移学習では、通常、大規模な画像データセット(例えば、**ImageNet**)で訓練された事前学習済みモデルから始めます。これらのモデルは、一般的な画像からさまざまな特徴を抽出するのが得意であり、多くの場合、抽出された特徴の上に分類器を構築するだけで良い結果を得ることができます。 +このアプローチは**転移学習**と呼ばれます。これは、あるニューラルネットワークモデルから別のモデルへ知識を転移することを意味します。転移学習では、通常、**ImageNet**のような大規模な画像データセットでトレーニングされた事前学習済みモデルから始めます。これらのモデルはすでに一般的な画像からさまざまな特徴を抽出するのに優れており、多くの場合、それらの抽出された特徴の上に分類器を構築するだけで良い結果が得られます。 -> ✅ 転移学習は、教育などの他の学問分野でも見られる用語です。これは、一つのドメインから知識を取り出し、別のドメインに適用するプロセスを指します。 +> ✅ 転移学習は教育学など他の学問分野でも見られる用語です。ある領域の知識を別の領域に適用するプロセスを指します。 -## 特徴抽出器としての事前学習済みモデル +## 事前学習済みモデルを特徴抽出器として使用する -前のセクションで話した畳み込みネットワークは、いくつかの層を含んでおり、それぞれが画像から特徴を抽出することになっています。低レベルのピクセルの組み合わせ(例えば、水平/垂直の線やストローク)から始まり、炎の目のような高レベルの特徴の組み合わせに至るまでです。一般的で多様な画像の十分に大きなデータセットでCNNを訓練すれば、ネットワークはこれらの共通の特徴を抽出することを学ぶはずです。 +前のセクションで説明した畳み込みネットワークは、画像から特徴を抽出するための複数の層を含んでいます。これらの層は、低レベルのピクセルの組み合わせ(水平線や垂直線、ストロークなど)から始まり、より高レベルの特徴の組み合わせ(炎の目など)に至るまでの特徴を抽出します。十分に大規模で多様な画像データセットでCNNをトレーニングすれば、ネットワークはこれらの共通の特徴を抽出することを学習します。 -KerasとPyTorchの両方には、一般的なアーキテクチャのために事前学習済みのニューラルネットワークの重みを簡単に読み込む関数が含まれており、そのほとんどはImageNetの画像で訓練されています。最もよく使われるものは、前のレッスンの[ CNNアーキテクチャ](../07-ConvNets/CNN_Architectures.md)ページに記載されています。特に、以下のいずれかの使用を検討することをお勧めします。 +KerasとPyTorchには、一般的なアーキテクチャの事前学習済みニューラルネットワークの重みを簡単にロードするための関数が含まれています。これらの多くはImageNet画像でトレーニングされています。最もよく使用されるものは、前のレッスンの[CNNアーキテクチャ](../07-ConvNets/CNN_Architectures.md)ページで説明されています。特に以下のモデルを検討する価値があります: -* **VGG-16/VGG-19**は比較的シンプルなモデルでありながら、良好な精度を提供します。最初の試みとしてVGGを使用することは、転移学習がどのように機能しているかを見る良い選択です。 -* **ResNet**は、2015年にMicrosoft Researchによって提案されたモデルのファミリーです。これらは層が多く、より多くのリソースを必要とします。 -* **MobileNet**は、サイズが縮小されたモデルのファミリーで、モバイルデバイスに適しています。リソースが限られていて、少しの精度を犠牲にできる場合は、これらを使用してください。 +* **VGG-16/VGG-19**:比較的シンプルなモデルでありながら良い精度を提供します。転移学習の動作を確認するための最初の試みとしてVGGを使用するのは良い選択です。 +* **ResNet**:2015年にMicrosoft Researchによって提案されたモデルファミリーです。層が多いため、より多くのリソースを必要とします。 +* **MobileNet**:サイズが縮小されたモデルファミリーで、モバイルデバイスに適しています。リソースが限られていて、多少の精度を犠牲にしても良い場合に使用します。 -以下は、VGG-16ネットワークによって猫の画像から抽出されたサンプル特徴です: +以下は、VGG-16ネットワークによって猫の画像から抽出された特徴の例です: -![VGG-16によって抽出された特徴](../../../../../translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.ja.png) +![VGG-16による特徴抽出](../../../../../translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.ja.png) ## 猫と犬のデータセット -この例では、実際の画像分類シナリオに非常に近い[猫と犬](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste)のデータセットを使用します。 +この例では、[猫と犬](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste)のデータセットを使用します。これは実際の画像分類シナリオに非常に近いものです。 -## ✍️ 演習: 転移学習 +## ✍️ 演習:転移学習 対応するノートブックで転移学習を実際に見てみましょう: * [転移学習 - PyTorch](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) * [転移学習 - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb) -## 敵対的猫の可視化 +## 理想的な猫の可視化 -事前学習済みのニューラルネットワークは、その*脳*の中にさまざまなパターンを含んでおり、**理想的な猫**(理想的な犬、理想的なシマウマなども含む)に関する概念も含まれています。この画像を何らかの形で**可視化する**ことができれば面白いでしょう。しかし、これは簡単ではありません。なぜなら、パターンはネットワークの重み全体に広がっており、また階層構造で整理されているからです。 +事前学習済みニューラルネットワークには、その「脳」の中にさまざまなパターンが含まれており、**理想的な猫**(理想的な犬、理想的なシマウマなど)に関する概念も含まれています。この画像を**可視化**するのは興味深いですが、簡単ではありません。なぜなら、パターンはネットワークの重み全体に広がっており、階層的に構成されているからです。 -取ることができる一つのアプローチは、ランダムな画像から始め、その画像を調整するために**勾配降下最適化**技術を使用して、ネットワークがそれを猫だと考え始めるようにすることです。 +一つのアプローチとして、ランダムな画像から始めて、**勾配降下法**を使用してその画像を調整し、ネットワークがそれを猫だと認識するようにする方法があります。 ![画像最適化ループ](../../../../../translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.ja.png) -しかし、これを行うと、非常にランダムなノイズに似たものが得られます。これは、*ネットワークが入力画像を猫だと思わせる方法がたくさんあるため*であり、視覚的に意味を成さないものも含まれています。これらの画像には猫に典型的なパターンが多く含まれていますが、視覚的に際立たせるための制約がありません。 +しかし、この方法ではランダムノイズに非常に近いものが得られます。これは、*ネットワークが入力画像を猫だと認識する方法が多数存在する*ためであり、その中には視覚的に意味をなさないものも含まれます。これらの画像には猫に典型的な多くのパターンが含まれていますが、視覚的に特徴的であることを制約するものはありません。 -結果を改善するために、**変動損失**と呼ばれる別の項を損失関数に追加できます。これは、画像の隣接するピクセルがどれだけ似ているかを示すメトリックです。変動損失を最小化することで、画像が滑らかになり、ノイズが取り除かれ、より視覚的に魅力的なパターンが明らかになります。以下は、猫およびシマウマとして高い確率で分類されるそのような「理想的な」画像の例です: +結果を改善するために、**変動損失**と呼ばれる項を損失関数に追加することができます。これは、画像の隣接するピクセルがどれだけ似ているかを示す指標です。変動損失を最小化することで画像が滑らかになり、ノイズが除去され、より視覚的に魅力的なパターンが現れます。以下は、猫とシマウマとして高い確率で分類される「理想的な」画像の例です: ![理想的な猫](../../../../../translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.ja.png) | ![理想的なシマウマ](../../../../../translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.ja.png) -----|----- *理想的な猫* | *理想的なシマウマ* -同様のアプローチを使用して、ニューラルネットワークに対する**敵対的攻撃**を実行することができます。例えば、犬を猫のように見せかけたいとします。ネットワークが犬として認識している犬の画像を取り、それを少しだけ勾配降下最適化を使用して調整すれば、ネットワークがそれを猫として分類し始めるまで続けることができます: +同様のアプローチを使用して、ニューラルネットワークに対する**敵対的攻撃**を行うこともできます。例えば、犬を猫のように見せたい場合、ネットワークが犬として認識する犬の画像を取り、それを少し調整して、ネットワークがそれを猫として分類するようにすることができます: ![犬の画像](../../../../../translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.ja.png) | ![猫として分類された犬の画像](../../../../../translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.ja.png) -----|----- -*犬の元の画像* | *猫として分類された犬の画像* +*元の犬の画像* | *猫として分類された犬の画像* -上記の結果を再現するためのコードは、次のノートブックにあります: +上記の結果を再現するコードは以下のノートブックで確認できます: * [理想的な猫と敵対的猫 - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/AdversarialCat_TF.ipynb) ## 結論 -転移学習を使用することで、カスタムオブジェクト分類タスクのための分類器を迅速に構築し、高い精度を達成することができます。現在解決しているより複雑なタスクは、より高い計算能力を必要とし、CPUでは簡単に解決できないことがわかります。次の単元では、より軽量な実装を使用して、同じモデルを低い計算リソースで訓練することを試みます。これにより、わずかに低い精度が得られます。 +転移学習を使用することで、カスタムオブジェクト分類タスクのための分類器を迅速に構築し、高い精度を達成することができます。現在解決しているより複雑なタスクは、より高い計算能力を必要とし、CPUでは簡単に解決できないことがわかります。次のユニットでは、同じモデルを低い計算リソースでトレーニングするための軽量な実装を試み、わずかに精度が低下する結果を得ます。 ## 🚀 チャレンジ -付随するノートブックには、転移知識がやや似たトレーニングデータ(新しい動物の種類など)で最も効果的に機能することについてのメモがあります。まったく新しいタイプの画像で実験を行い、転移知識モデルがどのように機能するかを確認してください。 +付属のノートブックには、転移学習が類似したトレーニングデータ(新しい種類の動物など)で最も効果的に機能するというメモがあります。完全に新しい種類の画像で実験を行い、転移学習モデルがどれほど良く、または悪く機能するかを確認してください。 -## [事後講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) +## [講義後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) -## レビュー & 自習 +## 復習と自己学習 -[TrainingTricks.md](TrainingTricks.md)を読んで、モデルを訓練する他の方法についての知識を深めてください。 +[TrainingTricks.md](TrainingTricks.md)を読み、モデルをトレーニングする他の方法についての知識を深めてください。 ## [課題](lab/README.md) -このラボでは、35種類の猫と犬の品種を含む実際の[Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/)ペットデータセットを使用し、転移学習分類器を構築します。 +このラボでは、実際の[Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/)ペットデータセットを使用し、35種類の猫と犬の品種で転移学習分類器を構築します。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用によって生じる誤解や誤訳に関して、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の言語で記載された原文が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md b/translations/ja/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md index 107ba71b..5fd7fac1 100644 --- a/translations/ja/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md +++ b/translations/ja/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md @@ -1,108 +1,117 @@ -# ディープラーニングのトレーニングテクニック + +# 深層学習のトレーニングのコツ -ニューラルネットワークが深くなるにつれて、そのトレーニングプロセスはますます難しくなります。主な問題の1つは、いわゆる[消失勾配](https://en.wikipedia.org/wiki/Vanishing_gradient_problem)または[爆発勾配](https://deepai.org/machine-learning-glossary-and-terms/exploding-gradient-problem#:~:text=Exploding%20gradients%20are%20a%20problem,updates%20are%20small%20and%20controlled.)です。[この投稿](https://towardsdatascience.com/the-vanishing-exploding-gradient-problem-in-deep-neural-networks-191358470c11)は、これらの問題についての良い紹介を提供しています。 +ニューラルネットワークが深くなるにつれて、そのトレーニングプロセスはますます困難になります。主な問題の一つは、いわゆる[勾配消失](https://en.wikipedia.org/wiki/Vanishing_gradient_problem)や[勾配爆発](https://deepai.org/machine-learning-glossary-and-terms/exploding-gradient-problem#:~:text=Exploding%20gradients%20are%20a%20problem,updates%20are%20small%20and%20controlled.)です。[この投稿](https://towardsdatascience.com/the-vanishing-exploding-gradient-problem-in-deep-neural-networks-191358470c11)はこれらの問題についての良い導入を提供しています。 -深いネットワークのトレーニングをより効率的にするために、いくつかのテクニックを使用できます。 +深いネットワークのトレーニングをより効率的にするために、いくつかの技術を使用することができます。 ## 値を適切な範囲に保つ -数値計算をより安定させるために、ニューラルネットワーク内のすべての値が通常[-1..1]または[0..1]の範囲内にあることを確認したいです。これは非常に厳しい要件ではありませんが、浮動小数点計算の性質上、異なる大きさの値を正確に一緒に操作することはできません。たとえば、10-10と1010を加算すると、1010が得られる可能性が高く、より小さな値は大きな値と同じオーダーに「変換」され、その結果、仮数部が失われます。 +数値計算をより安定させるために、ニューラルネットワーク内のすべての値が通常[-1..1]または[0..1]の範囲内に収まるようにする必要があります。これは非常に厳密な要件ではありませんが、浮動小数点計算の性質上、異なる大きさの値を正確に操作することは困難です。例えば、10-10と1010を足すと、1010になる可能性が高く、小さい値が大きい値と同じオーダーに「変換」され、仮数部が失われるからです。 -ほとんどの活性化関数は[-1..1]の周りに非線形性を持っているため、すべての入力データを[-1..1]または[0..1]の範囲にスケールすることは理にかなっています。 +ほとんどの活性化関数は[-1..1]の範囲で非線形性を持っているため、すべての入力データを[-1..1]または[0..1]の範囲にスケールすることが理にかなっています。 -## 初期重みの初期化 +## 初期の重みの初期化 -理想的には、ネットワークの層を通過した後に値が同じ範囲にあることを望みます。したがって、値の分布を保持するように重みを初期化することが重要です。 +理想的には、ネットワーク層を通過した後も値が同じ範囲内に収まることを望みます。そのため、値の分布を維持するように重みを初期化することが重要です。 -正規分布**N(0,1)**は良いアイデアではありません。なぜなら、*n*個の入力がある場合、出力の標準偏差は*n*になり、値が[0..1]の範囲から外れる可能性が高くなるからです。 +**N(0,1)**の正規分布は良い選択ではありません。なぜなら、入力が*n*個ある場合、出力の標準偏差は*n*となり、値が[0..1]の範囲を超える可能性が高いからです。 以下の初期化方法がよく使用されます: - * 一様分布 -- `uniform` - * **N(0,1/n)** -- `gaussian` - * **N(0,1/√n_in)**は、平均がゼロで標準偏差が1の入力に対して同じ平均/標準偏差を保持することを保証します - * **N(0,√2/(n_in+n_out))** -- いわゆる**Xavier初期化**(`glorot`)は、信号を前向きおよび後ろ向きの伝播中に範囲内に保つのに役立ちます +- 一様分布 -- `uniform` +- **N(0,1/n)** -- `gaussian` +- **N(0,1/√n_in)** -- 入力が平均0、標準偏差1の場合、同じ平均と標準偏差が維持されることを保証 +- **N(0,√2/(n_in+n_out))** -- **Xavier初期化**(`glorot`)、前方および後方伝播中に信号を範囲内に保つのに役立つ ## バッチ正規化 -適切な重みの初期化があっても、トレーニング中に重みが任意に大きくなったり小さくなったりすることがあり、それによって信号が適切な範囲から外れることがあります。**正規化**テクニックの1つを使用することで、信号を戻すことができます。いくつかの方法があります(重みの正規化、層の正規化)が、最もよく使用されるのはバッチ正規化です。 +適切な重みの初期化を行っても、トレーニング中に重みが非常に大きくなったり小さくなったりする可能性があり、それによって信号が適切な範囲を外れることがあります。これを防ぐために、**正規化**技術を使用します。いくつかの方法がありますが(重み正規化、層正規化など)、最もよく使用されるのはバッチ正規化です。 -**バッチ正規化**のアイデアは、ミニバッチ全体のすべての値を考慮し、これらの値に基づいて正規化(すなわち、平均を引き、標準偏差で割る)を行うことです。これは、重みを適用した後、活性化関数の前にこの正規化を行うネットワーク層として実装されます。その結果、最終的な精度が高くなり、トレーニングが速くなることが期待できます。 +**バッチ正規化**のアイデアは、ミニバッチ全体の値を考慮し、それらの値に基づいて正規化(平均を引き、標準偏差で割る)を行うことです。これは、重みを適用した後、活性化関数の前にこの正規化を行うネットワーク層として実装されます。その結果、最終的な精度が向上し、トレーニングが速くなる可能性があります。 -こちらがバッチ正規化に関する[元の論文](https://arxiv.org/pdf/1502.03167.pdf)、[Wikipediaの説明](https://en.wikipedia.org/wiki/Batch_normalization)、および[良い入門ブログ投稿](https://towardsdatascience.com/batch-normalization-in-3-levels-of-understanding-14c2da90a338)(ロシア語のもの[こちら](https://habrahabr.ru/post/309302/))です。 +バッチ正規化に関する[元の論文](https://arxiv.org/pdf/1502.03167.pdf)、[Wikipediaの説明](https://en.wikipedia.org/wiki/Batch_normalization)、および[良い入門ブログ記事](https://towardsdatascience.com/batch-normalization-in-3-levels-of-understanding-14c2da90a338)([ロシア語版](https://habrahabr.ru/post/309302/)もあります)。 ## ドロップアウト -**ドロップアウト**は、トレーニング中にランダムなニューロンの一定割合を削除する興味深いテクニックです。これは、削除するニューロンの割合(通常10%〜50%)という1つのパラメータを持つ層として実装され、トレーニング中に入力ベクトルのランダムな要素をゼロにし、次の層に渡します。 +**ドロップアウト**は、トレーニング中にランダムなニューロンの一定割合を削除する興味深い技術です。これは、1つのパラメータ(削除するニューロンの割合、通常10%-50%)を持つ層として実装され、トレーニング中に入力ベクトルのランダムな要素をゼロにして次の層に渡します。 -これは奇妙なアイデアのように思えるかもしれませんが、MNIST数字分類器のトレーニングにおけるドロップアウトの効果を[`Dropout.ipynb`](../../../../../lessons/4-ComputerVision/08-TransferLearning/Dropout.ipynb)ノートブックで見ることができます。これはトレーニングを加速し、より少ないエポックで高い精度を達成することを可能にします。 +一見奇妙なアイデアのように思えるかもしれませんが、MNIST数字分類器のトレーニングにおけるドロップアウトの効果を[`Dropout.ipynb`](../../../../../lessons/4-ComputerVision/08-TransferLearning/Dropout.ipynb)ノートブックで確認できます。トレーニングを高速化し、少ないトレーニングエポックでより高い精度を達成することができます。 -この効果はいくつかの方法で説明できます: +この効果は以下のように説明できます: - * モデルに対するランダムなショック要因と見なすことができ、最適化が局所最小値から外れることを助けます - * ドロップアウト中にわずかに異なるモデルをトレーニングしていると考えることができるため、*暗黙のモデル平均化*として見なすことができます +- モデルにランダムなショックを与える要因と考えられ、局所的な最小値から最適化を引き離す +- *暗黙的なモデル平均化*と考えられ、ドロップアウト中にわずかに異なるモデルをトレーニングしていると言える -> *酔っ払った人が何かを学ぼうとすると、次の朝にはそれをよりよく覚えていると言う人もいます。これは、いくつかの故障したニューロンを持つ脳が意味を把握するためによりよく適応しようとするからだとされています。私たちはこれが真実かどうか自分たちでテストしたことはありません。* +> *酔っ払った人が何かを学ぼうとすると、翌朝にはしらふの人よりもよく覚えていると言う人もいます。これは、機能していないニューロンを持つ脳が意味をつかむためにより適応しようとするからだと言われています。これが本当かどうかは私たち自身で試したことはありません。* ## 過学習の防止 -ディープラーニングの非常に重要な側面の1つは、[過学習](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)を防ぐことができることです。非常に強力なニューラルネットワークモデルを使用したくなるかもしれませんが、モデルパラメータの数とトレーニングサンプルの数を常にバランスさせるべきです。 +深層学習の非常に重要な側面の一つは、[過学習](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)を防ぐ能力です。非常に強力なニューラルネットワークモデルを使用する誘惑に駆られるかもしれませんが、モデルのパラメータ数とトレーニングサンプル数のバランスを常に取る必要があります。 -> 以前に紹介した[過学習](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)の概念を理解していることを確認してください! +> 以前紹介した[過学習](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)の概念を理解していることを確認してください! 過学習を防ぐ方法はいくつかあります: - * 早期停止 -- 検証セットのエラーを継続的に監視し、検証エラーが増加し始めたらトレーニングを停止します。 - * 明示的な重みの減衰 / 正則化 -- 高い絶対値の重みに対して損失関数に追加のペナルティを加えることで、モデルが非常に不安定な結果を得るのを防ぎます - * モデル平均化 -- 複数のモデルをトレーニングし、その結果を平均化します。これにより、分散を最小限に抑えることができます。 - * ドロップアウト(暗黙のモデル平均化) +- 早期停止 -- 検証セットのエラーを継続的に監視し、検証エラーが増加し始めたらトレーニングを停止 +- 明示的な重み減衰 / 正則化 -- 重みの絶対値が高い場合に損失関数に追加のペナルティを加えることで、モデルが非常に不安定な結果を得るのを防ぐ +- モデル平均化 -- 複数のモデルをトレーニングし、その結果を平均化することで分散を最小化 +- ドロップアウト(暗黙的なモデル平均化) -## 最適化アルゴリズム / トレーニングアルゴリズム +## オプティマイザー / トレーニングアルゴリズム -トレーニングのもう1つの重要な側面は、良いトレーニングアルゴリズムを選ぶことです。古典的な**勾配降下法**は合理的な選択ですが、時には遅すぎたり、他の問題を引き起こしたりすることがあります。 +トレーニングにおいて重要な側面の一つは、適切なトレーニングアルゴリズムを選択することです。古典的な**勾配降下法**は合理的な選択ですが、時には遅すぎたり、他の問題を引き起こすことがあります。 -ディープラーニングでは、**確率的勾配降下法**(SGD)を使用します。これは、トレーニングセットからランダムに選択されたミニバッチに適用された勾配降下法です。重みはこの式を使用して調整されます: +深層学習では、**確率的勾配降下法**(SGD)を使用します。これは、トレーニングセットからランダムに選択されたミニバッチに対して勾配降下法を適用するものです。重みは以下の式で調整されます: wt+1 = wt - η∇ℒ -### モーメンタム +### モメンタム -**モーメンタムSGD**では、前のステップからの勾配の一部を保持します。これは、どこかに慣性を持って移動しているときに、異なる方向にパンチを受けたときに、軌道がすぐに変わらず、元の動きの一部を保持するのに似ています。ここで、*速度*を表す別のベクトルvを導入します: +**モメンタムSGD**では、以前のステップからの勾配の一部を保持します。これは、慣性を持って移動しているときに、異なる方向から衝撃を受けても軌道がすぐには変わらず、元の動きの一部を保持するのに似ています。ここでは、速度を表す別のベクトルvを導入します: -* vt+1 = γ vt - η∇ℒ -* wt+1 = wt+vt+1 +- vt+1 = γ vt - η∇ℒ +- wt+1 = wt+vt+1 -ここで、パラメータγは、慣性を考慮する程度を示します:γ=0は古典的なSGDに対応し、γ=1は純粋な運動方程式です。 +ここで、パラメータγは慣性をどの程度考慮するかを示します:γ=0は古典的なSGDに対応し、γ=1は純粋な運動方程式です。 ### Adam、Adagradなど -各層で信号をいくつかの行列Wiで掛け算するため、勾配は減少して0に近づくか、無限に増加することがあります。これは、爆発/消失勾配問題の本質です。 +各層で信号を行列Wiで乗算するため、||Wi||に応じて勾配が0に近づいたり、無限に増加したりする可能性があります。これが勾配爆発/消失問題の本質です。 -この問題の解決策の1つは、方程式で勾配の方向のみを使用し、絶対値を無視することです。すなわち、 +この問題の解決策の一つは、式において勾配の方向のみを使用し、絶対値を無視することです。つまり、 -wt+1 = wt - η(∇ℒ/||∇ℒ||)、ここで||∇ℒ|| = √∑(∇ℒ)2 +wt+1 = wt - η(∇ℒ/||∇ℒ||), ここで ||∇ℒ|| = √∑(∇ℒ)2 -このアルゴリズムは**Adagrad**と呼ばれます。同じアイデアを使用する別のアルゴリズムには、**RMSProp**、**Adam**があります。 +このアルゴリズムは**Adagrad**と呼ばれます。同じアイデアを使用する他のアルゴリズムには、**RMSProp**、**Adam**があります。 -> **Adam**は多くのアプリケーションにとって非常に効率的なアルゴリズムと見なされているため、どれを使用するかわからない場合は、Adamを使用してください。 +> **Adam**は多くのアプリケーションで非常に効率的なアルゴリズムと考えられているため、どれを使用するか迷った場合はAdamを選択してください。 ### 勾配クリッピング -勾配クリッピングは、上記のアイデアの拡張です。||∇ℒ|| ≤ θのとき、重みの最適化において元の勾配を考慮し、||∇ℒ|| > θのときは勾配をそのノルムで割ります。ここでθはパラメータであり、ほとんどの場合、θ=1またはθ=10を選ぶことができます。 +勾配クリッピングは上記のアイデアの拡張です。||∇ℒ|| ≤ θの場合、元の勾配を重みの最適化に使用し、||∇ℒ|| > θの場合は勾配をそのノルムで割ります。ここでθはパラメータであり、ほとんどの場合θ=1またはθ=10を使用できます。 ### 学習率の減衰 -トレーニングの成功は、学習率パラメータηに依存することがよくあります。ηの大きな値がトレーニングを速くすることを想定するのは論理的であり、これは通常トレーニングの初期に望まれるもので、次に小さな値のηがネットワークを微調整するのを可能にします。したがって、ほとんどの場合、トレーニングの過程でηを減少させたいと思います。 +トレーニングの成功は学習率パラメータηに依存することがよくあります。ηの大きな値はトレーニングを速くする傾向があり、これはトレーニングの初期段階で望ましいものですが、ηの小さい値はネットワークを微調整するのに役立ちます。そのため、ほとんどの場合、トレーニングの過程でηを減少させたいと考えます。 -これは、各エポックのトレーニング後にηを何らかの数(例えば0.98)で掛けるか、より複雑な**学習率スケジュール**を使用することで実現できます。 +これは、各エポックの後にηをある数(例:0.98)で乗算することで行うことができます。または、より複雑な**学習率スケジュール**を使用することもできます。 ## 異なるネットワークアーキテクチャ -問題に適したネットワークアーキテクチャを選択することは難しい場合があります。通常、特定のタスク(または類似のタスク)に対して実績のあるアーキテクチャを選びます。ここにコンピュータビジョンのためのニューラルネットワークアーキテクチャの[良い概要](https://www.topbots.com/a-brief-history-of-neural-network-architectures/)があります。 +問題に適したネットワークアーキテクチャを選択することは難しい場合があります。通常、特定のタスク(または類似のタスク)でうまく機能することが証明されているアーキテクチャを選択します。こちらにコンピュータビジョン用のニューラルネットワークアーキテクチャの[良い概要](https://www.topbots.com/a-brief-history-of-neural-network-architectures/)があります。 -> トレーニングサンプルの数に対して十分な力を持つアーキテクチャを選択することが重要です。あまりにも強力なモデルを選択すると、[過学習](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)を引き起こす可能性があります。 +> トレーニングサンプル数に対して十分に強力なアーキテクチャを選択することが重要です。あまりに強力なモデルを選択すると[過学習](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)を引き起こす可能性があります。 -もう1つの良い方法は、必要な複雑さに自動的に調整されるアーキテクチャを使用することです。ある程度、**ResNet**アーキテクチャと**Inception**は自己調整型です。[コンピュータビジョンアーキテクチャに関する詳細](../07-ConvNets/CNN_Architectures.md)をご覧ください。 +もう一つの良い方法は、必要な複雑さに自動的に調整されるアーキテクチャを使用することです。ある程度、**ResNet**アーキテクチャや**Inception**は自己調整型です。[コンピュータビジョンアーキテクチャについての詳細](../07-ConvNets/CNN_Architectures.md)。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳をお勧めします。この翻訳の使用によって生じた誤解や誤訳に対して、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/08-TransferLearning/lab/README.md b/translations/ja/lessons/4-ComputerVision/08-TransferLearning/lab/README.md index 4646edce..2c01e265 100644 --- a/translations/ja/lessons/4-ComputerVision/08-TransferLearning/lab/README.md +++ b/translations/ja/lessons/4-ComputerVision/08-TransferLearning/lab/README.md @@ -1,16 +1,25 @@ -# 転移学習を用いたオックスフォードのペットの分類 + +# 転移学習を用いたOxford Petsの分類 -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)からのラボ課題。 +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)のラボ課題。 ## 課題 -ペットの保育園のために、すべてのペットをカタログ化するアプリケーションを開発する必要があると想像してください。そのようなアプリケーションの素晴らしい機能の一つは、写真から自動的に犬種を発見することです。この課題では、転移学習を使用して、[Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/)ペットデータセットの実際のペット画像を分類します。 +ペットの保育園向けに、すべてのペットをカタログ化するアプリケーションを開発する必要があると想像してください。このアプリケーションの素晴らしい機能の1つは、写真から自動的に品種を判別することです。この課題では、転移学習を使用して、[Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/)ペットデータセットから実際のペット画像を分類します。 ## データセット -35種類の犬と猫の異なる犬種を含む、元の[Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/)ペットデータセットを使用します。 +使用するのは、35種類の犬と猫の品種を含むオリジナルの[Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/)ペットデータセットです。 -データセットをダウンロードするには、次のコードスニペットを使用してください: +データセットをダウンロードするには、以下のコードスニペットを使用してください: ```python !wget https://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz @@ -18,13 +27,13 @@ !rm images.tar.gz ``` -## ノートブックの準備 +## ノートブックの開始 -[OxfordPets.ipynb](../../../../../../lessons/4-ComputerVision/08-TransferLearning/lab/OxfordPets.ipynb)を開いてラボを開始します。 +ラボを始めるには、[OxfordPets.ipynb](../../../../../../lessons/4-ComputerVision/08-TransferLearning/lab/OxfordPets.ipynb)を開いてください。 -## まとめ +## 学びのポイント -転移学習と事前学習済みネットワークを使用することで、実世界の画像分類問題を比較的簡単に解決できます。しかし、事前学習済みネットワークは類似の種類の画像に対してうまく機能し、非常に異なる画像(例えば、医療画像)を分類し始めると、結果が大幅に悪化する可能性があります。 +転移学習と事前学習済みネットワークを使用することで、現実世界の画像分類問題を比較的簡単に解決できます。ただし、事前学習済みネットワークは、似た種類の画像に対してはうまく機能しますが、非常に異なる種類の画像(例:医療画像)を分類し始めると、結果が大幅に悪化する可能性があります。 **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/09-Autoencoders/README.md b/translations/ja/lessons/4-ComputerVision/09-Autoencoders/README.md index 2216e8ab..23d85943 100644 --- a/translations/ja/lessons/4-ComputerVision/09-Autoencoders/README.md +++ b/translations/ja/lessons/4-ComputerVision/09-Autoencoders/README.md @@ -1,100 +1,109 @@ + # オートエンコーダー -CNNを訓練する際の問題の一つは、多くのラベル付きデータが必要であることです。画像分類の場合、画像を異なるクラスに分ける必要があり、これは手作業で行う作業です。 +CNNをトレーニングする際の問題の一つは、大量のラベル付きデータが必要になることです。画像分類の場合、画像を異なるクラスに分ける必要があり、これは手作業で行う必要があります。 -## [プレ講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/109) +## [事前講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/109) -しかし、CNNの特徴抽出器を訓練するために、生の(ラベルなしの)データを使用したい場合があります。これを**自己教師あり学習**と呼びます。ラベルの代わりに、訓練画像をネットワークの入力と出力の両方として使用します。**オートエンコーダー**の主なアイデアは、入力画像を何らかの**潜在空間**(通常はより小さなサイズのベクトル)に変換する**エンコーダーネットワーク**を持ち、その後に元の画像を再構築することを目的とした**デコーダーネットワーク**を持つことです。 +しかし、CNNの特徴抽出器をトレーニングする際に、生データ(ラベルなしデータ)を使用したい場合があります。これを**自己教師あり学習**と呼びます。ラベルの代わりに、トレーニング画像をネットワークの入力と出力の両方として使用します。**オートエンコーダー**の主なアイデアは、入力画像を**潜在空間**(通常は小さなサイズのベクトル)に変換する**エンコーダーネットワーク**を持ち、その後、元の画像を再構築することを目指す**デコーダーネットワーク**を使用することです。 > ✅ [オートエンコーダー](https://wikipedia.org/wiki/Autoencoder)は「ラベルなしデータの効率的なコーディングを学習するために使用される人工ニューラルネットワークの一種」です。 -オートエンコーダーを訓練して元の画像からできるだけ多くの情報をキャプチャし、正確に再構築するために、ネットワークは入力画像の最適な**埋め込み**を見つけようとします。 +オートエンコーダーをトレーニングする際、元の画像から可能な限り多くの情報を正確に再構築するためにキャプチャしようとするため、ネットワークは入力画像の意味を捉える最適な**埋め込み**を見つけようとします。 -![AutoEncoder Diagram](../../../../../translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.ja.jpg) +![オートエンコーダーの図](../../../../../translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.ja.jpg) -> 画像は[Kerasブログ](https://blog.keras.io/building-autoencoders-in-keras.html)から +> 画像提供:[Kerasブログ](https://blog.keras.io/building-autoencoders-in-keras.html) ## オートエンコーダーの使用シナリオ -元の画像を再構築すること自体は有用ではないように思えるかもしれませんが、オートエンコーダーが特に役立つシナリオがいくつかあります: +元の画像を再構築すること自体はあまり有用ではないように思えますが、オートエンコーダーが特に役立ついくつかのシナリオがあります: -* **視覚化のための画像の次元削減**または**画像埋め込みの訓練**。通常、オートエンコーダーはPCAよりも優れた結果を提供します。なぜなら、画像の空間的な特性と階層的な特徴を考慮に入れるからです。 -* **ノイズ除去**、すなわち画像からノイズを取り除くこと。ノイズは多くの無駄な情報を含んでいるため、オートエンコーダーはそれを比較的小さな潜在空間にフィットさせることができず、したがって画像の重要な部分のみをキャプチャします。ノイズ除去器を訓練する際は、元の画像から始め、人工的にノイズを追加した画像をオートエンコーダーの入力として使用します。 -* **超解像**、画像の解像度を上げること。高解像度の画像から始め、低解像度の画像をオートエンコーダーの入力として使用します。 -* **生成モデル**。オートエンコーダーを訓練した後、デコーダー部分を使用してランダムな潜在ベクトルから新しいオブジェクトを生成できます。 +* **画像の次元を下げて可視化する**、または**画像埋め込みをトレーニングする**。通常、オートエンコーダーはPCAよりも良い結果をもたらします。これは、画像の空間的な性質や階層的な特徴を考慮するためです。 +* **ノイズ除去**、つまり画像からノイズを取り除くこと。ノイズは多くの無駄な情報を含むため、オートエンコーダーは比較的小さな潜在空間にすべてを収めることができず、画像の重要な部分のみをキャプチャします。ノイズ除去器をトレーニングする際には、元の画像を使用し、人工的にノイズを追加した画像をオートエンコーダーの入力として使用します。 +* **超解像**、画像の解像度を向上させること。高解像度の画像を使用し、低解像度の画像をオートエンコーダーの入力として使用します。 +* **生成モデル**。オートエンコーダーをトレーニングした後、デコーダー部分を使用してランダムな潜在ベクトルから新しいオブジェクトを作成することができます。 -## 変分オートエンコーダー(VAE) +## 変分オートエンコーダー (VAE) -従来のオートエンコーダーは、入力データの次元を何らかの方法で削減し、入力画像の重要な特徴を見つけ出します。しかし、潜在ベクトルはあまり意味を持たないことが多いです。言い換えれば、MNISTデータセットを例に取ると、異なる潜在ベクトルにどの数字が対応するかを見つけることは簡単ではありません。なぜなら、近い潜在ベクトルが必ずしも同じ数字に対応するわけではないからです。 +従来のオートエンコーダーは、入力データの次元を何らかの方法で削減し、入力画像の重要な特徴を見つけます。しかし、潜在ベクトルはあまり意味を持たないことがよくあります。例えば、MNISTデータセットを例にとると、異なる潜在ベクトルがどの数字に対応するかを理解するのは簡単ではありません。近い潜在ベクトルが必ずしも同じ数字に対応するわけではないからです。 -一方、*生成的*モデルを訓練するには、潜在空間についての理解がある方が良いです。このアイデアは**変分オートエンコーダー**(VAE)につながります。 +一方で、*生成*モデルをトレーニングするには、潜在空間を理解する方が望ましいです。このアイデアが**変分オートエンコーダー** (VAE) につながります。 -VAEは、潜在パラメータの*統計分布*を予測することを学習するオートエンコーダーで、これを**潜在分布**と呼びます。例えば、潜在ベクトルが平均zmeanと標準偏差zsigma(平均と標準偏差は次元dのベクトルです)で正規分布するようにしたい場合があります。VAEのエンコーダーはこれらのパラメータを予測することを学習し、デコーダーはこの分布からランダムなベクトルを取り出してオブジェクトを再構築します。 +VAEは、潜在パラメータの*統計分布*、いわゆる**潜在分布**を予測することを学習するオートエンコーダーです。例えば、潜在ベクトルが平均zmeanと標準偏差zsigma(どちらも次元dのベクトル)を持つ正規分布に従うようにしたい場合があります。VAEのエンコーダーはこれらのパラメータを予測し、デコーダーはこの分布からランダムなベクトルを取り出してオブジェクトを再構築します。 -要約すると: +まとめると: -* 入力ベクトルから、`z_mean`と`z_log_sigma`を予測します(標準偏差そのものを予測するのではなく、その対数を予測します) -* 分布N(zmean,exp(zlog\_sigma))からベクトル`sample`をサンプリングします -* デコーダーは`sample`を入力ベクトルとして使用して元の画像をデコードしようとします + * 入力ベクトルから`z_mean`と`z_log_sigma`を予測します(標準偏差そのものではなく、その対数を予測します) + * 分布N(zmean,exp(zlog_sigma))からベクトル`sample`をサンプリングします + * デコーダーは`sample`を入力ベクトルとして使用して元の画像をデコードしようとします - + -> 画像は[このブログ投稿](https://ijdykeman.github.io/ml/2016/12/21/cvae.html)のIsaak Dykemanによるものです +> 画像提供:[Isaak Dykemanのブログ記事](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) 変分オートエンコーダーは、2つの部分からなる複雑な損失関数を使用します: -* **再構築損失**は、再構築された画像がターゲットにどれだけ近いかを示す損失関数です(これは平均二乗誤差、またはMSEになることがあります)。これは通常のオートエンコーダーと同じ損失関数です。 -* **KL損失**は、潜在変数の分布が正規分布に近いことを保証します。これは、2つの統計分布がどれだけ似ているかを推定するためのメトリックである[Kullback-Leiblerダイバージェンス](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained)に基づいています。 +* **再構築損失**は、再構築された画像がターゲットにどれだけ近いかを示す損失関数です(平均二乗誤差、MSEなど)。通常のオートエンコーダーと同じ損失関数です。 +* **KL損失**は、潜在変数分布が正規分布に近い状態を維持することを保証します。[Kullback-Leiblerダイバージェンス](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained)という概念に基づいており、2つの統計分布がどれだけ似ているかを推定する指標です。 -VAEの重要な利点の一つは、潜在ベクトルをサンプリングするための分布がわかっているため、新しい画像を比較的簡単に生成できることです。例えば、MNIST上で2D潜在ベクトルを持つVAEを訓練すると、潜在ベクトルの成分を変化させることで異なる数字を得ることができます: +VAEの重要な利点の一つは、潜在ベクトルをサンプリングする分布が分かっているため、新しい画像を比較的簡単に生成できることです。例えば、MNISTで2次元の潜在ベクトルを使用してVAEをトレーニングした場合、潜在ベクトルの成分を変化させることで異なる数字を得ることができます: vaemnist -> 画像は[Dmitry Soshnikov](http://soshnikov.com)によるものです +> 画像提供:[Dmitry Soshnikov](http://soshnikov.com) -異なる潜在パラメータ空間の部分から潜在ベクトルを取得し始めると、画像がどのように融合するかを観察してください。また、この空間を2Dで視覚化することもできます: +画像がどのように互いにブレンドされるかを観察してください。潜在パラメータ空間の異なる部分から潜在ベクトルを取得し始めると、画像が変化していきます。この空間を2次元で可視化することもできます: vaemnist cluster -> 画像は[Dmitry Soshnikov](http://soshnikov.com)によるものです +> 画像提供:[Dmitry Soshnikov](http://soshnikov.com) ## ✍️ 演習:オートエンコーダー -オートエンコーダーについてさらに学ぶには、以下のノートブックを参照してください: +以下の対応するノートブックでオートエンコーダーについてさらに学びましょう: -* [TensorFlowにおけるオートエンコーダー](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) -* [PyTorchにおけるオートエンコーダー](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) +* [TensorFlowでのオートエンコーダー](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) +* [PyTorchでのオートエンコーダー](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) ## オートエンコーダーの特性 -* **データ特異的** - 訓練された画像のタイプに対してのみ良好に機能します。例えば、花に対して超解像ネットワークを訓練すると、ポートレートにはうまく機能しません。これは、ネットワークが訓練データセットから学習した特徴の詳細を取り入れて高解像度画像を生成できるからです。 -* **損失あり** - 再構築された画像は元の画像と同じではありません。損失の性質は、訓練中に使用される*損失関数*によって定義されます。 +* **データ特化型** - トレーニングした画像の種類にのみ適しています。例えば、花の超解像ネットワークをトレーニングした場合、ポートレートにはうまく機能しません。これは、ネットワークがトレーニングデータセットから学習した特徴を使用して細かい詳細を取り込むことで高解像度画像を生成するためです。 +* **損失あり** - 再構築された画像は元の画像と同じではありません。損失の性質はトレーニング中に使用される*損失関数*によって定義されます。 * **ラベルなしデータ**で動作します。 -## [ポスト講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/209) +## [事後講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/209) ## 結論 -このレッスンでは、AI科学者が利用できるさまざまな種類のオートエンコーダーについて学びました。オートエンコーダーを構築する方法や、画像を再構築するためにそれらを使用する方法についても学びました。また、VAEについて、そしてそれを使用して新しい画像を生成する方法についても学びました。 +このレッスンでは、AI研究者が利用できるさまざまな種類のオートエンコーダーについて学びました。それらを構築する方法や、画像を再構築するための使用方法について学びました。また、VAEについて学び、それを使用して新しい画像を生成する方法も学びました。 ## 🚀 チャレンジ -このレッスンでは、画像に対するオートエンコーダーの使用について学びました。しかし、オートエンコーダーは音楽にも使用できます!オートエンコーダーを使用して音楽を再構築する方法を学ぶMagentaプロジェクトの[MusicVAE](https://magenta.tensorflow.org/music-vae)プロジェクトをチェックしてみてください。このライブラリでいくつかの[実験](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb)を行い、何を作成できるか見てみましょう。 +このレッスンでは、画像にオートエンコーダーを使用する方法について学びました。しかし、音楽にも使用できます!Magentaプロジェクトの[MusicVAE](https://magenta.tensorflow.org/music-vae)プロジェクトをチェックしてみてください。このプロジェクトでは、オートエンコーダーを使用して音楽を再構築する方法を学習します。このライブラリを使用して[実験](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb)を行い、何が作れるか試してみてください。 -## [ポスト講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) +## [事後講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) -## レビュー & 自習 +## 復習と自己学習 -参考のために、オートエンコーダーについてさらに読むには以下のリソースを参照してください: +参考として、以下のリソースでオートエンコーダーについてさらに学びましょう: -* [Kerasでのオートエンコーダーの構築](https://blog.keras.io/building-autoencoders-in-keras.html) -* [NeuroHiveのブログ投稿](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/) -* [変分オートエンコーダーの説明](https://kvfrans.com/variational-autoencoders-explained/) +* [Kerasでオートエンコーダーを構築する](https://blog.keras.io/building-autoencoders-in-keras.html) +* [NeuroHiveのブログ記事](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/) +* [変分オートエンコーダーの解説](https://kvfrans.com/variational-autoencoders-explained/) * [条件付き変分オートエンコーダー](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) ## 課題 -[TensorFlowを使用したこのノートブック](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb)の最後に「タスク」があります。これを課題として使用してください。 +[TensorFlowを使用したこのノートブック](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb)の最後に「タスク」があります - これを課題として使用してください。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご承知おきください。原文はその母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用から生じる誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書を正式な情報源としてお考えください。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/10-GANs/README.md b/translations/ja/lessons/4-ComputerVision/10-GANs/README.md index 341963e5..219c2c9d 100644 --- a/translations/ja/lessons/4-ComputerVision/10-GANs/README.md +++ b/translations/ja/lessons/4-ComputerVision/10-GANs/README.md @@ -1,101 +1,110 @@ -# 敵対的生成ネットワーク + +# 敵対的生成ネットワーク (Generative Adversarial Networks) -前のセクションでは、**生成モデル**について学びました。これは、トレーニングデータセットにある画像に似た新しい画像を生成できるモデルです。VAEは生成モデルの良い例でした。 +前のセクションでは、**生成モデル**について学びました。これは、トレーニングデータセットに似た新しい画像を生成できるモデルです。VAEは生成モデルの良い例でした。 -## [プレ講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/110) +## [事前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/110) -しかし、VAEを使用して、適切な解像度の意味のあるもの、例えば絵画を生成しようとすると、トレーニングがうまく収束しないことがわかります。このユースケースに対しては、生成モデルに特化した別のアーキテクチャ、すなわち**敵対的生成ネットワーク**、またはGANについて学ぶ必要があります。 +しかし、VAEを使って合理的な解像度の絵画のような本当に意味のあるものを生成しようとすると、トレーニングがうまく収束しないことがわかります。このようなケースでは、生成モデルに特化した別のアーキテクチャである**敵対的生成ネットワーク (Generative Adversarial Networks, GANs)** を学ぶ必要があります。 -GANの主なアイデアは、互いに競い合う二つのニューラルネットワークを持つことです。 +GANの主なアイデアは、2つのニューラルネットワークを互いに競わせながらトレーニングすることです。 -> 画像提供者: [Dmitry Soshnikov](http://soshnikov.com) +> 画像提供: [Dmitry Soshnikov](http://soshnikov.com) -> ✅ 用語集: -> * **ジェネレーター**は、ランダムなベクトルを受け取り、結果として画像を生成するネットワークです。 -> * **ディスクリミネーター**は、画像を受け取り、それが実際の画像(トレーニングデータセットからの)であるか、ジェネレーターによって生成されたものであるかを判断するネットワークです。これは本質的に画像分類器です。 +> ✅ 用語解説: +> * **Generator (生成器)**: ランダムなベクトルを入力として受け取り、画像を生成するネットワーク +> * **Discriminator (識別器)**: 画像を入力として受け取り、それがトレーニングデータセットからの実際の画像か、生成器によって生成された画像かを判定するネットワーク。本質的には画像分類器です。 -### ディスクリミネーター +### 識別器 (Discriminator) -ディスクリミネーターのアーキテクチャは、通常の画像分類ネットワークと異なりません。最も簡単な場合、完全接続の分類器であることもありますが、ほとんどの場合は[畳み込みネットワーク](../07-ConvNets/README.md)になるでしょう。 +識別器のアーキテクチャは、通常の画像分類ネットワークと大差ありません。最も単純な場合、完全結合型の分類器として設計できますが、通常は[畳み込みネットワーク](../07-ConvNets/README.md)が使用されます。 -> ✅ 畳み込みネットワークに基づくGANは[DCGAN](https://arxiv.org/pdf/1511.06434.pdf)と呼ばれます。 +> ✅ 畳み込みネットワークに基づくGANは、[DCGAN](https://arxiv.org/pdf/1511.06434.pdf) と呼ばれます。 -CNNディスクリミネーターは、以下の層で構成されています:いくつかの畳み込み+プーリング(空間サイズが減少する)と、"特徴ベクトル"を得るための1つ以上の完全接続層、最後にバイナリ分類器です。 +CNNベースの識別器は以下のような層で構成されます: 複数の畳み込み+プーリング層(空間サイズを縮小)と、1つ以上の完全結合層で「特徴ベクトル」を取得し、最終的に2値分類器を構築します。 -> ✅ この文脈での「プーリング」とは、画像のサイズを減少させる技術です。「プーリング層は、1層のニューロンクラスターの出力を次の層の単一のニューロンに結合することによってデータの次元を減少させます。」 - [出典](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers) +> ✅ 「プーリング」とは、画像のサイズを縮小する技術です。「プーリング層は、ある層のニューロンクラスターの出力を次の層の1つのニューロンに結合することで、データの次元を削減します。」 - [出典](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers) -### ジェネレーター +### 生成器 (Generator) -ジェネレーターは少し複雑です。逆のディスクリミネーターと考えることができます。潜在ベクトル(特徴ベクトルの代わりに)から始まり、必要なサイズ/形状に変換するための完全接続層があり、その後に逆畳み込み+アップスケーリングが続きます。これは[オートエンコーダ](../09-Autoencoders/README.md)のデコーダ部分に似ています。 +生成器は少し複雑です。識別器を逆にしたものと考えることができます。潜在ベクトル(特徴ベクトルの代わり)から始まり、完全結合層で必要なサイズ/形状に変換し、その後に逆畳み込み+アップスケーリングを行います。これは[オートエンコーダ](../09-Autoencoders/README.md)の*デコーダ*部分に似ています。 -> ✅ 畳み込み層が画像を横断する線形フィルターとして実装されるため、逆畳み込みは本質的に畳み込みに似ており、同じ層のロジックを使用して実装できます。 +> ✅ 畳み込み層が画像を走査する線形フィルタとして実装されるため、逆畳み込みは本質的に畳み込みと似ており、同じ層のロジックを使用して実装できます。 -> 画像提供者: [Dmitry Soshnikov](http://soshnikov.com) +> 画像提供: [Dmitry Soshnikov](http://soshnikov.com) ### GANのトレーニング -GANは**敵対的**と呼ばれます。なぜなら、ジェネレーターとディスクリミネーターの間に常に競争があるからです。この競争の間に、ジェネレーターとディスクリミネーターの両方が改善され、ネットワークはより良い画像を生成することを学びます。 +GANが**敵対的**と呼ばれるのは、生成器と識別器の間で常に競争が行われるためです。この競争を通じて、生成器と識別器の両方が改善され、ネットワークはより良い画像を生成する方法を学びます。 -トレーニングは二段階で行われます: +トレーニングは2つのステージで行われます: -* **ディスクリミネーターのトレーニング**。このタスクは非常に単純です:ジェネレーターによって画像のバッチを生成し、それに0というラベルを付け(これは偽の画像を意味します)、入力データセットから画像のバッチを取得します(1というラベル、実際の画像)。これにより、*ディスクリミネーター損失*を得て、バックプロパゲーションを行います。 -* **ジェネレーターのトレーニング**。これは少し複雑です。なぜなら、ジェネレーターの期待される出力を直接知ることができないからです。ジェネレーターの後にディスクリミネーターが続く全体のGANネットワークを取り、いくつかのランダムベクトルを入力し、結果が1(実際の画像に対応)になることを期待します。その後、ディスクリミネーターのパラメータを固定します(このステップでトレーニングされることは望ましくありません)し、バックプロパゲーションを行います。 +* **識別器のトレーニング**: このタスクは比較的簡単です。生成器によって生成された画像のバッチを生成し、それにラベル0(偽画像)を付け、入力データセットからの画像バッチ(ラベル1、実画像)を使用します。これにより*識別器の損失*を取得し、バックプロパゲーションを行います。 +* **生成器のトレーニング**: これは少し複雑です。生成器の期待出力が直接的にはわからないためです。生成器と識別器を組み合わせたGAN全体にランダムベクトルを入力し、結果が1(実画像に対応)になることを期待します。このステップでは識別器のパラメータを固定し(この段階では識別器をトレーニングしない)、バックプロパゲーションを行います。 -このプロセスの間、ジェネレーターとディスクリミネーターの損失は大きく減少しません。理想的な状況では、両方のネットワークがパフォーマンスを向上させることに対応して、振動するはずです。 +このプロセス中、生成器と識別器の損失は大幅には減少しません。理想的には、両方のネットワークが改善されることに対応して損失が振動するはずです。 ## ✍️ 演習: GANs -* [TensorFlow/KerasのGANノートブック](../../../../../lessons/4-ComputerVision/10-GANs/GANTF.ipynb) -* [PyTorchのGANノートブック](../../../../../lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) +* [TensorFlow/KerasでのGANノートブック](../../../../../lessons/4-ComputerVision/10-GANs/GANTF.ipynb) +* [PyTorchでのGANノートブック](../../../../../lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) -### GANトレーニングの問題 +### GANトレーニングの問題点 -GANは特にトレーニングが難しいことで知られています。以下はいくつかの問題です: +GANは特にトレーニングが難しいことで知られています。以下はいくつかの問題点です: -* **モード崩壊**。この用語は、ジェネレーターが1つの成功した画像を生成し、それを偽の画像として分類することを学び、異なる画像のバラエティを生成しないことを意味します。 -* **ハイパーパラメータに対する感度**。しばしば、GANが全く収束しないのを見かけ、突然学習率が減少して収束に至ることがあります。 -* ジェネレーターとディスクリミネーターの間の**バランス**を保つこと。多くの場合、ディスクリミネーターの損失は比較的早くゼロに落ちることがあり、これがジェネレーターがさらにトレーニングできなくなる結果を招きます。これを克服するために、ジェネレーターとディスクリミネーターの異なる学習率を設定したり、損失がすでに低すぎる場合はディスクリミネーターのトレーニングをスキップすることを試みることができます。 -* **高解像度**のトレーニング。オートエンコーダと同じ問題を反映しており、畳み込みネットワークの多くの層を再構築することでアーティファクトが発生します。この問題は通常、最初に低解像度の画像でいくつかの層をトレーニングし、その後層を「解除」または追加する**進行的成長**と呼ばれる方法で解決されます。別の解決策は、層間に追加の接続を追加し、複数の解像度を同時にトレーニングすることです - 詳細はこの[マルチスケール勾配GANs論文](https://arxiv.org/abs/1903.06048)を参照してください。 +* **モード崩壊**: 生成器が1つの成功した画像を生成することを学び、それが識別器を騙すだけで、さまざまな画像を生成しない現象。 +* **ハイパーパラメータへの感度**: GANが全く収束しない場合があり、学習率を突然下げることで収束することがあります。 +* **生成器と識別器のバランスを保つ**: 多くの場合、識別器の損失が比較的早くゼロに近づき、生成器がそれ以上トレーニングできなくなることがあります。これを克服するために、生成器と識別器に異なる学習率を設定したり、識別器の損失がすでに低い場合は識別器のトレーニングをスキップすることが考えられます。 +* **高解像度のトレーニング**: オートエンコーダと同様の問題で、畳み込みネットワークの層が多すぎるとアーティファクトが発生します。この問題は、まず低解像度の画像で数層をトレーニングし、その後層を「アンロック」または追加する**プログレッシブグローイング**で解決されることが多いです。また、層間に追加の接続を設け、複数の解像度を同時にトレーニングする方法もあります。詳細はこの[Multi-Scale Gradient GANs 論文](https://arxiv.org/abs/1903.06048)を参照してください。 -## スタイル転送 +## スタイル転送 (Style Transfer) -GANは芸術的な画像を生成する素晴らしい方法です。もう一つの興味深い技術は、いわゆる**スタイル転送**で、これは1つの**コンテンツ画像**を取り、それを異なるスタイルで再描画し、**スタイル画像**からフィルターを適用します。 +GANは芸術的な画像を生成するのに優れた方法です。もう1つ興味深い技術が**スタイル転送**です。これは1つの**コンテンツ画像**を取り、別のスタイルで描き直す技術で、**スタイル画像**のフィルタを適用します。 -その仕組みは次のようになります: -* ランダムノイズ画像(またはコンテンツ画像)から始めますが、理解のためにはランダムノイズから始める方が簡単です。 -* 目標は、コンテンツ画像とスタイル画像の両方に近い画像を作成することです。これは二つの損失関数によって決定されます: - - **コンテンツ損失**は、現在の画像とコンテンツ画像から抽出されたCNNの特徴に基づいて計算されます。 - - **スタイル損失**は、現在の画像とスタイル画像の間で賢く計算され、グラム行列を使用します(詳細は[例のノートブック](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)を参照)。 -* 画像を滑らかにし、ノイズを除去するために、**変動損失**も導入します。これは隣接するピクセル間の平均距離を計算します。 -* 主な最適化ループは、勾配降下法(または他の最適化アルゴリズム)を使用して現在の画像を調整し、総損失を最小化します。これは、3つの損失の加重和です。 +その仕組みは以下の通りです: +* ランダムなノイズ画像(またはコンテンツ画像)から始めますが、理解を簡単にするためにランダムノイズから始める方が良いです。 +* 目標は、コンテンツ画像とスタイル画像の両方に近い画像を作成することです。これは2つの損失関数によって決定されます: + - **コンテンツ損失**: 現在の画像とコンテンツ画像からCNNのいくつかの層で抽出された特徴に基づいて計算されます。 + - **スタイル損失**: 現在の画像とスタイル画像の間で、グラム行列を使用して巧妙に計算されます(詳細は[例ノートブック](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)を参照)。 +* 画像を滑らかにし、ノイズを除去するために、隣接するピクセル間の平均距離を計算する**変動損失**も導入します。 +* 主な最適化ループでは、勾配降下法(または他の最適化アルゴリズム)を使用して現在の画像を調整し、3つの損失の加重和である総損失を最小化します。 ## ✍️ 例: [スタイル転送](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) -## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/210) +## [事後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/210) ## 結論 -このレッスンでは、GANについて学び、どのようにトレーニングするかを学びました。また、このタイプのニューラルネットワークが直面する特別な課題と、それを乗り越えるためのいくつかの戦略についても学びました。 +このレッスンでは、GANとそのトレーニング方法について学びました。また、このタイプのニューラルネットワークが直面する特有の課題と、それを克服するためのいくつかの戦略についても学びました。 ## 🚀 チャレンジ -あなた自身の画像を使用して、[スタイル転送ノートブック](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)を実行してください。 +[スタイル転送ノートブック](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)を実行し、自分の画像を使用してみましょう。 -## レビュー & 自習 +## 復習と自己学習 -参考のため、以下のリソースでGANについてさらに学んでください: +参考として、以下のリソースでGANについてさらに学んでください: * Marco Pasini, [10 Lessons I Learned Training GANs for one Year](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628) -* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN)、考慮すべき*事実上の* GANアーキテクチャ -* [Azure MLでのGANを使用した生成アートの作成](https://soshnikov.com/scienceart/creating-generative-art-using-gan-on-azureml/) +* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN): 検討すべき事実上のGANアーキテクチャ +* [Azure MLを使用したGANによる生成アートの作成](https://soshnikov.com/scienceart/creating-generative-art-using-gan-on-azureml/) ## 課題 -このレッスンに関連する2つのノートブックのいずれかを再訪し、自分の画像でGANを再トレーニングしてください。何を作成できますか? +このレッスンに関連する2つのノートブックのいずれかを再訪し、自分の画像でGANを再トレーニングしてください。どのようなものが作れるでしょうか? **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご理解ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用から生じる誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された原文が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/11-ObjectDetection/README.md b/translations/ja/lessons/4-ComputerVision/11-ObjectDetection/README.md index 0d049ec9..3eb9d38c 100644 --- a/translations/ja/lessons/4-ComputerVision/11-ObjectDetection/README.md +++ b/translations/ja/lessons/4-ComputerVision/11-ObjectDetection/README.md @@ -1,63 +1,74 @@ -# 物体検出 + +# オブジェクト検出 -これまで扱ってきた画像分類モデルは、画像を入力としてクラス「数字」のようなカテゴリ結果を出力しました。しかし、多くの場合、単に画像に物体が描かれていることを知るだけでなく、それらの正確な位置を特定できるようにしたいのです。これがまさに**物体検出**の目的です。 +これまで扱ってきた画像分類モデルは、画像を入力として受け取り、MNIST問題における「数字」クラスのようなカテゴリカルな結果を出力していました。しかし、多くの場合、画像に物体が写っていることを知るだけでなく、その正確な位置を特定したいと考えます。それがまさに**オブジェクト検出**の目的です。 -## [プレ講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/111) +## [事前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/111) -![物体検出](../../../../../translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.ja.png) +![オブジェクト検出](../../../../../translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.ja.png) -> 画像出典:[YOLO v2 ウェブサイト](https://pjreddie.com/darknet/yolov2/) +> 画像出典: [YOLO v2 ウェブサイト](https://pjreddie.com/darknet/yolov2/) -## 物体検出へのナイーブなアプローチ +## オブジェクト検出の単純なアプローチ -もし、画像の中に猫を見つけたいと仮定すると、非常にナイーブな物体検出のアプローチは以下のようになります。 +例えば、画像内の猫を見つけたいと仮定します。非常に単純なオブジェクト検出のアプローチは以下のようになります: -1. 画像をいくつかのタイルに分割する +1. 画像を複数のタイルに分割する 2. 各タイルに対して画像分類を実行する -3. 十分に高い活性化を示すタイルは、問題の物体を含むと見なされます。 +3. 十分に高い活性化を示したタイルを、対象の物体を含むとみなす -![ナイーブな物体検出](../../../../../translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.ja.png) +![単純なオブジェクト検出](../../../../../translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.ja.png) -> *画像出典:[演習ノートブック](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection-TF.ipynb)* +> *画像出典: [演習ノートブック](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection-TF.ipynb)* -しかし、このアプローチは理想から遠く、アルゴリズムが物体のバウンディングボックスを非常に不正確に特定することしかできません。より正確な位置を得るためには、バウンディングボックスの座標を予測するための何らかの**回帰**を実行する必要があり、そのためには特定のデータセットが必要です。 +しかし、この方法は理想的とは言えません。なぜなら、アルゴリズムが物体の境界ボックスを非常に不正確にしか特定できないからです。より正確な位置を特定するには、境界ボックスの座標を予測するための**回帰**を実行する必要があります。そのためには、特定のデータセットが必要です。 -## 物体検出のための回帰 +## オブジェクト検出のための回帰 -[このブログ記事](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491)は、形状検出の優れた入門を提供しています。 +[このブログ記事](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491)では、形状検出についての優しい導入が紹介されています。 -## 物体検出のためのデータセット +## オブジェクト検出のためのデータセット -このタスクに関連するデータセットには以下のものがあります。 +このタスクに関連する以下のデータセットに出会うかもしれません: * [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 20クラス -* [COCO](http://cocodataset.org/#home) - 文脈における一般的な物体。80クラス、バウンディングボックスおよびセグメンテーションマスク +* [COCO](http://cocodataset.org/#home) - コンテキスト内の一般的な物体。80クラス、境界ボックスとセグメンテーションマスクを含む ![COCO](../../../../../translated_images/coco-examples.71bc60380fa6cceb7caad48bd09e35b6028caabd363aa04fee89c414e0870e86.ja.jpg) -## 物体検出のメトリクス +## オブジェクト検出の評価指標 -### IoU(Intersection over Union) +### Intersection over Union (IoU) -画像分類の場合、アルゴリズムのパフォーマンスを測定するのは簡単ですが、物体検出ではクラスの正確さと推測されたバウンディングボックスの位置の精度の両方を測定する必要があります。後者には、いわゆる**IoU(Intersection over Union)**を使用し、2つのボックス(または2つの任意の領域)がどれだけ重なっているかを測定します。 +画像分類ではアルゴリズムの性能を測定するのは簡単ですが、オブジェクト検出ではクラスの正確性だけでなく、推定された境界ボックスの位置の精度も測定する必要があります。そのために使用されるのが、**Intersection over Union** (IoU) と呼ばれる指標です。これは、2つのボックス(または任意の2つの領域)がどれだけ重なっているかを測定します。 ![IoU](../../../../../translated_images/iou_equation.9a4751d40fff4e119ecd0a7bcca4e71ab1dc83e0d4f2a0d66ff0859736f593cf.ja.png) -> *図2:[この優れたIoUに関するブログ記事](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)から* +> *図2 出典: [この優れたIoUに関するブログ記事](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)* -アイデアはシンプルです - 2つの図形の交差部分の面積を、その和の面積で割ります。2つの同一の領域では、IoUは1になり、完全に離れた領域では0になります。それ以外の場合は0から1の間で変動します。通常、IoUが特定の値を超えるバウンディングボックスのみを考慮します。 +アイデアはシンプルです。2つの図形の交差部分の面積を、2つの図形の合計面積で割ります。2つの領域が完全に一致している場合、IoUは1になります。一方、完全に分離している場合は0になります。それ以外の場合は0から1の間で変動します。通常、IoUが一定値を超える境界ボックスのみを考慮します。 -### 平均精度 +### 平均精度 (Average Precision) -特定の物体クラス$C$がどれだけ認識されているかを測定したいとしましょう。それを測定するために、**平均精度**メトリクスを使用します。これは以下のように計算されます。 +特定のクラス $C$ の物体がどれだけ正確に認識されているかを測定したいとします。そのために、**平均精度** (Average Precision) 指標を使用します。計算方法は以下の通りです: -1. 精度-再現率曲線が、検出しきい値(0から1まで)に依存する精度を示すことを考慮します。 -2. しきい値に応じて、画像内で検出される物体の数が増減し、精度と再現率の異なる値が得られます。 -3. 曲線はこのようになります: +1. 検出閾値(0から1まで)に応じた精度-再現率曲線を考慮します。 +2. 閾値に応じて、画像内で検出される物体の数や精度・再現率の値が変わります。 +3. 曲線は以下のようになります: -> *画像出典:[NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + -与えられたクラス$C$の平均精度は、この曲線の下の面積です。より正確には、再現率軸は通常10部分に分けられ、精度はすべてのポイントで平均されます: +> *画像出典: [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + +クラス $C$ の平均精度は、この曲線の下の面積です。より正確には、再現率軸を通常10分割し、精度をその各点で平均化します: $$ AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10}) @@ -65,32 +76,34 @@ $$ ### APとIoU -IoUが特定の値を超える検出のみを考慮します。たとえば、PASCAL VOCデータセットでは通常$\mbox{IoU Threshold} = 0.5$が想定されており、COCOでは異なる$\mbox{IoU Threshold}$の値でAPが測定されます。 +IoUが一定値を超える検出のみを考慮します。例えば、PASCAL VOCデータセットでは通常 $\mbox{IoU Threshold} = 0.5$ が仮定されます。一方、COCOでは異なる値の $\mbox{IoU Threshold}$ に対してAPが測定されます。 -> *画像出典:[NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + + +> *画像出典: [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* ### 平均平均精度 - mAP -物体検出の主なメトリクスは**平均平均精度**、または**mAP**と呼ばれています。これは、すべての物体クラスにわたる平均精度の値であり、時には$\mbox{IoU Threshold}$にわたっても平均されます。より詳細には、**mAP**を計算するプロセスは[このブログ記事](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3)で説明されており、[こちらにはコードサンプルがあります](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734)。 +オブジェクト検出の主要な評価指標は**平均平均精度** (Mean Average Precision, mAP) と呼ばれます。これは、すべての物体クラスにわたる平均精度の値であり、時には $\mbox{IoU Threshold}$ にもわたって平均化されます。**mAP** の計算プロセスについては、[このブログ記事](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3)や[こちらのコードサンプル付きの記事](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734)で詳しく説明されています。 -## 異なる物体検出アプローチ +## オブジェクト検出のさまざまなアプローチ -物体検出アルゴリズムには大きく分けて2つのクラスがあります。 +オブジェクト検出アルゴリズムには、大きく分けて2つのクラスがあります: -* **領域提案ネットワーク**(R-CNN、Fast R-CNN、Faster R-CNN)。主なアイデアは、**関心領域**(ROI)を生成し、それらの上でCNNを実行して最大の活性化を探すことです。これはナイーブなアプローチに少し似ていますが、ROIはより巧妙な方法で生成されます。このような方法の主な欠点の1つは、画像上でCNN分類器を多くのパスで実行する必要があるため遅いことです。 -* **一回のパス**(YOLO、SSD、RetinaNet)メソッド。これらのアーキテクチャでは、ネットワークを設計して、クラスとROIの両方を一度のパスで予測します。 +* **領域提案ネットワーク** (Region Proposal Networks) (R-CNN, Fast R-CNN, Faster R-CNN)。主なアイデアは、**関心領域** (ROI) を生成し、それに対してCNNを実行して最大活性化を探すことです。この方法は単純なアプローチに似ていますが、ROIがより賢く生成される点が異なります。この方法の主な欠点は、画像に対してCNN分類器を何度も実行する必要があるため、遅いことです。 +* **ワンパス** (YOLO, SSD, RetinaNet) メソッド。これらのアーキテクチャでは、クラスとROIの両方を1回のパスで予測するようにネットワークを設計します。 ### R-CNN: 領域ベースのCNN -[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf)は、[Selective Search](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf)を使用してROI領域の階層構造を生成し、それをCNN特徴抽出器とSVM分類器に通して物体クラスを特定し、線形回帰を使用して*バウンディングボックス*の座標を決定します。[公式論文](https://arxiv.org/pdf/1506.01497v1.pdf) +[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf) は、[Selective Search](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf) を使用してROI領域の階層構造を生成します。これらの領域はCNN特徴抽出器とSVM分類器を通じて物体クラスを決定し、線形回帰を使用して*境界ボックス*の座標を決定します。[公式論文](https://arxiv.org/pdf/1506.01497v1.pdf) ![RCNN](../../../../../translated_images/rcnn1.cae407020dfb1d1fb572656e44f75cd6c512cc220591c116c506652c10e47f26.ja.png) -> *画像出典:van de Sande et al. ICCV’11* +> *画像出典: van de Sande et al. ICCV’11* ![RCNN-1](../../../../../translated_images/rcnn2.2d9530bb83516484ec65b250c22dbf37d3d23244f32864ebcb91d98fe7c3112c.ja.png) -> *画像出典:[このブログ](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e)* +> *画像出典: [このブログ](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e)* ### F-RCNN - Fast R-CNN @@ -98,76 +111,77 @@ IoUが特定の値を超える検出のみを考慮します。たとえば、PA ![FRCNN](../../../../../translated_images/f-rcnn.3cda6d9bb41888754037d2d9763e2298a96de5d9bc2a21db3147357aa5da9b1a.ja.png) -> 画像出典:[公式論文](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf)、[arXiv](https://arxiv.org/pdf/1504.08083.pdf)、2015年 +> 画像出典: [公式論文](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf), [arXiv](https://arxiv.org/pdf/1504.08083.pdf), 2015 ### Faster R-CNN -このアプローチの主なアイデアは、ニューラルネットワークを使用してROIを予測することです - いわゆる*領域提案ネットワーク*。[論文](https://arxiv.org/pdf/1506.01497.pdf)、2016年 +このアプローチの主なアイデアは、ROIを予測するためにニューラルネットワークを使用することです。これを*領域提案ネットワーク* (Region Proposal Network) と呼びます。[論文](https://arxiv.org/pdf/1506.01497.pdf), 2016 ![FasterRCNN](../../../../../translated_images/faster-rcnn.8d46c099b87ef30ab2ea26dbc4bdd85b974a57ba8eb526f65dc4cd0a4711de30.ja.png) -> 画像出典:[公式論文](https://arxiv.org/pdf/1506.01497.pdf) +> 画像出典: [公式論文](https://arxiv.org/pdf/1506.01497.pdf) ### R-FCN: 領域ベースの完全畳み込みネットワーク -このアルゴリズムはFaster R-CNNよりもさらに高速です。主なアイデアは次の通りです。 +このアルゴリズムはFaster R-CNNよりもさらに高速です。主なアイデアは以下の通りです: -1. ResNet-101を使用して特徴を抽出します -2. 特徴は**位置感受性スコアマップ**によって処理されます。$C$クラスの各物体は$k\times k$領域に分割され、物体の部分を予測するように訓練されます。 -3. $k\times k$領域の各部分について、すべてのネットワークが物体クラスに投票し、最大の投票を得た物体クラスが選択されます。 +1. ResNet-101を使用して特徴を抽出する +1. 特徴を**位置感知スコアマップ**で処理する。クラス $C$ の各物体は $k\times k$ の領域に分割され、物体の部分を予測するように学習する +1. $k\times k$ の各領域の部分について、すべてのネットワークが物体クラスに投票し、最大票を得た物体クラスが選択される ![r-fcn image](../../../../../translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.ja.png) -> 画像出典:[公式論文](https://arxiv.org/abs/1605.06409) +> 画像出典: [公式論文](https://arxiv.org/abs/1605.06409) ### YOLO - You Only Look Once -YOLOはリアルタイムの一回のパスアルゴリズムです。主なアイデアは次の通りです。 +YOLOはリアルタイムのワンパスアルゴリズムです。主なアイデアは以下の通りです: -* 画像を$S\times S$領域に分割します -* 各領域に対して、**CNN**が$n$個の可能な物体、*バウンディングボックス*の座標、および*信頼度*=*確率* * IoUを予測します。 + * 画像を $S\times S$ の領域に分割する + * 各領域について、**CNN** が $n$ 個の可能な物体、*境界ボックス*の座標、*信頼度*=*確率* * IoU を予測する -![YOLO](../../../../../translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.ja.png) -> 画像は[公式論文](https://arxiv.org/abs/1506.02640)からのものです。 + ![YOLO](../../../../../translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.ja.png) + +> 画像出典: [公式論文](https://arxiv.org/abs/1506.02640) ### その他のアルゴリズム * RetinaNet: [公式論文](https://arxiv.org/abs/1708.02002) - - [TorchvisionによるPyTorch実装](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) - - [Keras実装](https://github.com/fizyr/keras-retinanet) - - Kerasサンプルの[RetinaNetによる物体検出](https://keras.io/examples/vision/retinanet/) + - [PyTorch 実装 (Torchvision)](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) + - [Keras 実装](https://github.com/fizyr/keras-retinanet) + - [RetinaNet を使用したオブジェクト検出](https://keras.io/examples/vision/retinanet/) (Keras Samples) * SSD (Single Shot Detector): [公式論文](https://arxiv.org/abs/1512.02325) -## ✍️ 演習: 物体検出 +## ✍️ 演習: オブジェクト検出 -以下のノートブックで学習を続けましょう: +以下のノートブックで学習を続けてください: [ObjectDetection.ipynb](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) ## 結論 -このレッスンでは、物体検出が達成できるさまざまな方法を駆け足で紹介しました! +このレッスンでは、オブジェクト検出を実現するさまざまな方法について駆け足で学びました! ## 🚀 チャレンジ -これらのYOLOに関する記事やノートブックを読んで、自分で試してみてください。 +以下の記事やノートブックを読み、YOLOを試してみてください: -* YOLOについて説明した[良いブログ記事](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/) +* [YOLOに関する良いブログ記事](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/) * [公式サイト](https://pjreddie.com/darknet/yolo/) - * Yolo: [Keras実装](https://github.com/experiencor/keras-yolo2)、[ステップバイステップノートブック](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb) - * Yolo v2: [Keras実装](https://github.com/experiencor/keras-yolo2)、[ステップバイステップノートブック](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb) + * YOLO: [Keras 実装](https://github.com/experiencor/keras-yolo2), [ステップバイステップノートブック](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb) + * YOLO v2: [Keras 実装](https://github.com/experiencor/keras-yolo2), [ステップバイステップノートブック](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb) -## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/211) +## [事後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/211) -## レビュー & 自習 +## 復習と自己学習 -* Nikhil Sardanaによる[物体検出](https://tjmachinelearning.com/lectures/1718/obj/) -* [物体検出アルゴリズムの良い比較](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html) -* [物体検出のための深層学習アルゴリズムのレビュー](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852) -* [基本的な物体検出アルゴリズムのステップバイステップの紹介](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/) -* [物体検出のためのPythonにおけるFaster R-CNNの実装](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/) +* [オブジェクト検出](https://tjmachinelearning.com/lectures/1718/obj/) by Nikhil Sardana +* [オブジェクト検出アルゴリズムの良い比較](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html) +* [オブジェクト検出のためのディープラーニングアルゴリズムのレビュー](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852) +* [基本的なオブジェクト検出アルゴリズムへのステップバイステップの導入](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/) +* [PythonでのFaster R-CNNの実装によるオブジェクト検出](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/) -## [課題: 物体検出](lab/README.md) +## [課題: オブジェクト検出](lab/README.md) **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されました。正確性を追求していますが、自動翻訳にはエラーや不正確さが含まれる可能性があることをご理解ください。原文はその言語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈については、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された原文が正式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md b/translations/ja/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md index 915903a1..8e3995f1 100644 --- a/translations/ja/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md +++ b/translations/ja/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md @@ -1,14 +1,23 @@ -# ハリウッドヘッズデータセットを用いた頭部検出 + +# ハリウッドヘッズデータセットを使用した頭部検出 -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)からのラボ課題です。 +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) のラボ課題。 ## 課題 -監視カメラの映像ストリーム上の人の数をカウントすることは、店舗の訪問者数やレストランの混雑時間を推定するために重要なタスクです。この課題を解決するためには、異なる角度から人の頭を検出できる必要があります。人の頭を検出するためのオブジェクト検出モデルをトレーニングするには、[Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/)を使用できます。 +監視カメラの映像で人の数を数えることは、店舗の訪問者数やレストランの混雑時間を推定するために重要なタスクです。この課題を解決するには、さまざまな角度から人間の頭部を検出できる必要があります。人間の頭部を検出する物体検出モデルをトレーニングするために、[Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/) を使用することができます。 ## データセット -[Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/release/HollywoodHeads.zip)には、ハリウッド映画の224,740フレームに注釈が付けられた369,846個の人の頭が含まれています。このデータセットは[https://host.robots.ox.ac.uk/pascal/VOC/](../../../../../../lessons/4-ComputerVision/11-ObjectDetection/lab/PASCAL VOC)フォーマットで提供されており、各画像には次のようなXML記述ファイルがあります。 +[Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/release/HollywoodHeads.zip) には、ハリウッド映画の224,740フレームにわたる369,846の人間の頭部がアノテーションされています。このデータセットは [https://host.robots.ox.ac.uk/pascal/VOC/](../../../../../../lessons/4-ComputerVision/11-ObjectDetection/lab/PASCAL VOC) フォーマットで提供されており、各画像には以下のようなXML記述ファイルが付属しています: ```xml @@ -48,19 +57,19 @@ ``` -このデータセットには、オブジェクトのクラスは`head`のみで、各頭部に対してバウンディングボックスの座標が得られます。Pythonライブラリを使用してXMLを解析するか、[このライブラリ](https://pypi.org/project/pascal-voc/)を使用してPASCAL VOCフォーマットを直接扱うことができます。 +このデータセットには `head` という1つのオブジェクトクラスしかなく、各頭部についてバウンディングボックスの座標が提供されています。XMLはPythonライブラリを使用して解析することができますし、[このライブラリ](https://pypi.org/project/pascal-voc/) を使用してPASCAL VOCフォーマットを直接扱うことも可能です。 -## オブジェクト検出のトレーニング +## 物体検出のトレーニング -以下のいずれかの方法を使用してオブジェクト検出モデルをトレーニングできます。 +物体検出モデルをトレーニングするには、以下の方法のいずれかを使用できます: -* [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste)とそのPython APIを使用して、クラウド上でプログラム的にモデルをトレーニングします。カスタムビジョンは数百枚の画像以上を使用してモデルをトレーニングすることができないため、データセットを制限する必要があるかもしれません。 -* [Kerasチュートリアル](https://keras.io/examples/vision/retinanet/)の例を使用してRetinaNetモデルをトレーニングします。 -* [torchvision.models.detection.RetinaNet](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html)の組み込みモジュールを使用します。 +* [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste) とそのPython APIを使用して、クラウド上でプログラム的にモデルをトレーニングする。Custom Visionでは数百枚以上の画像を使用してモデルをトレーニングすることはできないため、データセットを制限する必要があるかもしれません。 +* [Kerasのチュートリアル](https://keras.io/examples/vision/retinanet/) の例を使用してRetinaNetモデルをトレーニングする。 +* [torchvision.models.detection.RetinaNet](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) のtorchvisionに組み込まれたモジュールを使用する。 -## まとめ +## 学び -オブジェクト検出は、産業界で頻繁に要求されるタスクです。オブジェクト検出を実行するために使用できるサービス(例えば[Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste))はありますが、オブジェクト検出がどのように機能するかを理解し、自分のモデルをトレーニングできることが重要です。 +物体検出は業界で頻繁に必要とされるタスクです。[Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste) のようなサービスを使用して物体検出を行うこともできますが、物体検出がどのように機能するかを理解し、自分でモデルをトレーニングできることが重要です。 **免責事項**: -この文書は、機械翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。元の文書は、その原文が権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈については、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された原文が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/12-Segmentation/README.md b/translations/ja/lessons/4-ComputerVision/12-Segmentation/README.md index 3b5cb0b2..026c3e02 100644 --- a/translations/ja/lessons/4-ComputerVision/12-Segmentation/README.md +++ b/translations/ja/lessons/4-ComputerVision/12-Segmentation/README.md @@ -1,69 +1,78 @@ + # セグメンテーション -これまでに、画像内のオブジェクトを*バウンディングボックス*で予測することで特定するオブジェクト検出について学びました。しかし、いくつかのタスクではバウンディングボックスだけでなく、より正確なオブジェクトの位置特定も必要です。このタスクは**セグメンテーション**と呼ばれます。 +以前、物体検出について学びました。物体検出では、画像内の物体を特定し、その*バウンディングボックス*を予測することで位置を特定します。しかし、いくつかのタスクではバウンディングボックスだけでなく、より正確な物体の位置情報が必要です。このタスクは**セグメンテーション**と呼ばれます。 -## [講義前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/112) +## [事前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/112) -セグメンテーションは**ピクセル分類**と見なすことができ、画像の**各**ピクセルについてそのクラスを予測する必要があります(*背景*がクラスの一つです)。セグメンテーションアルゴリズムには主に二つあります: +セグメンテーションは**ピクセル分類**として見ることができます。画像の**各**ピクセルについて、そのクラス(*背景*もクラスの一つ)を予測する必要があります。セグメンテーションには主に2つのアルゴリズムがあります: -* **セマンティックセグメンテーション**はピクセルのクラスを示すだけで、同じクラスの異なるオブジェクトを区別しません。 -* **インスタンスセグメンテーション**はクラスを異なるインスタンスに分けます。 +* **セマンティックセグメンテーション**はピクセルのクラスを示すだけで、同じクラスの異なる物体を区別しません。 +* **インスタンスセグメンテーション**はクラスを異なるインスタンスに分割します。 -例えば、インスタンスセグメンテーションではこれらの羊は異なるオブジェクトですが、セマンティックセグメンテーションではすべての羊が一つのクラスで表されます。 +例えば、インスタンスセグメンテーションではこれらの羊は異なる物体として扱われますが、セマンティックセグメンテーションではすべての羊が1つのクラスとして表されます。 -> 画像は[このブログ記事](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50)から引用。 +> 画像出典:[このブログ記事](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50) -セグメンテーションには異なるニューラルアーキテクチャがありますが、すべて同じ構造を持っています。ある意味では、以前学んだオートエンコーダーに似ていますが、元の画像を解体するのではなく、**マスク**を解体することが目標です。したがって、セグメンテーションネットワークは以下の部分から構成されます: +セグメンテーションにはさまざまなニューラルネットワークのアーキテクチャがありますが、それらはすべて同じ構造を持っています。ある意味では、以前学んだオートエンコーダに似ていますが、元の画像を分解するのではなく、**マスク**を分解することが目的です。そのため、セグメンテーションネットワークは以下の部分で構成されています: -* **エンコーダー**は入力画像から特徴を抽出します。 -* **デコーダー**はそれらの特徴を**マスク画像**に変換し、クラスの数に対応するサイズとチャネル数を持ちます。 +* **エンコーダ**:入力画像から特徴を抽出します。 +* **デコーダ**:その特徴を**マスク画像**に変換します。このマスク画像は元の画像と同じサイズで、クラス数に対応するチャンネル数を持ちます。 -> 画像は[この出版物](https://arxiv.org/pdf/2001.05566.pdf)から引用。 +> 画像出典:[この論文](https://arxiv.org/pdf/2001.05566.pdf) -セグメンテーションに使用される損失関数について特に言及する必要があります。古典的なオートエンコーダーを使用する場合、2つの画像間の類似性を測定する必要があり、そのために平均二乗誤差(MSE)を使用できます。セグメンテーションでは、ターゲットマスク画像の各ピクセルがクラス番号を表しているため(3次元でのワンホットエンコーディング)、分類に特化した損失関数、すなわち全ピクセルで平均化されたクロスエントロピー損失を使用する必要があります。マスクがバイナリの場合は、**バイナリクロスエントロピー損失**(BCE)が使用されます。 +特にセグメンテーションで使用される損失関数について言及する必要があります。従来のオートエンコーダを使用する場合、2つの画像間の類似性を測定する必要があり、そのために平均二乗誤差(MSE)を使用できます。しかし、セグメンテーションでは、ターゲットマスク画像の各ピクセルがクラス番号(一部は第三次元でワンホットエンコードされる)を表すため、分類に特化した損失関数を使用する必要があります。具体的には、クロスエントロピー損失を全ピクセルにわたって平均化します。マスクがバイナリの場合は、**バイナリクロスエントロピー損失**(BCE)が使用されます。 -> ✅ ワンホットエンコーディングは、クラスラベルをクラスの数に等しい長さのベクトルにエンコードする方法です。この技術については[この記事](https://datagy.io/sklearn-one-hot-encode/)を参照してください。 +> ✅ ワンホットエンコーディングは、クラスラベルをクラス数と同じ長さのベクトルにエンコードする方法です。[この記事](https://datagy.io/sklearn-one-hot-encode/)でこの技術について詳しく学んでください。 -## 医療画像のセグメンテーション +## 医療画像におけるセグメンテーション -このレッスンでは、ネットワークをトレーニングして医療画像上のヒトの母斑(ほくろとも呼ばれます)を認識するセグメンテーションを実際に見ていきます。画像ソースとして、PH2データベースの皮膚鏡画像を使用します。このデータセットには、典型的な母斑、非典型的な母斑、メラノーマの3つのクラスの200枚の画像が含まれています。すべての画像には、母斑をアウトラインする対応する**マスク**も含まれています。 +このレッスンでは、ネットワークをトレーニングして医療画像上で人間のほくろ(ネビ)を認識する方法を学びます。画像ソースとしてPH2データベースを使用します。このデータセットには、典型的なほくろ、非典型的なほくろ、メラノーマの3つのクラスに分類された200枚の画像が含まれています。すべての画像には、ほくろを輪郭で示した対応する**マスク**も含まれています。 -> ✅ この技術はこの種の医療画像に特に適していますが、他にどのような実世界の応用を考えられますか? +> ✅ この技術はこの種の医療画像に特に適していますが、他にどのような現実世界の応用が考えられるでしょうか? navi -> 画像はPH2データベースから引用。 +> 画像出典:PH2データベース -私たちは、背景から任意の母斑をセグメント化するモデルをトレーニングします。 +私たちはモデルをトレーニングして、背景からほくろをセグメント化することを目指します。 -## ✍️ 演習: セマンティックセグメンテーション +## ✍️ 演習:セマンティックセグメンテーション -以下のノートブックを開いて、さまざまなセマンティックセグメンテーションアーキテクチャについて学び、それらを使って練習し、実際に見ることができます。 +以下のノートブックを開いて、さまざまなセマンティックセグメンテーションのアーキテクチャについて学び、それらを操作し、実際に動作を確認してください。 -* [セマンティックセグメンテーション Pytorch](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) -* [セマンティックセグメンテーション TensorFlow](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) +* [Semantic Segmentation Pytorch](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) +* [Semantic Segmentation TensorFlow](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) -## [講義後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/212) +## [事後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/212) ## 結論 -セグメンテーションは、バウンディングボックスを超えてピクセルレベルの分類を行う非常に強力な画像分類技術です。医療画像など、さまざまなアプリケーションで使用される技術です。 +セグメンテーションは非常に強力な画像分類技術であり、バウンディングボックスを超えてピクセルレベルの分類を可能にします。この技術は医療画像を含むさまざまな応用分野で使用されています。 ## 🚀 チャレンジ -ボディセグメンテーションは、人々の画像を使って行うことができる一般的なタスクの一つです。他の重要なタスクには、**スケルトン検出**や**ポーズ検出**が含まれます。[OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)ライブラリを試して、ポーズ検出がどのように使用できるかを見てみましょう。 +人体セグメンテーションは、人の画像で行える一般的なタスクの1つにすぎません。他にも**骨格検出**や**ポーズ検出**などの重要なタスクがあります。[OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)ライブラリを試して、ポーズ検出がどのように使用されるかを確認してください。 -## レビュー & 自己学習 +## 復習と自己学習 -この[ウィキペディアの記事](https://wikipedia.org/wiki/Image_segmentation)は、この技術のさまざまな応用について良い概要を提供しています。この分野のインスタンスセグメンテーションとパンオプティックセグメンテーションのサブドメインについて、さらに独自に学んでください。 +この[Wikipediaの記事](https://wikipedia.org/wiki/Image_segmentation)は、この技術のさまざまな応用についての良い概要を提供しています。インスタンスセグメンテーションやパノプティックセグメンテーションのサブドメインについてさらに学んでみてください。 ## [課題](lab/README.md) -このラボでは、Kaggleからの[セグメンテーションフルボディMADSデータセット](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)を使用して**人間の体のセグメンテーション**に挑戦してください。 +このラボでは、Kaggleの[Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)を使用して**人体セグメンテーション**を試してみてください。 **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用から生じる誤解や誤訳については、一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/12-Segmentation/lab/README.md b/translations/ja/lessons/4-ComputerVision/12-Segmentation/lab/README.md index 90bb4642..5bcabe39 100644 --- a/translations/ja/lessons/4-ComputerVision/12-Segmentation/lab/README.md +++ b/translations/ja/lessons/4-ComputerVision/12-Segmentation/lab/README.md @@ -1,22 +1,31 @@ + # 人体セグメンテーション -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)からのラボ課題です。 +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) のラボ課題。 -## タスク +## 課題 -映像制作、例えば天気予報では、カメラから人の画像を切り抜いて他の映像の上に置く必要があることがよくあります。これは通常、**クロマキー**技術を使用して行われ、人が均一な色の背景の前で撮影され、その背景が取り除かれます。このラボでは、人のシルエットを切り抜くためにニューラルネットワークモデルを訓練します。 +ビデオ制作、例えば天気予報では、カメラで撮影した人の画像を切り抜き、別の映像の上に配置する必要があることがあります。これには通常、**クロマキー**技術が使用されます。人が均一な色の背景の前で撮影され、その背景が取り除かれる方法です。このラボでは、人のシルエットを切り抜くためのニューラルネットワークモデルを訓練します。 ## データセット -Kaggleから[Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)を使用します。Kaggleから手動でデータセットをダウンロードしてください。 +Kaggleの[Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)を使用します。データセットはKaggleから手動でダウンロードしてください。 -## ノートブックの開始 +## スタートノートブック -[BodySegmentation.ipynb](../../../../../../lessons/4-ComputerVision/12-Segmentation/lab/BodySegmentation.ipynb)を開いてラボを始めましょう。 +[BodySegmentation.ipynb](../../../../../../lessons/4-ComputerVision/12-Segmentation/lab/BodySegmentation.ipynb) を開いてラボを開始してください。 -## まとめ +## 学び -人体セグメンテーションは、人の画像を使って行う一般的なタスクの一つです。別の重要なタスクには、**スケルトン検出**や**ポーズ検出**が含まれます。これらのタスクがどのように実装されるかを確認するには、[OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)ライブラリを見てみてください。 +人体セグメンテーションは、人の画像を使ってできる一般的なタスクの一つに過ぎません。他にも重要なタスクとして、**骨格検出**や**ポーズ検出**があります。[OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) ライブラリを調べて、それらのタスクがどのように実装されるかを確認してください。 **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文の母国語の文書を権威ある情報源として考慮するべきです。重要な情報については、専門の人間翻訳をお勧めします。この翻訳の使用から生じる誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/README.md b/translations/ja/lessons/4-ComputerVision/README.md index 004d9e9c..007984e0 100644 --- a/translations/ja/lessons/4-ComputerVision/README.md +++ b/translations/ja/lessons/4-ComputerVision/README.md @@ -1,16 +1,25 @@ + # コンピュータビジョン ![コンピュータビジョンの内容をまとめたイラスト](../../../../translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.ja.png) -このセクションでは、以下のことを学びます: +このセクションでは以下について学びます: -* [コンピュータビジョンとOpenCVの紹介](06-IntroCV/README.md) +* [コンピュータビジョンとOpenCVの概要](06-IntroCV/README.md) * [畳み込みニューラルネットワーク](07-ConvNets/README.md) -* [事前学習済みネットワークと転移学習](08-TransferLearning/README.md) -* [オートエンコーダ](09-Autoencoders/README.md) -* [生成対抗ネットワーク](10-GANs/README.md) +* [事前学習済みネットワークと転移学習](08-TransferLearning/README.md) +* [オートエンコーダー](09-Autoencoders/README.md) +* [生成的敵対ネットワーク](10-GANs/README.md) * [物体検出](11-ObjectDetection/README.md) * [セマンティックセグメンテーション](12-Segmentation/README.md) **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳については、一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当方は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/13-TextRep/README.md b/translations/ja/lessons/5-NLP/13-TextRep/README.md index 155a90ba..ac3129de 100644 --- a/translations/ja/lessons/5-NLP/13-TextRep/README.md +++ b/translations/ja/lessons/5-NLP/13-TextRep/README.md @@ -1,53 +1,62 @@ + # テキストをテンソルとして表現する ## [講義前のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/113) ## テキスト分類 -このセクションの最初の部分では、**テキスト分類**タスクに焦点を当てます。私たちは、以下のようなニュース記事を含む[AG News](https://www.kaggle.com/amananandrai/ag-news-classification-dataset)データセットを使用します。 +このセクションの前半では、**テキスト分類**タスクに焦点を当てます。[AG News](https://www.kaggle.com/amananandrai/ag-news-classification-dataset) データセットを使用します。このデータセットには以下のようなニュース記事が含まれています: -* カテゴリー: Sci/Tech +* カテゴリ: Sci/Tech * タイトル: Ky. Company Wins Grant to Study Peptides (AP) -* 本文: AP - ケンタッキー大学の化学研究者によって設立された会社が、ペプチドを開発するための助成金を受けました... +* 本文: AP - ルイビル大学の化学研究者によって設立された企業が、ペプチドの研究を進めるための助成金を獲得しました... -私たちの目標は、テキストに基づいてニュース項目をカテゴリの一つに分類することです。 +私たちの目標は、テキストに基づいてニュース項目をカテゴリのいずれかに分類することです。 ## テキストの表現 -自然言語処理(NLP)タスクをニューラルネットワークで解決したい場合、テキストをテンソルとして表現する方法が必要です。コンピュータはすでに、ASCIIやUTF-8などのエンコーディングを使用して、テキスト文字を画面上のフォントにマッピングする数値として表現しています。 +ニューラルネットワークを使用して自然言語処理(NLP)タスクを解決する場合、テキストをテンソルとして表現する方法が必要です。コンピュータはすでにASCIIやUTF-8などのエンコーディングを使用して、画面上のフォントにマッピングされる数字として文字を表現しています。 文字をASCIIおよびバイナリ表現にマッピングする図を示す画像 > [画像の出典](https://www.seobility.net/en/wiki/ASCII) -人間として、私たちは各文字が**何を表しているか**を理解し、すべての文字がどのように組み合わさって文の単語を形成するかを理解しています。しかし、コンピュータはそれ自体ではそのような理解を持っておらず、ニューラルネットワークはトレーニング中に意味を学ぶ必要があります。 +人間は各文字が**何を表しているか**を理解し、すべての文字がどのように組み合わさって文の単語を形成するかを理解します。しかし、コンピュータ自体はそのような理解を持っておらず、ニューラルネットワークはトレーニング中にその意味を学習する必要があります。 -したがって、テキストを表現する際にはさまざまなアプローチを使用できます: +したがって、テキストを表現する際には以下のような異なるアプローチを使用できます: -* **文字レベルの表現**:テキストを各文字を数値として扱うことで表現します。テキストコーパスに*C*の異なる文字がある場合、単語*Hello*は5x*C*のテンソルで表現されます。各文字はワンホットエンコーディングのテンソル列に対応します。 -* **単語レベルの表現**:テキスト内のすべての単語の**語彙**を作成し、その後、ワンホットエンコーディングを使用して単語を表現します。このアプローチは、各文字自体にはあまり意味がないため、より高次の意味概念である単語を使用することでニューラルネットワークのタスクを簡素化するため、ある程度優れています。しかし、大きな辞書サイズを考慮すると、高次元のスパーステンソルに対処する必要があります。 +* **文字レベルの表現**:テキストを各文字を数字として扱うことで表現します。テキストコーパスに*C*種類の異なる文字がある場合、単語*Hello*は5x*C*のテンソルで表されます。各文字はワンホットエンコーディングでテンソルの列に対応します。 +* **単語レベルの表現**:テキスト内のすべての単語の**語彙**を作成し、ワンホットエンコーディングを使用して単語を表現します。このアプローチは文字単体ではあまり意味を持たないため、より高次の意味的概念である単語を使用することでニューラルネットワークのタスクを簡略化します。ただし、大きな辞書サイズにより、高次元のスパーステンソルを扱う必要があります。 -表現に関係なく、最初にテキストを**トークン**のシーケンスに変換する必要があります。1つのトークンは文字、単語、または時には単語の一部です。その後、トークンを数値に変換し、通常は**語彙**を使用して、この数値をワンホットエンコーディングを介してニューラルネットワークに供給します。 +どの表現方法を選ぶにしても、まずテキストを**トークン**のシーケンスに変換する必要があります。トークンは文字、単語、または単語の一部である場合があります。その後、通常は**語彙**を使用してトークンを数字に変換し、この数字をワンホットエンコーディングを使用してニューラルネットワークに入力します。 -## Nグラム +## N-Grams -自然言語において、単語の正確な意味は文脈の中でのみ決定できます。たとえば、*neural network*と*fishing network*の意味はまったく異なります。この点を考慮する方法の一つは、単語のペアに基づいてモデルを構築し、単語のペアを別々の語彙トークンとして扱うことです。この方法では、文*I like to go fishing*は次のトークンのシーケンスで表現されます:*I like*, *like to*, *to go*, *go fishing*。このアプローチの問題は、辞書のサイズが大幅に増加し、*go fishing*や*go shopping*のような組み合わせが異なるトークンによって表現され、同じ動詞にもかかわらず意味的な類似性を共有しないことです。 +自然言語では、単語の正確な意味は文脈によってのみ決定されます。例えば、*neural network*と*fishing network*の意味は完全に異なります。この文脈を考慮する方法の一つは、単語のペアをモデルに組み込み、単語ペアを別々の語彙トークンとして扱うことです。この方法では、文*I like to go fishing*は以下のトークンのシーケンスで表されます:*I like*、*like to*、*to go*、*go fishing*。このアプローチの問題点は、辞書サイズが大幅に増加し、*go fishing*と*go shopping*のような組み合わせが異なるトークンとして表されることです。これらは同じ動詞を使用しているにもかかわらず、意味的な類似性を共有しません。 -場合によっては、三語の組み合わせであるトライグラムを使用することも考えられます。このように、このアプローチはしばしば**n-grams**と呼ばれます。また、文字レベルの表現でn-gramsを使用することも理にかなっており、その場合n-gramsは異なる音節に大まかに対応します。 +場合によっては、三単語の組み合わせ(トライグラム)を使用することも検討できます。このアプローチは一般的に**n-grams**と呼ばれます。また、文字レベルの表現でn-gramsを使用することも理にかなっており、この場合n-gramsは異なる音節におおよそ対応します。 -## ボキャブラリとTF/IDF +## Bag-of-WordsとTF/IDF -テキスト分類のようなタスクを解決するためには、テキストを固定サイズのベクトルで表現できる必要があります。このベクトルを最終的な密な分類器への入力として使用します。これを行う最も簡単な方法の一つは、すべての個々の単語の表現を組み合わせること、つまり加算することです。各単語のワンホットエンコーディングを加えると、テキスト内で各単語が出現する回数を示す頻度ベクトルが得られます。このようなテキストの表現は**ボキャブラリ**(BoW)と呼ばれます。 +テキスト分類のようなタスクを解決する際には、固定サイズのベクトルでテキストを表現する必要があります。このベクトルを最終的な密結合分類器への入力として使用します。最も簡単な方法の一つは、個々の単語表現をすべて組み合わせることです。例えば、各単語のワンホットエンコーディングを加算すると、テキスト内で各単語が何回出現するかを示す頻度ベクトルが得られます。このようなテキストの表現は**Bag of Words**(BoW)と呼ばれます。 -> 作者による画像 +> 画像作成者 -BoWは、テキスト内に出現する単語とその数量を表現しており、テキストの内容を示す良い指標となります。たとえば、政治に関するニュース記事は、*president*や*country*などの単語を含む可能性が高く、科学的な出版物には*collider*や*discovered*などの単語が含まれるでしょう。したがって、単語の頻度は多くの場合、テキストの内容を示す良い指標となります。 +BoWはテキスト内にどの単語がどの程度出現するかを表し、テキストが何について書かれているかを示す良い指標となります。例えば、政治に関するニュース記事には*president*や*country*といった単語が含まれる可能性が高く、科学的な出版物には*collider*や*discovered*などの単語が含まれるでしょう。このように、単語の頻度は多くの場合、テキストの内容を示す良い指標となります。 -BoWの問題は、*and*や*is*などの特定の一般的な単語がほとんどのテキストに現れ、最高の頻度を持ち、実際に重要な単語を隠してしまうことです。これらの単語の重要性を低下させるために、単語が全体の文書コレクション内で出現する頻度を考慮に入れることができます。これがTF/IDFアプローチの主なアイデアであり、このレッスンに添付されたノートブックで詳しく説明されています。 +しかし、BoWの問題点は、*and*や*is*などの一般的な単語がほとんどのテキストに出現し、最も高い頻度を持つため、本当に重要な単語が隠れてしまうことです。このような単語の重要性を低下させるために、単語が文書全体で出現する頻度を考慮することができます。これがTF/IDFアプローチの主なアイデアであり、このレッスンに付属するノートブックで詳しく説明されています。 -しかし、これらのアプローチではテキストの**意味**を完全に考慮することはできません。これを行うためには、より強力なニューラルネットワークモデルが必要であり、これについてはこのセクションの後半で説明します。 +ただし、これらのアプローチではテキストの**意味論**を完全に考慮することはできません。これを実現するには、より強力なニューラルネットワークモデルが必要であり、このセクションの後半で詳しく説明します。 ## ✍️ 演習: テキスト表現 @@ -58,19 +67,19 @@ BoWの問題は、*and*や*is*などの特定の一般的な単語がほとん ## 結論 -これまでのところ、異なる単語に頻度の重みを追加できる技術を学びました。しかし、これらは意味や順序を表現することができません。著名な言語学者J. R. Firthが1935年に言ったように、「単語の完全な意味は常に文脈に依存しており、文脈から意味を除いた研究は真剣に受け止められません。」コースの後半では、言語モデリングを使用してテキストから文脈情報を取得する方法を学びます。 +これまでに、異なる単語に頻度の重みを付ける技術を学びました。しかし、これらの技術は意味や順序を表現することはできません。著名な言語学者J.R.ファースが1935年に述べたように、「単語の完全な意味は常に文脈的であり、文脈を無視した意味の研究は真剣に受け止められるべきではない。」このコースの後半では、言語モデルを使用してテキストから文脈情報を取得する方法を学びます。 ## 🚀 チャレンジ -ボキャブラリや異なるデータモデルを使用して他の演習に挑戦してみてください。この[コンペティション](https://www.kaggle.com/competitions/word2vec-nlp-tutorial/overview/part-1-for-beginners-bag-of-words)がインスピレーションになるかもしれません。 +Bag-of-Wordsや異なるデータモデルを使用した他の演習を試してみてください。この[Kaggleのコンペティション](https://www.kaggle.com/competitions/word2vec-nlp-tutorial/overview/part-1-for-beginners-bag-of-words)からインスピレーションを得るかもしれません。 ## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/213) -## レビューと自己学習 +## 復習と自己学習 -[Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste)でテキスト埋め込みとボキャブラリ技術を練習しましょう。 +[Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste)でテキスト埋め込みやBag-of-Words技術を練習してください。 ## [課題: ノートブック](assignment.md) -**免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の文書はその母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤訳については、当社は責任を負いません。 \ No newline at end of file +**免責事項**: +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/13-TextRep/assignment.md b/translations/ja/lessons/5-NLP/13-TextRep/assignment.md index 290a466d..807a105c 100644 --- a/translations/ja/lessons/5-NLP/13-TextRep/assignment.md +++ b/translations/ja/lessons/5-NLP/13-TextRep/assignment.md @@ -1,6 +1,15 @@ + # 課題: ノートブック -このレッスンに関連するノートブック(PyTorch版またはTensorFlow版)を使用して、自分のデータセットで再実行してください。Kaggleのデータセットを使用する場合は、出典を明記してください。ノートブックを書き直して、自分の発見を強調してください。NUFORCの[このUFO目撃情報に関するデータセット](https://www.kaggle.com/datasets/NUFORC/ufo-sightings)のように、驚くべき結果をもたらす可能性のある革新的なデータセットを試してみてください。 +このレッスンに関連するノートブック(PyTorch版またはTensorFlow版のいずれか)を使用して、自分自身のデータセットで再実行してください。例えば、Kaggleから取得したデータセットを使用し、出典を明記してください。ノートブックを書き直して、自分の発見を強調してください。驚きを与えるような革新的なデータセットを試してみてください。例えば、NUFORCの[UFO目撃情報に関するデータセット](https://www.kaggle.com/datasets/NUFORC/ufo-sightings)などがあります。 -**免責事項**: -この文書は、機械翻訳サービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。原文の母国語の文書を権威ある情報源と見なすべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file +**免責事項**: +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/14-Embeddings/README.md b/translations/ja/lessons/5-NLP/14-Embeddings/README.md index d07adcc0..c736367a 100644 --- a/translations/ja/lessons/5-NLP/14-Embeddings/README.md +++ b/translations/ja/lessons/5-NLP/14-Embeddings/README.md @@ -1,68 +1,77 @@ + # 埋め込み -## [講義前のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/114) +## [事前講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/114) -BoWやTF/IDFに基づく分類器を訓練する際、私たちは長さ`vocab_size`の高次元の袋-単語ベクトルを扱い、低次元の位置表現ベクトルから疎なワンホット表現に明示的に変換していました。しかし、このワンホット表現はメモリ効率が良くありません。さらに、各単語は互いに独立して扱われるため、ワンホットエンコードされたベクトルは単語間の意味的類似性を表現することができません。 +BoWやTF/IDFに基づく分類器をトレーニングする際、高次元の`vocab_size`長のバッグオブワードベクトルを操作し、低次元の位置表現ベクトルからスパースなワンホット表現に明示的に変換していました。しかし、このワンホット表現はメモリ効率が良くありません。また、各単語は互いに独立して扱われ、ワンホットエンコードされたベクトルは単語間の意味的な類似性を表現しません。 -**埋め込み**のアイデアは、単語を意味を反映した低次元の密なベクトルで表現することです。後で意味のある単語埋め込みを構築する方法について議論しますが、今は埋め込みを単語ベクトルの次元を下げる方法として考えましょう。 +**埋め込み**のアイデアは、単語を低次元の密なベクトルで表現し、単語の意味的な意味を何らかの形で反映させることです。後ほど意味のある単語埋め込みを構築する方法について議論しますが、今は埋め込みを単語ベクトルの次元を下げる方法として考えてみましょう。 -したがって、埋め込み層は単語を入力として受け取り、指定された`embedding_size`の出力ベクトルを生成します。ある意味では、これは`Linear`層と非常に似ていますが、ワンホットエンコードされたベクトルを受け取るのではなく、単語番号を入力として受け取ることができるため、大きなワンホットエンコードベクトルを作成する必要がなくなります。 +埋め込み層は単語を入力として受け取り、指定された`embedding_size`の出力ベクトルを生成します。ある意味では、`Linear`層に非常に似ていますが、ワンホットエンコードされたベクトルを受け取る代わりに、単語番号を入力として受け取ることができ、大きなワンホットエンコードされたベクトルを作成する必要がなくなります。 -分類器ネットワークの最初の層として埋め込み層を使用することで、私たちは袋-単語から**埋め込み袋**モデルに切り替えることができ、テキスト内の各単語を対応する埋め込みに変換し、`sum`、`average`、または`max`などの集約関数をこれらの埋め込み全体に対して計算します。 +分類器ネットワークの最初の層として埋め込み層を使用することで、バッグオブワードから**埋め込みバッグ**モデルに切り替えることができます。このモデルでは、テキスト内の各単語を対応する埋め込みに変換し、それらすべての埋め込みに対して`sum`、`average`、`max`などの集約関数を計算します。 -![五つの連続した単語の埋め込み分類器を示す画像。](../../../../../translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.ja.png) +![5つのシーケンス単語に対する埋め込み分類器を示す画像](../../../../../translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.ja.png) -> 画像提供者:著者 +> 著者による画像 -## ✍️ 演習:埋め込み +## ✍️ 演習: 埋め込み -次のノートブックで学習を続けましょう: -* [PyTorchによる埋め込み](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) -* [TensorFlowによる埋め込み](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) +以下のノートブックで学習を続けましょう: +* [PyTorchでの埋め込み](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) +* [TensorFlowでの埋め込み](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) -## 意味的埋め込み:Word2Vec +## 意味的埋め込み: Word2Vec -埋め込み層が単語をベクトル表現にマッピングすることを学習している間、この表現には必ずしも多くの意味的な意味があるわけではありません。似たような単語や同義語が、あるベクトル距離(例えば、ユークリッド距離)の観点で互いに近いベクトルに対応するようなベクトル表現を学習できれば良いでしょう。 +埋め込み層は単語をベクトル表現にマッピングすることを学習しましたが、この表現には必ずしも意味的な意味が含まれているわけではありません。類似した単語や同義語が、あるベクトル距離(例: ユークリッド距離)において互いに近いベクトルに対応するようなベクトル表現を学習できると良いでしょう。 -そのためには、特定の方法で大規模なテキストコレクションで埋め込みモデルを事前学習する必要があります。意味的埋め込みを訓練する方法の一つは[Word2Vec](https://en.wikipedia.org/wiki/Word2vec)と呼ばれています。これは、単語の分散表現を生成するために使用される2つの主要なアーキテクチャに基づいています: +これを実現するには、大量のテキストコーパスを特定の方法で事前トレーニングする必要があります。意味的埋め込みをトレーニングする1つの方法として[Word2Vec](https://en.wikipedia.org/wiki/Word2vec)があります。これは、単語の分散表現を生成するために使用される2つの主要なアーキテクチャに基づいています: - - **連続袋-単語**(CBoW) — このアーキテクチャでは、モデルは周囲の文脈から単語を予測するように訓練されます。ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$が与えられた場合、モデルの目標は$(W_{-2},W_{-1},W_1,W_2)$から$W_0$を予測することです。 - - **連続スキップグラム**はCBoWの逆です。モデルは周囲の文脈単語のウィンドウを使用して現在の単語を予測します。 +- **連続バッグオブワード** (CBoW) — このアーキテクチャでは、周囲の文脈から単語を予測するようにモデルをトレーニングします。ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$が与えられた場合、モデルの目標は$(W_{-2},W_{-1},W_1,W_2)$から$W_0$を予測することです。 +- **連続スキップグラム** — CBoWとは逆で、モデルは周囲の文脈単語のウィンドウを使用して現在の単語を予測します。 -CBoWは速いですが、スキップグラムは遅いですが、稀な単語をより良く表現することができます。 +CBoWは高速ですが、スキップグラムは遅いものの、頻度の低い単語をより良く表現します。 -![単語をベクトルに変換するためのCBoWとスキップグラムアルゴリズムの両方を示す画像。](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.ja.png) +![単語をベクトルに変換するためのCBoWとスキップグラムアルゴリズムを示す画像](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.ja.png) -> 画像出典:[この論文](https://arxiv.org/pdf/1301.3781.pdf) +> [この論文](https://arxiv.org/pdf/1301.3781.pdf)からの画像 -Word2Vecの事前学習済み埋め込み(およびGloVeなどの他の類似モデル)もニューラルネットワークの埋め込み層の代わりに使用できます。ただし、Word2Vec/GloVeの事前学習に使用された語彙は、私たちのテキストコーパスの語彙と異なる可能性があるため、語彙に対処する必要があります。この問題を解決する方法については、上記のノートブックを参照してください。 +Word2Vecの事前トレーニング済み埋め込み(およびGloVeのような他の類似モデル)は、ニューラルネットワークの埋め込み層の代わりとしても使用できます。ただし、語彙の問題に対処する必要があります。Word2Vec/GloVeを事前トレーニングする際に使用された語彙は、私たちのテキストコーパスの語彙と異なる可能性が高いからです。この問題を解決する方法については、上記のノートブックを参照してください。 -## コンテキスト埋め込み +## 文脈的埋め込み -Word2Vecのような従来の事前学習済み埋め込み表現の主な制限の一つは、単語の意味の曖昧性の問題です。事前学習済みの埋め込みは、文脈内の単語の意味の一部を捉えることができますが、単語の可能なすべての意味が同じ埋め込みにエンコードされています。これは、'play'のように文脈によって異なる意味を持つ多くの単語があるため、下流のモデルに問題を引き起こす可能性があります。 +Word2Vecのような従来の事前トレーニング済み埋め込み表現の主な制限の1つは、単語の意味の曖昧性の問題です。事前トレーニング済み埋め込みは、文脈における単語の意味をある程度捉えることができますが、単語のすべての可能な意味が同じ埋め込みにエンコードされます。これにより、例えば「play」のように文脈によって異なる意味を持つ単語では、下流のモデルで問題が発生する可能性があります。 -例えば、'play'という単語は以下の2つの異なる文でかなり異なる意味を持っています: +例えば、「play」という単語は以下の2つの文で全く異なる意味を持ちます: -- 私は劇場で**演劇**を見に行きました。 -- ジョンは友達と**遊びたい**と思っています。 +- 劇場で**play**を観ました。 +- ジョンは友達と**play**したいと思っています。 -上記の事前学習済み埋め込みは、これらの'play'の意味を同じ埋め込みで表現します。この制限を克服するためには、**言語モデル**に基づいた埋め込みを構築する必要があります。これは、大規模なテキストコーパスで訓練され、単語が異なる文脈でどのように組み合わされるかを*知っている*モデルです。コンテキスト埋め込みについての議論はこのチュートリアルの範囲外ですが、コースの後半で言語モデルについて話す際に再度触れる予定です。 +上記の事前トレーニング済み埋め込みでは、「play」のこれら2つの意味が同じ埋め込みに表現されています。この制限を克服するには、大量のテキストコーパスでトレーニングされた**言語モデル**に基づいて埋め込みを構築する必要があります。このモデルは、異なる文脈で単語がどのように組み合わされるかを「理解」しています。文脈的埋め込みについての議論はこのチュートリアルの範囲外ですが、コースの後半で言語モデルについて話す際に再び取り上げます。 ## 結論 -このレッスンでは、単語の意味をよりよく反映するために、TensorFlowとPytorchで埋め込み層を構築および使用する方法を学びました。 +このレッスンでは、TensorFlowとPyTorchを使用して埋め込み層を構築し、単語の意味的な意味をよりよく反映させる方法を学びました。 ## 🚀 チャレンジ -Word2Vecは、歌詞や詩を生成するなどの興味深いアプリケーションに使用されています。著者がWord2Vecを使用して詩を生成する方法を紹介している[この記事](https://www.politetype.com/blog/word2vec-color-poems)を見てみてください。また、[Dan Shiffmannによるこの動画](https://www.youtube.com/watch?v=LSS_bos_TPI&ab_channel=TheCodingTrain)も見て、別の説明を発見してください。次に、これらの技術をKaggleなどから取得した自分のテキストコーパスに適用してみてください。 +Word2Vecは、歌詞や詩の生成など、興味深いアプリケーションに使用されています。[この記事](https://www.politetype.com/blog/word2vec-color-poems)では、著者がWord2Vecを使用して詩を生成する方法を説明しています。また、[Dan Shiffmannによるこの動画](https://www.youtube.com/watch?v=LSS_bos_TPI&ab_channel=TheCodingTrain)も視聴して、この技術の別の説明を発見してください。その後、Kaggleなどから取得した独自のテキストコーパスにこれらの技術を適用してみてください。 -## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/214) +## [事後講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/214) -## レビューと自己学習 +## 復習と自己学習 -Word2Vecに関するこの論文を読んでください:[ベクトル空間における単語表現の効率的推定](https://arxiv.org/pdf/1301.3781.pdf) +Word2Vecに関するこの論文を読んでみてください: [Efficient Estimation of Word Representations in Vector Space](https://arxiv.org/pdf/1301.3781.pdf) -## [課題:ノートブック](assignment.md) +## [課題: ノートブック](assignment.md) **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳にはエラーや不正確さが含まれる可能性があることにご留意ください。元の文書はその母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳をお勧めします。この翻訳の使用から生じる誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/14-Embeddings/assignment.md b/translations/ja/lessons/5-NLP/14-Embeddings/assignment.md index 4efa8048..c0c48a25 100644 --- a/translations/ja/lessons/5-NLP/14-Embeddings/assignment.md +++ b/translations/ja/lessons/5-NLP/14-Embeddings/assignment.md @@ -1,6 +1,15 @@ + # 課題: ノートブック -このレッスンに関連するノートブック(PyTorch版またはTensorFlow版)を使用して、自分のデータセット(例えば、Kaggleからのもの)を使って再実行してください。使用する際は、出典を明記してください。ノートブックを改訂し、自分の発見を強調してください。異なる種類のデータセットを試して、その結果を文書化し、[これらのビートルズの歌詞](https://www.kaggle.com/datasets/jenlooper/beatles-lyrics)のようなテキストを使用してください。 +このレッスンに関連するノートブック(PyTorch版またはTensorFlow版のいずれか)を使用して、自分のデータセットで再実行してください。例えば、Kaggleから取得したデータセットを使用し、出典を明記してください。ノートブックを再構成し、自分の発見を強調してください。異なる種類のデータセットを試し、[このようなBeatlesの歌詞](https://www.kaggle.com/datasets/jenlooper/beatles-lyrics)のようなテキストを使用して結果を記録してください。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを追求していますが、自動翻訳にはエラーや不正確さが含まれる可能性があることをご理解ください。元の文書はその母国語で権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用から生じる誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/15-LanguageModeling/README.md b/translations/ja/lessons/5-NLP/15-LanguageModeling/README.md index d6c48cb8..e1ef6dfe 100644 --- a/translations/ja/lessons/5-NLP/15-LanguageModeling/README.md +++ b/translations/ja/lessons/5-NLP/15-LanguageModeling/README.md @@ -1,45 +1,54 @@ + # 言語モデリング -Word2VecやGloVeのような意味的埋め込みは、実際には**言語モデリング**への第一歩であり、言語の性質を*理解*(または*表現*)するモデルを作成することです。 +Word2VecやGloVeのようなセマンティック埋め込みは、実際には**言語モデリング**への第一歩です。これは、言語の性質を何らかの形で*理解*(または*表現*)するモデルを作成することを意味します。 -## [講義前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/115) +## [講義前のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/115) -言語モデリングの基本的なアイデアは、ラベルのないデータセットで無監督の方法でそれらを訓練することです。これは重要です。なぜなら、ラベルのない膨大な量のテキストが利用可能であるのに対し、ラベル付きテキストの量は常にラベリングに費やせる努力の量によって制限されるからです。最も一般的には、テキスト内の**欠落した単語を予測する**ことができる言語モデルを構築できます。なぜなら、テキスト内のランダムな単語をマスクして、それを訓練サンプルとして使用するのは簡単だからです。 +言語モデリングの主なアイデアは、ラベル付けされていないデータセットを教師なしで学習させることです。これは、ラベル付けされていないテキストが膨大に存在する一方で、ラベル付けされたテキストの量はラベル付けに費やせる労力によって常に制限されるため、重要です。多くの場合、テキスト内の**欠損している単語を予測する**言語モデルを構築できます。これは、テキスト内のランダムな単語をマスクして学習サンプルとして使用するのが簡単だからです。 -## 埋め込みの訓練 +## 埋め込みの学習 -前の例では、事前に訓練された意味的埋め込みを使用しましたが、これらの埋め込みがどのように訓練されるかを見るのは興味深いです。いくつかの可能なアイデアがあります: +前回の例では、事前に学習されたセマンティック埋め込みを使用しましたが、それらの埋め込みがどのように学習されるかを見るのも興味深いです。以下のようなアイデアがいくつかあります: -* **Nグラム**言語モデリング:N個の前のトークンを見てトークンを予測します(N-gram) -* **連続袋-of-単語**(CBoW):トークンシーケンス$W_{-N}$、...、$W_N$の中で中央のトークン$W_0$を予測します。 -* **スキップグラム**:中央のトークン$W_0$から隣接するトークンのセット{$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$}を予測します。 +* **Nグラム**言語モデリング:N個の前のトークンを見て次のトークンを予測する(Nグラム) +* **連続Bag-of-Words**(CBoW):トークン列$W_{-N}$, ..., $W_N$の中間トークン$W_0$を予測する +* **Skip-gram**:中間トークン$W_0$から、隣接するトークンの集合{$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$}を予測する ![単語をベクトルに変換するアルゴリズムの例](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.ja.png) -> [この論文](https://arxiv.org/pdf/1301.3781.pdf)からの画像 +> 画像出典:[この論文](https://arxiv.org/pdf/1301.3781.pdf) -## ✍️ 例のノートブック:CBoWモデルの訓練 +## ✍️ 例ノートブック: CBoWモデルの学習 以下のノートブックで学習を続けてください: -* [TensorFlowを使ったCBoW Word2Vecの訓練](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) -* [PyTorchを使ったCBoW Word2Vecの訓練](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) +* [TensorFlowを使ったCBoW Word2Vecの学習](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) +* [PyTorchを使ったCBoW Word2Vecの学習](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) ## 結論 -前のレッスンでは、単語埋め込みがまるで魔法のように機能することを見ました!これで、単語埋め込みの訓練はそれほど複雑なタスクではないことがわかり、必要に応じてドメイン特有のテキストのために自分自身の単語埋め込みを訓練できるはずです。 +前回のレッスンでは、単語埋め込みがまるで魔法のように機能することを学びました!今回の内容で、単語埋め込みの学習がそれほど複雑な作業ではないことが分かりました。必要に応じて、特定の分野のテキストに特化した単語埋め込みを自分で学習させることも可能です。 -## [講義後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/215) +## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/215) -## 復習 & 自習 +## 復習と自己学習 -* [言語モデリングに関する公式PyTorchチュートリアル](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html)。 -* [Word2Vecモデルの訓練に関する公式TensorFlowチュートリアル](https://www.TensorFlow.org/tutorials/text/word2vec)。 -* **gensim**フレームワークを使用して、数行のコードで最も一般的に使用される埋め込みを訓練する方法は、[このドキュメント](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html)で説明されています。 +* [PyTorch公式の言語モデリングチュートリアル](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html) +* [TensorFlow公式のWord2Vecモデル学習チュートリアル](https://www.TensorFlow.org/tutorials/text/word2vec) +* **gensim**フレームワークを使用して、数行のコードで最も一般的な埋め込みを学習する方法は[こちらのドキュメント](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html)に記載されています。 -## 🚀 [課題:スキップグラムモデルの訓練](lab/README.md) +## 🚀 [課題: Skip-Gramモデルを学習する](lab/README.md) -ラボでは、このレッスンのコードを変更してCBoWの代わりにスキップグラムモデルを訓練することに挑戦します。[詳細を読む](lab/README.md) +このラボでは、CBoWモデルのコードを変更してSkip-Gramモデルを学習させることに挑戦していただきます。[詳細はこちら](lab/README.md) **免責事項**: -この文書は、機械翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることにご留意ください。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用から生じる誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/15-LanguageModeling/lab/README.md b/translations/ja/lessons/5-NLP/15-LanguageModeling/lab/README.md index de8ec490..46b254b0 100644 --- a/translations/ja/lessons/5-NLP/15-LanguageModeling/lab/README.md +++ b/translations/ja/lessons/5-NLP/15-LanguageModeling/lab/README.md @@ -1,14 +1,23 @@ -# Skip-Gramモデルのトレーニング + +# スキップグラムモデルのトレーニング -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)からのラボ課題です。 +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) のラボ課題。 ## 課題 -このラボでは、Skip-Gram技術を使用してWord2Vecモデルをトレーニングすることに挑戦します。$N$トークン幅のSkip-Gramウィンドウ内で隣接する単語を予測するための埋め込みを持つネットワークをトレーニングします。このレッスンの[コード](../../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb)を使用し、少し修正しても構いません。 +このラボでは、スキップグラム手法を使用してWord2Vecモデルをトレーニングすることに挑戦します。埋め込みを使用して、$N$トークン幅のスキップグラムウィンドウ内の隣接する単語を予測するネットワークをトレーニングしてください。[このレッスンのコード](../../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb)を使用し、少し修正することができます。 ## データセット -任意の本を使用しても構いません。例えば、[Project Gutenberg](https://www.gutenberg.org/)では多くの無料テキストが見つかります。ここでは、ルイス・キャロルによる[Alice's Adventures in Wonderland](https://www.gutenberg.org/files/11/11-0.txt)への直接リンクを示します。また、以下のコードを使用してシェイクスピアの戯曲を取得することもできます。 +どんな本でも使用可能です。[Project Gutenberg](https://www.gutenberg.org/) には多くの無料テキストがあります。例えば、ルイス・キャロルの [不思議の国のアリス](https://www.gutenberg.org/files/11/11-0.txt) への直接リンクがあります。または、以下のコードを使用してシェイクスピアの戯曲を取得することもできます。 ```python path_to_file = tf.keras.utils.get_file( @@ -17,13 +26,13 @@ path_to_file = tf.keras.utils.get_file( text = open(path_to_file, 'rb').read().decode(encoding='utf-8') ``` -## 探索しよう! +## 探求してみよう! -時間があれば、さらに深く掘り下げてみてください。いくつかのことを探索してみましょう: +時間があり、さらに深く学びたい場合は、以下のことを試してみてください: -* 埋め込みサイズは結果にどのように影響しますか? -* 異なるテキストスタイルは結果にどのように影響しますか? -* 非常に異なるタイプの単語とその同義語をいくつか取り上げ、それらのベクトル表現を取得し、PCAを適用して次元を2に減らし、2D空間にプロットしてみてください。パターンが見えますか? +* 埋め込みサイズが結果にどのように影響するか? +* 異なる文体が結果にどのように影響するか? +* 非常に異なる種類の単語とその同義語をいくつか選び、それらのベクトル表現を取得し、PCAを適用して次元を2に削減し、2D空間にプロットしてみてください。何かパターンが見えますか? **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用によって生じた誤解や誤解釈については、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書を正式な情報源としてお考えください。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/16-RNN/README.md b/translations/ja/lessons/5-NLP/16-RNN/README.md index 52a91e32..05436f75 100644 --- a/translations/ja/lessons/5-NLP/16-RNN/README.md +++ b/translations/ja/lessons/5-NLP/16-RNN/README.md @@ -1,87 +1,96 @@ -# 再帰型ニューラルネットワーク + +# リカレントニューラルネットワーク (RNN) -## [講義前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/116) +## [事前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/116) -前のセクションでは、テキストの豊かな意味表現を使用し、その上にシンプルな線形分類器を置いてきました。このアーキテクチャの目的は、文中の単語の集約された意味を捉えることですが、単語の**順序**を考慮していません。なぜなら、埋め込みの上での集約操作が元のテキストからこの情報を取り除いてしまったからです。これらのモデルは単語の順序をモデル化できないため、テキスト生成や質問応答のような、より複雑または曖昧なタスクを解決できません。 +これまでのセクションでは、テキストのリッチなセマンティック表現と、その上に単純な線形分類器を使用してきました。このアーキテクチャは、文中の単語の集約された意味を捉えることができますが、埋め込みの上で行われる集約操作によって元のテキストからこの情報が失われるため、単語の**順序**を考慮することはできません。このため、これらのモデルは単語の順序をモデル化することができず、テキスト生成や質問応答のようなより複雑または曖昧なタスクを解くことができません。 -テキストシーケンスの意味を捉えるためには、**再帰型ニューラルネットワーク**(RNN)という別のニューラルネットワークアーキテクチャを使用する必要があります。RNNでは、文を1つのシンボルずつネットワークに通し、ネットワークは何らかの**状態**を生成し、その後次のシンボルと共に再びネットワークに渡します。 +テキストシーケンスの意味を捉えるためには、**リカレントニューラルネットワーク**(RNN)と呼ばれる別のニューラルネットワークアーキテクチャを使用する必要があります。RNNでは、文を1つのシンボルずつネットワークに通し、ネットワークはある**状態**を生成します。この状態を次のシンボルとともに再びネットワークに渡します。 ![RNN](../../../../../translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.ja.png) > 著者による画像 -入力トークンのシーケンス X0,...,Xn に対して、RNNはニューラルネットワークブロックのシーケンスを作成し、このシーケンスをバックプロパゲーションを使用してエンドツーエンドでトレーニングします。各ネットワークブロックはペア (Xi,Si) を入力として受け取り、結果として Si+1 を生成します。最終的な状態 Sn または(出力 Yn)は、結果を生成するために線形分類器に入ります。すべてのネットワークブロックは同じ重みを共有し、1回のバックプロパゲーションパスを使用してエンドツーエンドでトレーニングされます。 +トークンの入力シーケンス X0,...,Xn が与えられると、RNNはニューラルネットワークブロックのシーケンスを作成し、このシーケンスをバックプロパゲーションを使用してエンドツーエンドでトレーニングします。各ネットワークブロックは (Xi,Si) のペアを入力として受け取り、結果として Si+1 を生成します。最終状態 Sn または (出力 Yn) は線形分類器に渡され、結果を生成します。すべてのネットワークブロックは同じ重みを共有し、1回のバックプロパゲーションパスでエンドツーエンドでトレーニングされます。 -状態ベクトル S0,...,Sn がネットワークを通過するため、単語間の順次依存関係を学習することができます。たとえば、シーケンスのどこかに単語 *not* が現れると、状態ベクトル内の特定の要素を否定することを学習できます。これにより否定が生じます。 +状態ベクトル S0,...,Sn がネットワークを通じて渡されるため、単語間のシーケンシャルな依存関係を学習することができます。例えば、シーケンス内のどこかに単語 *not* が現れると、状態ベクトル内の特定の要素を否定することを学習し、否定を表現することができます。 -> ✅ 上の画像のすべての RNN ブロックの重みが共有されているため、同じ画像は再帰的なフィードバックループを持つ1つのブロック(右側)として表現できます。このループは、ネットワークの出力状態を入力に戻します。 +> ✅ 上記の図では、すべてのRNNブロックの重みが共有されているため、同じ図を1つのブロック(右側)として表現し、リカレントフィードバックループを持たせてネットワークの出力状態を入力に戻すことができます。 ## RNNセルの構造 -シンプルな RNN セルがどのように構成されているか見てみましょう。これは前の状態 Si-1 と現在のシンボル Xi を入力として受け取り、出力状態 Si を生成する必要があります(場合によっては、生成ネットワークの場合のように他の出力 Yi も興味があります)。 +単純なRNNセルがどのように構成されているかを見てみましょう。RNNセルは、前の状態 Si-1 と現在のシンボル Xi を入力として受け取り、出力状態 Si を生成します(場合によっては、生成ネットワークのように他の出力 Yi にも関心があります)。 -シンプルな RNN セルには2つの重み行列が内部にあります:1つは入力シンボルを変換し(これを W と呼びます)、もう1つは入力状態を変換します(H)。この場合、ネットワークの出力は σ(W×Xi+H×Si-1+b) として計算され、ここで σ は活性化関数、b は追加のバイアスです。 +単純なRNNセルには2つの重み行列があります。1つは入力シンボルを変換するもので(これをWと呼びます)、もう1つは入力状態を変換するものです(これをHと呼びます)。この場合、ネットワークの出力は σ(W×Xi+H×Si-1+b) として計算されます。ここで、σは活性化関数、bは追加のバイアスです。 RNNセルの構造 > 著者による画像 -多くの場合、入力トークンは RNN に入る前に埋め込み層を通過して次元を下げます。この場合、入力ベクトルの次元が *emb_size* で、状態ベクトルが *hid_size* の場合、W のサイズは *emb_size*×*hid_size*、H のサイズは *hid_size*×*hid_size* です。 +多くの場合、入力トークンはRNNに入る前に埋め込み層を通過して次元を下げます。この場合、入力ベクトルの次元が *emb_size*、状態ベクトルが *hid_size* の場合、Wのサイズは *emb_size*×*hid_size*、Hのサイズは *hid_size*×*hid_size* となります。 -## 長短期記憶(LSTM) +## 長短期記憶 (LSTM) -古典的な RNN の主な問題の1つは、いわゆる **消失勾配** 問題です。RNN は1回のバックプロパゲーションパスでエンドツーエンドでトレーニングされるため、ネットワークの最初の層にエラーを伝播するのが難しく、したがってネットワークは遠くのトークン間の関係を学習できません。この問題を回避する方法の1つは、いわゆる **ゲート** を使用して **明示的な状態管理** を導入することです。この種のよく知られたアーキテクチャには、**長短期記憶**(LSTM)と **ゲーテッドリレー単位**(GRU)があります。 +古典的なRNNの主な問題の1つは、いわゆる**勾配消失**問題です。RNNは1回のバックプロパゲーションパスでエンドツーエンドでトレーニングされるため、ネットワークの最初の層に誤差を伝播させるのが難しくなり、遠く離れたトークン間の関係を学習することができません。この問題を回避する1つの方法は、**ゲート**を使用して**明示的な状態管理**を導入することです。この種のよく知られたアーキテクチャには、**長短期記憶**(LSTM)と**ゲート付きリレー単位**(GRU)があります。 ![長短期記憶セルの例を示す画像](../../../../../lessons/5-NLP/16-RNN/images/long-short-term-memory-cell.svg) -> 画像の出典 TBD +> 画像ソース TBD -LSTM ネットワークは RNN と似た構造で組織されていますが、層から層へと渡される2つの状態があります:実際の状態 C と隠れベクトル H です。各ユニットでは、隠れベクトル Hi が入力 Xi と連結され、これらが **ゲート** を介して状態 C に何が起こるかを制御します。各ゲートはシグモイド活性化を持つニューラルネットワーク(出力範囲 [0,1])であり、状態ベクトルと掛け算することでビットマスクのように考えることができます。上の画像の左から右にかけて次のゲートがあります: +LSTMネットワークはRNNと似た構造を持っていますが、レイヤー間で渡される2つの状態(実際の状態Cと隠れベクトルH)があります。各ユニットでは、隠れベクトル Hi が入力 Xi と連結され、**ゲート**を介して状態Cに何が起こるかを制御します。各ゲートはシグモイド活性化(出力範囲[0,1])を持つニューラルネットワークであり、状態ベクトルと乗算されるとビットマスクのように考えることができます。以下のゲートがあります(上記の図で左から右へ): -* **忘却ゲート** は隠れベクトルを受け取り、ベクトル C のどの要素を忘れ、どの要素を通過させる必要があるかを決定します。 -* **入力ゲート** は入力と隠れベクトルからの情報を受け取り、状態に挿入します。 -* **出力ゲート** は状態を *tanh* 活性化を持つ線形層を介して変換し、その後隠れベクトル Hi を使用していくつかの要素を選択し、新しい状態 Ci+1 を生成します。 +* **忘却ゲート**は隠れベクトルを受け取り、ベクトルCのどの成分を忘れるべきか、どの成分を通過させるべきかを決定します。 +* **入力ゲート**は入力と隠れベクトルから情報を取り出し、状態に挿入します。 +* **出力ゲート**は状態を*tanh*活性化を持つ線形層を介して変換し、隠れベクトル Hi を使用してその一部を選択し、新しい状態 Ci+1 を生成します。 -状態 C の要素は、オンオフできるフラグのように考えることができます。たとえば、シーケンスの中で名前 *Alice* に遭遇した場合、これは女性キャラクターを指していると仮定し、文中に女性名詞があることを示すフラグを立てたいかもしれません。その後、*and Tom* というフレーズに遭遇すると、複数名詞があることを示すフラグを立てます。このように状態を操作することで、文の部分の文法的特性を追跡できると考えられます。 +状態Cの成分は、オンまたはオフに切り替えられるフラグのように考えることができます。例えば、シーケンス内で名前 *Alice* に出会ったとき、それが女性キャラクターを指していると仮定し、文中に女性名詞があるというフラグを状態に立てることができます。その後、*and Tom* というフレーズに出会ったとき、複数名詞があるというフラグを立てることができます。このようにして、状態を操作することで文の文法的特性を追跡することができます。 -> ✅ LSTM の内部を理解するための優れたリソースは、Christopher Olah によるこの素晴らしい記事 [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) です。 +> ✅ LSTMの内部を理解するための優れたリソースとして、Christopher Olahによる[Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/)という素晴らしい記事があります。 -## 双方向および多層 RNN +## 双方向および多層RNN -私たちは、シーケンスの始まりから終わりまでの1方向に操作する再帰型ネットワークについて議論しました。これは自然に見えます。なぜなら、私たちが読む方法や音声を聞く方法に似ているからです。しかし、多くの実用的なケースでは入力シーケンスにランダムにアクセスできるため、再帰計算を両方向で行うことが理にかなう場合があります。このようなネットワークは **双方向** RNN と呼ばれます。双方向ネットワークを扱う場合、各方向に対して2つの隠れ状態ベクトルが必要になります。 +これまで、シーケンスの始まりから終わりまで1方向に動作するリカレントネットワークについて説明しました。これは、私たちが読む方法や音声を聞く方法に似ているため自然に見えます。しかし、多くの実用的なケースでは入力シーケンスにランダムアクセスできるため、リカレント計算を両方向で実行する方が理にかなっている場合があります。このようなネットワークは**双方向**RNNと呼ばれます。双方向ネットワークを扱う場合、各方向に1つずつ、2つの隠れ状態ベクトルが必要です。 -再帰型ネットワークは、単方向でも双方向でも、シーケンス内の特定のパターンを捉え、それらを状態ベクトルに保存したり、出力に渡したりします。畳み込みネットワークと同様に、最初の層から抽出された低レベルのパターンから高レベルのパターンを捉えるために、別の再帰層をその上に構築することができます。これにより、出力が次の層に入力として渡される2つ以上の再帰ネットワークから構成される **多層 RNN** の概念に至ります。 +リカレントネットワーク(1方向または双方向)は、シーケンス内の特定のパターンを捉え、それを状態ベクトルに保存するか、出力に渡すことができます。畳み込みネットワークと同様に、最初の層で抽出された低レベルのパターンから高レベルのパターンを捉えるために、最初の層の上に別のリカレント層を構築することができます。これにより、**多層RNN**の概念が生まれます。これは、2つ以上のリカレントネットワークで構成され、前の層の出力が次の層の入力として渡されます。 -![多層長短期記憶 RNN の画像](../../../../../translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.ja.jpg) +![多層LSTM-RNNを示す画像](../../../../../translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.ja.jpg) -*画像は [この素晴らしい投稿](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) に由来しています。* +*Fernando Lópezによる[この素晴らしい投稿](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3)からの画像* -## ✍️ 演習:埋め込み +## ✍️ 演習: 埋め込み -次のノートブックで学習を続けてください: +以下のノートブックで学習を続けてください: -* [PyTorchによるRNN](../../../../../lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) -* [TensorFlowによるRNN](../../../../../lessons/5-NLP/16-RNN/RNNTF.ipynb) +* [PyTorchでのRNN](../../../../../lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) +* [TensorFlowでのRNN](../../../../../lessons/5-NLP/16-RNN/RNNTF.ipynb) ## 結論 -このユニットでは、RNN がシーケンス分類に使用できることを見てきましたが、実際にはテキスト生成、機械翻訳など、さらに多くのタスクを処理できます。次のユニットでは、これらのタスクについて考察します。 +このユニットでは、RNNがシーケンス分類に使用できることを見てきましたが、実際にはテキスト生成、機械翻訳など、さらに多くのタスクを処理できます。これらのタスクについては次のユニットで検討します。 ## 🚀 チャレンジ -LSTM に関する文献を読み、その応用を考えてみてください: +LSTMに関する文献を読み、その応用について考えてみてください: - [Grid Long Short-Term Memory](https://arxiv.org/pdf/1507.01526v1.pdf) - [Show, Attend and Tell: Neural Image Caption Generation with Visual Attention](https://arxiv.org/pdf/1502.03044v2.pdf) -## [講義後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/216) +## [事後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/216) ## 復習と自己学習 -- [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) by Christopher Olah. +- Christopher Olahによる[Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/)。 -## [課題:ノートブック](assignment.md) +## [課題: ノートブック](assignment.md) -**免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用から生じる誤解や誤解釈については、当社は責任を負いません。 \ No newline at end of file +**免責事項**: +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/16-RNN/assignment.md b/translations/ja/lessons/5-NLP/16-RNN/assignment.md index 8b974124..bfa47f08 100644 --- a/translations/ja/lessons/5-NLP/16-RNN/assignment.md +++ b/translations/ja/lessons/5-NLP/16-RNN/assignment.md @@ -1,6 +1,15 @@ + # 課題: ノートブック -このレッスンに関連するノートブック(PyTorch版またはTensorFlow版)を使用して、自分のデータセット(例えば、Kaggleからのもの)を使って再実行してください。使用する際は、出典を明記してください。ノートブックを書き直して、自分の発見を強調してください。異なる種類のデータセットを試し、発見を文書化してください。例えば、[このKaggleコンペティションの天気ツイートに関するデータセット](https://www.kaggle.com/competitions/crowdflower-weather-twitter/data?select=train.csv)のようなテキストを使用してください。 +このレッスンに関連するノートブック(PyTorch版またはTensorFlow版のいずれか)を使用して、自分のデータセットを使って再実行してください。例えば、Kaggleから取得したデータセットを適切に出典を明記して使用することができます。ノートブックを改訂し、自分の発見を強調してください。異なる種類のデータセットを試し、[このKaggleの天気に関するツイートのコンペティションデータセット](https://www.kaggle.com/competitions/crowdflower-weather-twitter/data?select=train.csv)のようなテキストを使って、発見を記録してください。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用から生じる誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書を正式な情報源としてお考えください。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/17-GenerativeNetworks/README.md b/translations/ja/lessons/5-NLP/17-GenerativeNetworks/README.md index a368ffc1..5832c58d 100644 --- a/translations/ja/lessons/5-NLP/17-GenerativeNetworks/README.md +++ b/translations/ja/lessons/5-NLP/17-GenerativeNetworks/README.md @@ -1,79 +1,88 @@ + # 生成ネットワーク -## [講義前のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/117) +## [事前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/117) -再帰神経ネットワーク(RNN)や、長短期記憶セル(LSTM)やゲート付き再帰ユニット(GRU)などのゲート付きセルのバリエーションは、言語モデリングのメカニズムを提供します。これにより、単語の順序を学習し、シーケンス内の次の単語の予測を行うことができます。これにより、RNNを使って、通常のテキスト生成、機械翻訳、さらには画像キャプション生成などの**生成タスク**に利用できるようになります。 +リカレントニューラルネットワーク(RNN)とそのゲート付きセルのバリエーション(Long Short Term Memory Cells(LSTM)やGated Recurrent Units(GRU)など)は、単語の順序を学習し、シーケンス内の次の単語を予測することで、言語モデリングのメカニズムを提供します。これにより、RNNを使用して、通常のテキスト生成、機械翻訳、さらには画像キャプション生成といった**生成タスク**を実行することが可能になります。 -> ✅ タイピング中にテキスト補完などの生成タスクから利益を得たことを思い出してみてください。お気に入りのアプリケーションがRNNを活用しているかどうか調査してみましょう。 +> ✅ テキスト入力中の補完機能など、生成タスクから恩恵を受けた経験を思い出してみてください。お気に入りのアプリケーションがRNNを活用しているかどうか調べてみましょう。 -前のユニットで議論したRNNアーキテクチャでは、各RNNユニットは次の隠れ状態を出力として生成しました。しかし、各再帰ユニットにもう一つの出力を追加することもでき、これにより**シーケンス**(元のシーケンスと同じ長さ)を出力できるようになります。さらに、各ステップで入力を受け取らず、初期状態ベクトルを受け取ってから出力のシーケンスを生成するRNNユニットを使用することもできます。 +前のユニットで説明したRNNアーキテクチャでは、各RNNユニットが次の隠れ状態を出力として生成しました。しかし、各リカレントユニットに別の出力を追加することも可能で、これにより元のシーケンスと同じ長さの**シーケンス**を出力することができます。さらに、各ステップで入力を受け取らず、初期状態ベクトルだけを受け取り、出力シーケンスを生成するRNNユニットを使用することもできます。 -これにより、以下の図に示すような異なる神経アーキテクチャが可能になります。 +これにより、以下の図に示されるようなさまざまなニューラルアーキテクチャが可能になります: -![一般的な再帰神経ネットワークパターンを示す画像。](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.ja.jpg) +![一般的なリカレントニューラルネットワークのパターンを示す画像。](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.ja.jpg) -> 画像は[Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)のブログ投稿からのもので、[Andrej Karpaty](http://karpathy.github.io/)によるものです。 +> 画像出典:[Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)(Andrej Karpaty氏の[ブログ](http://karpathy.github.io/)より) -* **一対一**は、入力が1つと出力が1つの従来の神経ネットワークです。 -* **一対多**は、1つの入力値を受け取り、出力値のシーケンスを生成する生成アーキテクチャです。たとえば、画像のテキスト説明を生成する**画像キャプション生成**ネットワークを訓練したい場合、画像を入力としてCNNを通して隠れ状態を取得し、再帰的なチェーンでキャプションを単語ごとに生成することができます。 -* **多対一**は、前のユニットで説明したRNNアーキテクチャに対応し、テキスト分類などがあります。 -* **多対多**、または**シーケンス対シーケンス**は、**機械翻訳**のようなタスクに対応し、最初のRNNが入力シーケンスから隠れ状態にすべての情報を集め、別のRNNチェーンがこの状態を出力シーケンスに展開します。 +* **One-to-one** は、1つの入力と1つの出力を持つ従来のニューラルネットワークです。 +* **One-to-many** は、1つの入力値を受け取り、出力値のシーケンスを生成する生成アーキテクチャです。たとえば、画像のテキスト説明を生成する**画像キャプション生成**ネットワークを訓練したい場合、画像を入力として受け取り、それをCNNに通して隠れ状態を取得し、その後リカレントチェーンが単語ごとにキャプションを生成します。 +* **Many-to-one** は、前のユニットで説明したRNNアーキテクチャ(例:テキスト分類)に対応します。 +* **Many-to-many** または **sequence-to-sequence** は、**機械翻訳**のようなタスクに対応します。この場合、最初のRNNが入力シーケンスからすべての情報を隠れ状態に収集し、別のRNNチェーンがこの状態を展開して出力シーケンスを生成します。 -このユニットでは、テキスト生成を助けるシンプルな生成モデルに焦点を当てます。簡単のために、文字レベルのトークン化を使用します。 +このユニットでは、テキスト生成を助けるシンプルな生成モデルに焦点を当てます。簡単のため、文字レベルのトークン化を使用します。 -このRNNを段階的にテキスト生成するために訓練します。各ステップでは、長さ`nchars`の文字のシーケンスを取得し、ネットワークに対して各入力文字に対する次の出力文字を生成するように求めます: +このRNNを訓練して、ステップごとにテキストを生成します。各ステップで、長さ`nchars`の文字列を取り、ネットワークに各入力文字に対して次の出力文字を生成させます: -![「HELLO」という単語のRNN生成の例を示す画像。](../../../../../translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.ja.png) +![単語「HELLO」を生成するRNNの例を示す画像。](../../../../../translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.ja.png) -テキストを生成する際(推論中)、いくつかの**プロンプト**から始め、それをRNNセルを通して中間状態を生成し、その状態から生成が始まります。1文字ずつ生成し、状態と生成された文字を別のRNNセルに渡して次の文字を生成し、十分な文字を生成するまで続けます。 +テキスト生成(推論中)では、まず**プロンプト**をRNNセルに渡して中間状態を生成し、その状態から生成を開始します。1文字ずつ生成し、状態と生成された文字を次のRNNセルに渡して次の文字を生成します。このプロセスを繰り返して十分な文字数を生成します。 -> 画像は著者によるものです。 +> 画像作成者:著者 -## ✍️ 演習: 生成ネットワーク +## ✍️ 演習:生成ネットワーク 以下のノートブックで学習を続けてください: -* [PyTorchによる生成ネットワーク](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) -* [TensorFlowによる生成ネットワーク](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) +* [PyTorchを使った生成ネットワーク](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) +* [TensorFlowを使った生成ネットワーク](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) ## ソフトテキスト生成と温度 -各RNNセルの出力は文字の確率分布です。常に最も高い確率の文字を生成されたテキストの次の文字として選択すると、テキストはしばしば同じ文字シーケンスの間で「循環」してしまうことがあります。例えば、次のような場合です: +各RNNセルの出力は文字の確率分布です。生成されたテキストの次の文字として常に最も高い確率の文字を選ぶと、以下の例のように同じ文字列が繰り返される「ループ」状態になることがあります: ``` today of the second the company and a second the company ... ``` -しかし、次の文字の確率分布を見ると、最も高い確率のいくつかの間の差がそれほど大きくない場合があります。例えば、ある文字が確率0.2、別の文字が0.19などです。例えば、シーケンス'*play*'の次の文字を探すとき、次の文字はスペースでも**e**(*player*という単語のように)でも同様に可能です。 +しかし、次の文字の確率分布を見ると、最も高い確率の文字と2番目に高い確率の文字の差がそれほど大きくない場合があります。たとえば、ある文字が確率0.2、別の文字が0.19である場合などです。たとえば、シーケンス「*play*」の次の文字を探すとき、次の文字はスペースでも**e**(単語*player*のように)でも同じくらい適切である可能性があります。 -これは、常に高い確率の文字を選択することが「公平」ではないという結論につながります。なぜなら、2番目に高い確率の文字を選んでも意味のあるテキストに到達する可能性があるからです。ネットワークの出力によって与えられる確率分布から文字を**サンプリング**する方が賢明です。また、確率分布を平坦にする**温度**というパラメータを使用して、より多くのランダム性を追加したり、最も高い確率の文字により固執するために急峻にしたりすることができます。 +このことから、常に最も高い確率の文字を選ぶのが「公平」とは限らないという結論に至ります。2番目に高い確率の文字を選ぶことでも意味のあるテキストが生成される可能性があります。ネットワーク出力による確率分布から文字を**サンプリング**する方が賢明です。また、**温度**というパラメータを使用して、確率分布を平坦化してランダム性を増やしたり、逆に急峻にして最も高い確率の文字により忠実に従うこともできます。 -このソフトテキスト生成が上記のノートブックでどのように実装されているかを探ってみてください。 +このソフトテキスト生成がどのように実装されているか、上記のノートブックで確認してください。 ## 結論 -テキスト生成はそれ自体に有用かもしれませんが、主な利点は、初期の特徴ベクトルからRNNを使用してテキストを生成する能力にあります。例えば、テキスト生成は機械翻訳の一部として使用されます(この場合、*エンコーダ*からの状態ベクトルが翻訳されたメッセージを生成または*デコード*するために使用されます)や、画像のテキスト説明を生成する場合(この場合、特徴ベクトルはCNNエクストラクタから得られます)。 +テキスト生成自体が有用である場合もありますが、RNNを使用して初期の特徴ベクトルからテキストを生成する能力が大きな利点となります。たとえば、テキスト生成は機械翻訳(シーケンス・ツー・シーケンス。この場合、*エンコーダ*の状態ベクトルが翻訳されたメッセージを生成または*デコード*するために使用されます)や、画像のテキスト説明を生成する(この場合、特徴ベクトルはCNN抽出器から得られます)際に使用されます。 ## 🚀 チャレンジ -このトピックに関するMicrosoft Learnのレッスンを受けてみてください。 +このトピックに関するMicrosoft Learnのレッスンを受講してください: -* テキスト生成に関する[PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/6-generative-networks/?WT.mc_id=academic-77998-cacaste)/[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/5-generative-networks/?WT.mc_id=academic-77998-cacaste) +* [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/6-generative-networks/?WT.mc_id=academic-77998-cacaste)/[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/5-generative-networks/?WT.mc_id=academic-77998-cacaste)を使ったテキスト生成 -## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/217) +## [事後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/217) ## 復習と自己学習 -知識を広げるためのいくつかの記事を紹介します。 +知識を深めるための参考記事: -* マルコフ連鎖、LSTM、GPT-2によるテキスト生成の異なるアプローチ:[ブログ投稿](https://towardsdatascience.com/text-generation-gpt-2-lstm-markov-chain-9ea371820e1e) +* マルコフ連鎖、LSTM、GPT-2を用いたテキスト生成のさまざまなアプローチ:[ブログ記事](https://towardsdatascience.com/text-generation-gpt-2-lstm-markov-chain-9ea371820e1e) * [Kerasドキュメント](https://keras.io/examples/generative/lstm_character_level_text_generation/)のテキスト生成サンプル ## [課題](lab/README.md) -文字単位でテキストを生成する方法を見てきました。ラボでは、単語単位のテキスト生成を探求します。 +文字ごとのテキスト生成方法を学びました。ラボでは単語レベルのテキスト生成を探求します。 **免責事項**: -この文書は、機械翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/17-GenerativeNetworks/lab/README.md b/translations/ja/lessons/5-NLP/17-GenerativeNetworks/lab/README.md index f37a7c6e..a783594b 100644 --- a/translations/ja/lessons/5-NLP/17-GenerativeNetworks/lab/README.md +++ b/translations/ja/lessons/5-NLP/17-GenerativeNetworks/lab/README.md @@ -1,14 +1,23 @@ -# RNNを用いた単語レベルのテキスト生成 + +# RNNを使用した単語レベルのテキスト生成 -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)からのラボ課題です。 +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)からの課題。 ## 課題 -このラボでは、任意の本を取り、それをデータセットとして使用して単語レベルのテキストジェネレーターを訓練する必要があります。 +このラボでは、任意の本を選び、それをデータセットとして使用して単語レベルのテキスト生成器を訓練する必要があります。 ## データセット -任意の本を使用しても構いません。例えば、[Project Gutenberg](https://www.gutenberg.org/)には多くの無料テキストがあります。ここでは、ルイス・キャロルによる[Alice's Adventures in Wonderland](https://www.gutenberg.org/files/11/11-0.txt)への直接リンクを示します。 +どの本でも使用可能です。無料のテキストは[Project Gutenberg](https://www.gutenberg.org/)でたくさん見つけることができます。例えば、ルイス・キャロルの[不思議の国のアリス](https://www.gutenberg.org/files/11/11-0.txt)への直接リンクがあります。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳にはエラーや不正確さが含まれる可能性があることにご注意ください。原文のネイティブ言語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/18-Transformers/README.md b/translations/ja/lessons/5-NLP/18-Transformers/README.md new file mode 100644 index 00000000..f2e52658 --- /dev/null +++ b/translations/ja/lessons/5-NLP/18-Transformers/README.md @@ -0,0 +1,121 @@ + +# 注意メカニズムとトランスフォーマー + +## [事前講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/118) + +NLP分野で最も重要な問題の1つは**機械翻訳**であり、Google翻訳のようなツールの基盤となる重要なタスクです。このセクションでは、機械翻訳、またはより一般的には*シーケンス間変換*タスク(**文変換**とも呼ばれる)に焦点を当てます。 + +RNNを使用すると、シーケンス間変換は2つのリカレントネットワークによって実装されます。1つのネットワークである**エンコーダ**は入力シーケンスを隠れ状態に圧縮し、もう1つのネットワークである**デコーダ**はこの隠れ状態を展開して翻訳結果を生成します。このアプローチにはいくつかの問題があります: + +* エンコーダネットワークの最終状態が文の冒頭を記憶するのが難しく、長い文ではモデルの品質が低下する +* シーケンス内のすべての単語が結果に同じ影響を与える。しかし実際には、入力シーケンス内の特定の単語が他の単語よりも出力に大きな影響を与えることが多い。 + +**注意メカニズム**は、RNNの各出力予測に対する各入力ベクトルの文脈的影響を重み付けする手段を提供します。これを実現する方法は、入力RNNの中間状態と出力RNNの間にショートカットを作成することです。この方法では、出力記号ytを生成する際に、異なる重み係数αt,iを用いてすべての入力隠れ状態hiを考慮します。 + +![エンコーダ/デコーダモデルと加法型注意層を示す画像](../../../../../translated_images/encoder-decoder-attention.7a726296894fb567aa2898c94b17b3289087f6705c11907df8301df9e5eeb3de.ja.png) + +> [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf)の加法型注意メカニズムを持つエンコーダ-デコーダモデル、[このブログ記事](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html)から引用 + +注意行列{αi,j}は、出力シーケンス内の特定の単語の生成において、入力単語が果たす役割の程度を表します。以下はそのような行列の例です: + +![Bahdanau - arviz.orgから引用されたRNNsearch-50によるサンプルアラインメントを示す画像](../../../../../translated_images/bahdanau-fig3.09ba2d37f202a6af11de6c82d2d197830ba5f4528d9ea430eb65fd3a75065973.ja.png) + +> [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) (Fig.3)から引用 + +注意メカニズムは、現在またはほぼ現在のNLPの最先端技術の多くを支えています。しかし注意を追加するとモデルパラメータの数が大幅に増加し、RNNのスケーリング問題を引き起こしました。RNNのスケーリングにおける重要な制約は、モデルのリカレント性がトレーニングのバッチ化と並列化を困難にすることです。RNNではシーケンスの各要素を順序通りに処理する必要があり、簡単に並列化することができません。 + +![注意付きエンコーダデコーダ](../../../../../lessons/5-NLP/18-Transformers/images/EncDecAttention.gif) + +> [Googleのブログ](https://research.googleblog.com/2016/09/a-neural-network-for-machine.html)から引用 + +注意メカニズムの採用とこの制約が組み合わさり、現在私たちが使用している最先端のトランスフォーマーモデル(BERTやOpen-GPT3など)が誕生しました。 + +## トランスフォーマーモデル + +トランスフォーマーの背後にある主なアイデアの1つは、RNNの逐次性を回避し、トレーニング中に並列化可能なモデルを作成することです。これを実現するために、以下の2つのアイデアが実装されています: + +* 位置エンコーディング +* RNN(またはCNN)の代わりに自己注意メカニズムを使用してパターンを捉える(そのため、トランスフォーマーを紹介する論文は*「Attention is all you need」*と呼ばれています) + +### 位置エンコーディング/埋め込み + +位置エンコーディングのアイデアは以下の通りです: +1. RNNを使用する場合、トークンの相対位置はステップ数によって表されるため、明示的に表現する必要はありません。 +2. しかし、注意に切り替えると、シーケンス内のトークンの相対位置を知る必要があります。 +3. 位置エンコーディングを得るために、トークンのシーケンスにシーケンス内のトークン位置(つまり、0,1,...の数列)を追加します。 +4. 次に、トークン位置をトークン埋め込みベクトルと混ぜ合わせます。位置(整数)をベクトルに変換するために、以下のような異なるアプローチを使用できます: + +* トークン埋め込みに似た学習可能な埋め込み。このアプローチをここで検討します。トークンとその位置の両方に埋め込み層を適用し、同じ次元の埋め込みベクトルを生成し、それらを加算します。 +* 元の論文で提案された固定位置エンコーディング関数。 + + + +> 著者による画像 + +位置埋め込みを使用することで、元のトークンとそのシーケンス内の位置の両方を埋め込む結果が得られます。 + +### マルチヘッド自己注意 + +次に、シーケンス内のパターンを捉える必要があります。これを行うために、トランスフォーマーは**自己注意**メカニズムを使用します。これは、入力と出力として同じシーケンスに適用される注意です。自己注意を適用することで、文内の**文脈**を考慮し、どの単語が相互に関連しているかを確認できます。例えば、*it*のような共参照が指す単語を確認し、文脈を考慮することができます: + +![](../../../../../translated_images/CoreferenceResolution.861924d6d384a7d68d8d0039d06a71a151f18a796b8b1330239d3590bd4947eb.ja.png) + +> [Googleのブログ](https://research.googleblog.com/2017/08/transformer-novel-neural-network.html)から引用 + +トランスフォーマーでは、**マルチヘッド注意**を使用して、ネットワークが異なる種類の依存関係(例:長期的 vs 短期的な単語関係、共参照 vs その他)を捉える能力を与えます。 + +[TensorFlow Notebook](../../../../../lessons/5-NLP/18-Transformers/TransformersTF.ipynb)には、トランスフォーマーレイヤーの実装に関する詳細が含まれています。 + +### エンコーダ-デコーダ注意 + +トランスフォーマーでは、注意は以下の2つの場所で使用されます: + +* 自己注意を使用して入力テキスト内のパターンを捉える +* シーケンス翻訳を実行する - これはエンコーダとデコーダ間の注意層です。 + +エンコーダ-デコーダ注意は、セクションの冒頭で説明したRNNで使用される注意メカニズムと非常に似ています。このアニメーション図は、エンコーダ-デコーダ注意の役割を説明しています。 + +![トランスフォーマーモデルで評価がどのように行われるかを示すアニメーションGIF](../../../../../lessons/5-NLP/18-Transformers/images/transformer-animated-explanation.gif) + +各入力位置が各出力位置に独立してマッピングされるため、トランスフォーマーはRNNよりも並列化が容易であり、より大規模で表現力豊かな言語モデルを可能にします。各注意ヘッドは、単語間の異なる関係を学習するために使用され、下流の自然言語処理タスクを改善します。 + +## BERT + +**BERT**(Bidirectional Encoder Representations from Transformers)は、非常に大規模な多層トランスフォーマーネットワークであり、*BERT-base*では12層、*BERT-large*では24層を持ちます。このモデルは、まず大規模なテキストデータ(Wikipedia + 書籍)を使用して教師なし学習(文中のマスクされた単語を予測する)で事前学習されます。事前学習中にモデルは言語理解の重要なレベルを吸収し、その後他のデータセットで微調整することで活用できます。このプロセスは**転移学習**と呼ばれます。 + +![http://jalammar.github.io/illustrated-bert/からの画像](../../../../../translated_images/jalammarBERT-language-modeling-masked-lm.34f113ea5fec4362e39ee4381aab7cad06b5465a0b5f053a0f2aa05fbe14e746.ja.png) + +> [画像の出典](http://jalammar.github.io/illustrated-bert/) + +## ✍️ 演習: トランスフォーマー + +以下のノートブックで学習を続けてください: + +* [PyTorchでのトランスフォーマー](../../../../../lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) +* [TensorFlowでのトランスフォーマー](../../../../../lessons/5-NLP/18-Transformers/TransformersTF.ipynb) + +## 結論 + +このレッスンでは、トランスフォーマーと注意メカニズムについて学びました。これらはNLPツールボックスの中で重要なツールです。トランスフォーマーアーキテクチャには、BERT、DistilBERT、BigBird、OpenGPT3など多くのバリエーションがあり、微調整が可能です。[HuggingFaceパッケージ](https://github.com/huggingface/)は、PyTorchとTensorFlowの両方でこれらのアーキテクチャをトレーニングするためのリポジトリを提供しています。 + +## 🚀 チャレンジ + +## [事後講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/218) + +## レビューと自己学習 + +* トランスフォーマーに関する古典的な論文[Attention is all you need](https://arxiv.org/abs/1706.03762)を説明する[ブログ記事](https://mchromiak.github.io/articles/2017/Sep/12/Transformer-Attention-is-all-you-need/) +* トランスフォーマーのアーキテクチャを詳細に説明する[一連のブログ記事](https://towardsdatascience.com/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452) + +## [課題](assignment.md) + +**免責事項**: +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/18-Transformers/assignment.md b/translations/ja/lessons/5-NLP/18-Transformers/assignment.md index 011dbf2a..5e660b93 100644 --- a/translations/ja/lessons/5-NLP/18-Transformers/assignment.md +++ b/translations/ja/lessons/5-NLP/18-Transformers/assignment.md @@ -1,6 +1,15 @@ -# 課題: トランスフォーマー + +# 課題: Transformers -HuggingFaceでトランスフォーマーを試してみましょう!彼らのサイトで利用可能なさまざまなモデルを使うために提供されているスクリプトのいくつかを試してみてください: https://huggingface.co/docs/transformers/run_scripts。彼らのデータセットの1つを試してみた後、このカリキュラムやKaggleから自分のデータセットをインポートして、興味深いテキストを生成できるか見てみましょう。結果をまとめたノートブックを作成してください。 +HuggingFaceでTransformersを試してみましょう!彼らが提供しているスクリプトを使って、サイト上で利用可能なさまざまなモデルを試してみてください: https://huggingface.co/docs/transformers/run_scripts。彼らのデータセットの1つを試した後、このカリキュラムやKaggleから独自のデータセットをインポートして、興味深いテキストを生成できるか確認してみましょう。結果をまとめたノートブックを作成してください。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されました。正確さを追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。原文はその母国語で権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用によって生じる誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当方は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/19-NER/README.md b/translations/ja/lessons/5-NLP/19-NER/README.md index 969bc3b9..dc405330 100644 --- a/translations/ja/lessons/5-NLP/19-NER/README.md +++ b/translations/ja/lessons/5-NLP/19-NER/README.md @@ -1,38 +1,47 @@ -# 名前付きエンティティ認識 + +# 固有表現認識 -これまで、私たちは主に1つのNLPタスク、すなわち分類に集中してきました。しかし、ニューラルネットワークを使用して達成できる他のNLPタスクも存在します。その中の1つが**[名前付きエンティティ認識](https://wikipedia.org/wiki/Named-entity_recognition)**(NER)であり、これはテキスト内の特定のエンティティ、たとえば場所、人名、日付・時間の範囲、化学式などを認識することに関係しています。 +これまでのところ、主に1つのNLPタスク、つまり分類に集中してきました。しかし、ニューラルネットワークを使用して達成できる他のNLPタスクも存在します。その1つが**[固有表現認識](https://wikipedia.org/wiki/Named-entity_recognition)**(NER)で、これはテキスト内の特定のエンティティ(場所、人名、日時、化学式など)を認識することを扱います。 -## [講義前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/119) +## [講義前のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/119) ## NERの使用例 -たとえば、Amazon AlexaやGoogle Assistantのような自然言語チャットボットを開発したいとします。インテリジェントなチャットボットが機能する方法は、入力文に対してテキスト分類を行うことでユーザーが求めていることを*理解*することです。この分類の結果は、チャットボットが何をすべきかを決定する**意図**と呼ばれます。 +例えば、Amazon AlexaやGoogleアシスタントのような自然言語チャットボットを開発したいとします。インテリジェントなチャットボットが動作する仕組みは、入力された文に対してテキスト分類を行い、ユーザーが何を求めているのかを*理解*することです。この分類の結果がいわゆる**インテント**であり、チャットボットが何をすべきかを決定します。 Bot NER > 著者による画像 -しかし、ユーザーはフレーズの一部としていくつかのパラメータを提供する場合があります。たとえば、天気を尋ねるとき、彼女は場所や日付を指定するかもしれません。ボットはこれらのエンティティを理解し、アクションを実行する前にパラメータスロットを適切に埋める必要があります。これがまさにNERの出番です。 +しかし、ユーザーがフレーズの一部としていくつかのパラメータを提供する場合があります。例えば、天気を尋ねる際に、場所や日付を指定することがあります。ボットはこれらのエンティティを理解し、アクションを実行する前にパラメータスロットを適切に埋める必要があります。これがまさにNERの出番です。 -> ✅ 別の例としては、[科学的な医療論文の分析](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)が挙げられます。私たちが探すべき主要なことの1つは、病気や医療物質などの特定の医療用語です。少数の病気は部分文字列検索を使用して抽出できるかもしれませんが、化学化合物や薬の名前などのより複雑なエンティティには、より複雑なアプローチが必要です。 +> ✅ 別の例としては、[科学的な医療論文の分析](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)があります。ここで探すべき主なものは、疾患や医薬品などの特定の医療用語です。少数の疾患であれば部分文字列検索で抽出できるかもしれませんが、化学化合物や薬剤名のような複雑なエンティティには、より高度なアプローチが必要です。 ## トークン分類としてのNER -NERモデルは本質的に**トークン分類モデル**です。なぜなら、各入力トークンがエンティティに属するかどうかを判断する必要があり、属する場合はどのエンティティクラスに属するかを決定する必要があるからです。 +NERモデルは本質的に**トークン分類モデル**です。なぜなら、入力された各トークンがエンティティに属するかどうか、そして属する場合はどのエンティティクラスに属するかを決定する必要があるからです。 -次の論文のタイトルを考えてみましょう: +以下の論文タイトルを考えてみましょう: -**三尖弁逆流**と**炭酸リチウム**の**毒性**についての新生児。 +**三尖弁逆流**と**炭酸リチウム**の**毒性**が新生児に見られる。 -ここでのエンティティは次の通りです: +ここでのエンティティは以下の通りです: -* 三尖弁逆流は病気です (`DIS`) -* 炭酸リチウムは化学物質です (`CHEM`) -* 毒性も病気です (`DIS`) +* 三尖弁逆流は疾患(`DIS`) +* 炭酸リチウムは化学物質(`CHEM`) +* 毒性も疾患(`DIS`) -1つのエンティティが複数のトークンにまたがることに注意してください。そして、この場合のように、2つの連続したエンティティを区別する必要があります。したがって、各エンティティに対して2つのクラスを使用するのが一般的です。1つはエンティティの最初のトークンを指定し(通常は`B-`プレフィックスが使用されます、つまり**b**eginning)、もう1つはエンティティの続きです(`I-`、つまり**i**nner token)。また、`O`をすべての**o**therトークンを表すクラスとして使用します。このようなトークンタグ付けは、[BIOタグ付け](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging))(またはIOB)と呼ばれます。タグ付けされると、私たちのタイトルは次のようになります: +1つのエンティティが複数のトークンにまたがることがあります。また、この例のように、2つの連続するエンティティを区別する必要があります。そのため、各エンティティに対して2つのクラスを使用するのが一般的です。1つはエンティティの最初のトークンを指定するクラス(通常は`B-`プレフィックスを使用し、**b**eginningを表す)、もう1つはエンティティの継続部分を指定するクラス(`I-`、**i**nnerトークンを表す)です。また、すべての**o**therトークンを表すクラスとして`O`を使用します。このようなトークンタグ付けは[BIOタグ付け](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging))(またはIOB)と呼ばれます。タグ付けされたタイトルは次のようになります: -トークン | タグ +Token | Tag ------|----- 三尖弁 | B-DIS 逆流 | I-DIS @@ -40,22 +49,23 @@ NERモデルは本質的に**トークン分類モデル**です。なぜなら 炭酸 | B-CHEM リチウム | I-CHEM 毒性 | B-DIS -について | O -の | O +が | O 新生児 | O +に | O +見られる | O 。 | O -トークンとクラスの間に1対1の対応を構築する必要があるため、この図から右端の**多対多**ニューラルネットワークモデルをトレーニングすることができます: +トークンとクラスの1対1の対応を構築する必要があるため、この図から右端の**多対多**ニューラルネットワークモデルをトレーニングできます: -![一般的な再帰的ニューラルネットワークのパターンを示す画像。](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.ja.jpg) +![一般的なリカレントニューラルネットワークのパターンを示す画像。](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.ja.jpg) -> *この画像は[このブログ記事](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)からのものです。[Andrej Karpathy](http://karpathy.github.io/)によるものです。NERトークン分類モデルは、この画像の右端のネットワークアーキテクチャに対応しています。* +> *[Andrej Karpathy](http://karpathy.github.io/)による[このブログ記事](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)からの画像。NERトークン分類モデルは、この画像の右端のネットワークアーキテクチャに対応します。* ## NERモデルのトレーニング -NERモデルは本質的にトークン分類モデルであるため、このタスクにはすでに知っているRNNを使用できます。この場合、再帰ネットワークの各ブロックはトークンIDを返します。以下の例のノートブックでは、トークン分類のためのLSTMをトレーニングする方法を示しています。 +NERモデルは本質的にトークン分類モデルであるため、このタスクには既に学んだRNNを使用できます。この場合、リカレントネットワークの各ブロックがトークンIDを返します。以下のノートブックでは、トークン分類のためのLSTMのトレーニング方法を示しています。 -## ✍️ 例のノートブック:NER +## ✍️ サンプルノートブック: NER 以下のノートブックで学習を続けてください: @@ -63,21 +73,21 @@ NERモデルは本質的にトークン分類モデルであるため、この ## 結論 -NERモデルは**トークン分類モデル**であり、トークン分類を実行するために使用できます。これは、場所、名前、日付など、テキスト内の特定のエンティティを認識するのに役立つ非常に一般的なタスクです。 +NERモデルは**トークン分類モデル**であり、トークン分類を実行するために使用できます。これはNLPで非常に一般的なタスクであり、テキスト内の場所、名前、日付などの特定のエンティティを認識するのに役立ちます。 ## 🚀 チャレンジ -以下のリンクされた課題を完了して、医療用語のための名前付きエンティティ認識モデルをトレーニングし、その後異なるデータセットで試してみてください。 +以下の課題を完了して、医療用語の固有表現認識モデルをトレーニングし、別のデータセットで試してみてください。 -## [講義後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/219) +## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/219) -## レビューと自己学習 +## 復習と自己学習 -ブログ[再帰的ニューラルネットワークの不合理な効果](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)を読み、その記事のさらなる読み物セクションに従って知識を深めてください。 +[リカレントニューラルネットワークの驚くべき有効性](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)というブログを読み、その記事の「さらなる読み物」セクションに従って知識を深めてください。 ## [課題](lab/README.md) -このレッスンの課題では、医療エンティティ認識モデルをトレーニングする必要があります。このレッスンで説明されているLSTMモデルのトレーニングから始め、BERTトランスフォーマーモデルの使用に進むことができます。すべての詳細を確認するには、[指示を読んでください](lab/README.md)。 +このレッスンの課題では、医療エンティティ認識モデルをトレーニングする必要があります。このレッスンで説明されているようにLSTMモデルのトレーニングから始め、BERTトランスフォーマーモデルの使用に進んでください。[指示](lab/README.md)を読んで詳細を確認してください。 **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/19-NER/lab/README.md b/translations/ja/lessons/5-NLP/19-NER/lab/README.md index d03857dc..884f229d 100644 --- a/translations/ja/lessons/5-NLP/19-NER/lab/README.md +++ b/translations/ja/lessons/5-NLP/19-NER/lab/README.md @@ -1,16 +1,25 @@ + # NER -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)からのラボ課題。 +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) のラボ課題。 -## タスク +## 課題 -このラボでは、医療用語のための名前付きエンティティ認識モデルをトレーニングする必要があります。 +このラボでは、医療用語の固有表現認識(NER)モデルをトレーニングする必要があります。 ## データセット -NERモデルをトレーニングするためには、医療エンティティが適切にラベル付けされたデータセットが必要です。[BC5CDRデータセット](https://biocreative.bioinformatics.udel.edu/tasks/biocreative-v/track-3-cdr/)には、1500以上の論文からのラベル付きの病気や化学物質のエンティティが含まれています。ウェブサイトに登録した後にデータセットをダウンロードできます。 +NERモデルをトレーニングするには、医療エンティティが適切にラベル付けされたデータセットが必要です。[BC5CDRデータセット](https://biocreative.bioinformatics.udel.edu/tasks/biocreative-v/track-3-cdr/) には、1500以上の論文から抽出された疾患および化学物質のエンティティがラベル付けされています。このデータセットは、ウェブサイトで登録後にダウンロードできます。 -BC5CDRデータセットは次のようになります: +BC5CDRデータセットは以下のような形式です: ``` 6794356|t|Tricuspid valve regurgitation and lithium carbonate toxicity in a newborn infant. @@ -21,17 +30,17 @@ BC5CDRデータセットは次のようになります: ... ``` -このデータセットでは、最初の2行に論文のタイトルと要約があり、その後に個々のエンティティが続き、タイトル+要約ブロック内の開始位置と終了位置が示されています。エンティティのタイプに加えて、このエンティティが特定の医療オントロジー内で持つオントロジーIDも得られます。 +このデータセットでは、最初の2行に論文のタイトルと要約があり、その後に個々のエンティティが続きます。エンティティには、タイトル+要約ブロック内での開始位置と終了位置が記載されています。さらに、エンティティの種類に加えて、特定の医療オントロジー内でのオントロジーIDも取得できます。 -このデータをBIOエンコーディングに変換するために、いくつかのPythonコードを書く必要があります。 +このデータをBIOエンコーディングに変換するためのPythonコードを書く必要があります。 ## ネットワーク -NERの最初の試みは、レッスン中に見た例のようにLSTMネットワークを使用して行うことができます。しかし、NLPタスクでは、[トランスフォーマーアーキテクチャ](https://en.wikipedia.org/wiki/Transformer_(machine_learning_model))、特に[ BERT言語モデル](https://en.wikipedia.org/wiki/BERT_(language_model))がはるかに良い結果を示します。事前にトレーニングされたBERTモデルは、言語の一般的な構造を理解し、比較的小さなデータセットと計算コストで特定のタスクに微調整することができます。 +NERの最初の試みとしては、レッスン中に見た例のようにLSTMネットワークを使用することができます。しかし、NLPタスクでは、[トランスフォーマーアーキテクチャ](https://en.wikipedia.org/wiki/Transformer_(machine_learning_model))、特に[BERT言語モデル](https://en.wikipedia.org/wiki/BERT_(language_model))がはるかに良い結果を示します。事前トレーニングされたBERTモデルは言語の一般的な構造を理解しており、比較的小さなデータセットと計算コストで特定のタスクに微調整することができます。 -私たちはNERを医療シナリオに適用する予定なので、医療テキストでトレーニングされたBERTモデルを使用するのが理にかなっています。マイクロソフトリサーチは、[PubMedBERT][PubMedBERT]という事前トレーニングされたモデルをリリースしました([出版物][PubMedBERT-Pub])、これは[PubMed](https://pubmed.ncbi.nlm.nih.gov/)リポジトリのテキストを使用して微調整されました。 +医療シナリオにNERを適用する予定であるため、医療テキストでトレーニングされたBERTモデルを使用するのが理にかなっています。Microsoft Researchは、[PubMed](https://pubmed.ncbi.nlm.nih.gov/)リポジトリのテキストを使用して微調整された[PubMedBERT][PubMedBERT] ([publication][PubMedBERT-Pub]) という事前トレーニング済みモデルを公開しています。 -トランスフォーマーモデルをトレーニングするための*de facto*標準は、[Hugging Face Transformers](https://huggingface.co/)ライブラリです。このライブラリには、PubMedBERTを含むコミュニティが管理する事前トレーニングされたモデルのリポジトリも含まれています。このモデルをロードして使用するには、数行のコードが必要です: +トランスフォーマーモデルをトレーニングするための事実上の標準は、[Hugging Face Transformers](https://huggingface.co/) ライブラリです。このライブラリには、PubMedBERTを含むコミュニティが管理する事前トレーニング済みモデルのリポジトリも含まれています。このモデルをロードして使用するには、ほんの数行のコードが必要です: ```python model_name = "microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract" @@ -40,11 +49,11 @@ tokenizer = AutoTokenizer.from_pretrained(model_name) model = BertForTokenClassification.from_pretrained(model_name, classes) ``` -これにより、入力テキストをトークンに分割できる`model` itself, built for token classification task using `classes` number of classes, as well as `tokenizer`オブジェクトが得られます。データセットをBIO形式に変換する際には、PubMedBERTのトークン化を考慮する必要があります。[このPythonコード](https://gist.github.com/shwars/580b55684be3328eb39ecf01b9cbbd88)を参考にすることができます。 +これにより、`classes`の数に基づいてトークン分類タスク用に構築された`model`本体と、入力テキストをトークンに分割できる`tokenizer`オブジェクトが得られます。データセットをBIO形式に変換し、PubMedBERTのトークン化を考慮する必要があります。[このPythonコード](https://gist.github.com/shwars/580b55684be3328eb39ecf01b9cbbd88)を参考にすることができます。 -## まとめ +## 学び -このタスクは、自然言語テキストの大規模なボリュームに関する洞察を得たい場合に実際に行う可能性が高いタスクに非常に近いです。私たちの場合、トレーニングしたモデルを[COVID関連論文のデータセット](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge)に適用し、どのような洞察が得られるかを確認できます。[このブログ記事](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)や[この論文](https://www.mdpi.com/2504-2289/6/1/4)は、NERを使用してこの論文コーパスで行うことができる研究について説明しています。 +この課題は、大量の自然言語テキストから洞察を得たい場合に実際に直面する可能性が高いタスクに非常に近いものです。今回の場合、トレーニングしたモデルを[COVID関連論文のデータセット](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge)に適用し、どのような洞察が得られるかを確認することができます。[このブログ記事](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)や[この論文](https://www.mdpi.com/2504-2289/6/1/4)では、NERを使用してこの論文コーパスで行える研究について説明しています。 **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された原文が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/20-LangModels/README.md b/translations/ja/lessons/5-NLP/20-LangModels/README.md new file mode 100644 index 00000000..a91b50a8 --- /dev/null +++ b/translations/ja/lessons/5-NLP/20-LangModels/README.md @@ -0,0 +1,64 @@ + +# 事前学習済みの大規模言語モデル + +これまでのタスクでは、ラベル付きデータセットを使用して特定のタスクを実行するニューラルネットワークを訓練してきました。BERTのような大規模なトランスフォーマーモデルでは、自己教師あり学習を用いて言語モデルを構築し、その後、特定の下流タスクに特化したドメイン固有の訓練を行います。しかし、大規模言語モデルはドメイン固有の訓練を一切行わなくても多くのタスクを解決できることが示されています。このようなモデル群は**GPT**(Generative Pre-Trained Transformer)と呼ばれます。 + +## [講義前のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/120) + +## テキスト生成とパープレキシティ + +下流訓練なしで一般的なタスクを実行できるニューラルネットワークのアイデアは、[Language Models are Unsupervised Multitask Learners](https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf)という論文で提示されています。この論文の主なアイデアは、多くのタスクが**テキスト生成**を用いてモデル化できるということです。テキストを理解することは、基本的にそれを生成できる能力を意味します。モデルが膨大な量のテキストで訓練されているため、人間の知識を網羅し、幅広い分野についても知識を持つようになります。 + +> テキストを理解し生成できることは、周囲の世界について何かを知っていることも意味します。人々は読書を通じて多くのことを学びますが、GPTネットワークもこの点で似ています。 + +テキスト生成ネットワークは次の単語の確率 $$P(w_N)$$ を予測することで動作します。ただし、次の単語の無条件確率はテキストコーパス内でのその単語の頻度に等しくなります。GPTは、前の単語を条件とした次の単語の**条件付き確率**を提供することができます: $$P(w_N | w_{n-1}, ..., w_0)$$ + +> 確率についての詳細は、[Data Science for Beginners Curriculum](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/1-Introduction/04-stats-and-probability)をご覧ください。 + +言語生成モデルの品質は**パープレキシティ**を使用して定義できます。これは、タスク固有のデータセットを使用せずにモデルの品質を測定するための内在的な指標です。*文の確率*という概念に基づいており、モデルは現実的である可能性が高い文に高い確率を割り当て(つまり、モデルがその文に対して**困惑**していない)、意味が通じにくい文(例: *Can it does what?*)には低い確率を割り当てます。モデルに実際のテキストコーパスからの文を与えると、それらが高い確率を持ち、低い**パープレキシティ**を持つことが期待されます。数学的には、テストセットの正規化された逆確率として定義されます: +$$ +\mathrm{Perplexity}(W) = \sqrt[N]{1\over P(W_1,...,W_N)} +$$ + +**[Hugging FaceのGPT搭載テキストエディタ](https://transformer.huggingface.co/doc/gpt2-large)**を使用してテキスト生成を試すことができます。このエディタでは、テキストを書き始めて**[TAB]**キーを押すと、いくつかの補完オプションが表示されます。オプションが短すぎたり満足できない場合は、再度[TAB]キーを押すと、より長いテキストを含む追加のオプションが表示されます。 + +## GPTはファミリー + +GPTは単一のモデルではなく、[OpenAI](https://openai.com)によって開発・訓練されたモデルのコレクションです。 + +GPTモデルには以下があります: + +| [GPT-2](https://huggingface.co/docs/transformers/model_doc/gpt2#openai-gpt2) | [GPT-3](https://openai.com/research/language-models-are-few-shot-learners) | [GPT-4](https://openai.com/gpt-4) | +| -- | -- | -- | +|最大15億のパラメータを持つ言語モデル | 最大1750億のパラメータを持つ言語モデル | 100兆のパラメータを持ち、画像とテキストの入力を受け取り、テキストを出力するモデル | + +GPT-3およびGPT-4モデルは、[Microsoft Azureの認知サービス](https://azure.microsoft.com/en-us/services/cognitive-services/openai-service/#overview?WT.mc_id=academic-77998-cacaste)として、または[OpenAI API](https://openai.com/api/)として利用可能です。 + +## プロンプトエンジニアリング + +GPTは膨大なデータで訓練されており、言語やコードを理解する能力を持っています。そのため、入力(プロンプト)に応じて出力を提供します。プロンプトとは、モデルに次に完了するタスクについて指示を与えるGPTへの入力やクエリのことです。望ましい結果を得るためには、最も効果的なプロンプトが必要であり、それには適切な単語、形式、フレーズ、さらには記号を選択することが含まれます。このアプローチは[プロンプトエンジニアリング](https://learn.microsoft.com/en-us/shows/ai-show/the-basics-of-prompt-engineering-with-azure-openai-service?WT.mc_id=academic-77998-bethanycheum)と呼ばれます。 + +[このドキュメント](https://learn.microsoft.com/en-us/semantic-kernel/prompt-engineering/?WT.mc_id=academic-77998-bethanycheum)では、プロンプトエンジニアリングに関する詳細情報を提供しています。 + +## ✍️ サンプルノートブック: [OpenAI-GPTで遊ぶ](../../../../../lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) + +以下のノートブックで学習を続けてください: + +* [OpenAI-GPTとHugging Face Transformersを使用したテキスト生成](../../../../../lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) + +## 結論 + +新しい一般的な事前学習済み言語モデルは、言語構造をモデル化するだけでなく、膨大な自然言語を含んでいます。そのため、ゼロショットまたは少数ショット設定でいくつかのNLPタスクを効果的に解決することができます。 + +## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/220) + +**免責事項**: +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/5-NLP/README.md b/translations/ja/lessons/5-NLP/README.md index ef260595..beedcaed 100644 --- a/translations/ja/lessons/5-NLP/README.md +++ b/translations/ja/lessons/5-NLP/README.md @@ -1,30 +1,39 @@ + # 自然言語処理 -![NLPタスクの要約](../../../../translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.ja.png) +![NLPタスクの概要を示すイラスト](../../../../translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.ja.png) -このセクションでは、**自然言語処理 (NLP)** に関連するタスクを扱うためにニューラルネットワークを使用することに焦点を当てます。コンピュータに解決してもらいたいNLPの問題はたくさんあります: +このセクションでは、**自然言語処理 (NLP)** に関連するタスクを扱うためにニューラルネットワークを使用する方法に焦点を当てます。コンピュータに解決してほしい多くのNLP問題があります。 -* **テキスト分類**は、テキストシーケンスに関する典型的な分類問題です。例えば、メールメッセージをスパムか非スパムに分類したり、記事をスポーツ、ビジネス、政治などに分類したりします。また、チャットボットを開発する際には、ユーザーが言いたかったことを理解する必要があることが多く、この場合は**意図分類**を扱っています。意図分類では、多くのカテゴリを扱う必要があることがよくあります。 -* **感情分析**は、典型的な回帰問題であり、文の意味がどれだけポジティブ/ネガティブであるかに対応する数値(感情)を割り当てる必要があります。感情分析のより高度なバージョンは、**アスペクトベースの感情分析** (ABSA) であり、文全体ではなくその一部(アスペクト)に感情を割り当てます。例えば、*このレストランでは、料理が気に入りましたが、雰囲気はひどかったです*のように。 -* **固有表現認識** (NER) は、テキストから特定のエンティティを抽出する問題を指します。例えば、*明日パリに飛ばなければならない*というフレーズの中で、*明日*がDATEを指し、*パリ*がLOCATIONであることを理解する必要があります。 -* **キーワード抽出**はNERに似ていますが、特定のエンティティタイプのために事前学習することなく、文の意味に重要な単語を自動的に抽出する必要があります。 -* **テキストクラスタリング**は、似たような文をグループ化したいときに役立ちます。例えば、技術サポートの会話における似たリクエストをまとめることができます。 -* **質問応答**は、モデルが特定の質問に答える能力を指します。モデルはテキストのパッセージと質問を入力として受け取り、質問の答えが含まれているテキストの場所を提供する必要があります(あるいは、時には答えのテキストを生成することもあります)。 -* **テキスト生成**は、モデルが新しいテキストを生成する能力です。これは、ある*テキストプロンプト*に基づいて次の文字や単語を予測する分類タスクと考えられます。GPT-3のような高度なテキスト生成モデルは、[プロンプトプログラミング](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0)や[プロンプトエンジニアリング](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)と呼ばれる技術を使用して、分類などの他のNLPタスクを解決することができます。 -* **テキスト要約**は、コンピュータに長いテキストを「読む」ことを要求し、それを数文で要約する技術です。 -* **機械翻訳**は、一つの言語でのテキスト理解と、別の言語でのテキスト生成の組み合わせと見なすことができます。 +* **テキスト分類**は、テキストシーケンスに関する典型的な分類問題です。例として、電子メールをスパムか非スパムに分類したり、記事をスポーツ、ビジネス、政治などに分類することが挙げられます。また、チャットボットを開発する際には、ユーザーが何を言いたかったのかを理解する必要があります。この場合、**意図分類**を扱うことになります。意図分類では、多くのカテゴリを扱う必要があることがよくあります。 +* **感情分析**は典型的な回帰問題であり、文の意味がどれだけポジティブ/ネガティブであるかを示す数値(感情)を割り当てる必要があります。感情分析のより高度なバージョンとして、**側面ベース感情分析** (ABSA) があります。これは、文全体ではなくその異なる部分(側面)に感情を割り当てるものです。例: *このレストランでは料理は気に入ったが、雰囲気はひどかった*。 +* **固有表現抽出** (NER) は、テキストから特定のエンティティを抽出する問題を指します。例えば、*明日パリに飛びたい*というフレーズでは、*明日*が日付 (DATE) を指し、*パリ*が場所 (LOCATION) を指していることを理解する必要があります。 +* **キーワード抽出**はNERに似ていますが、特定のエンティティタイプを事前学習することなく、文の意味に重要な単語を自動的に抽出する必要があります。 +* **テキストクラスタリング**は、例えば技術サポートの会話で似たリクエストをグループ化したい場合に役立ちます。 +* **質問応答**は、モデルが特定の質問に答える能力を指します。モデルはテキストの一部と質問を入力として受け取り、質問の答えが含まれるテキスト内の場所を提供する必要があります(場合によっては答えのテキストを生成することもあります)。 +* **テキスト生成**は、モデルが新しいテキストを生成する能力です。これは、*テキストプロンプト*に基づいて次の文字や単語を予測する分類タスクと見なすことができます。GPT-3のような高度なテキスト生成モデルは、[プロンプトプログラミング](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0)や[プロンプトエンジニアリング](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)と呼ばれる技術を使用して、分類などの他のNLPタスクを解決することができます。 +* **テキスト要約**は、コンピュータに長いテキストを「読んで」数文に要約させたい場合の技術です。 +* **機械翻訳**は、一つの言語でのテキスト理解と別の言語でのテキスト生成を組み合わせたものと見なすことができます。 -当初、ほとんどのNLPタスクは文法のような従来の手法を使用して解決されていました。例えば、機械翻訳では、パーサーを使用して初期の文を構文木に変換し、その後、文の意味を表現するために高次の意味構造を抽出し、この意味とターゲット言語の文法に基づいて結果が生成されました。最近では、多くのNLPタスクがニューラルネットワークを使用してより効果的に解決されています。 +初期の頃は、ほとんどのNLPタスクが文法などの従来の方法で解決されていました。例えば、機械翻訳では、初期の文を構文木に変換するためにパーサーが使用され、その後、文の意味を表す高次の意味構造が抽出され、この意味とターゲット言語の文法に基づいて結果が生成されました。現在では、多くのNLPタスクがニューラルネットワークを使用することでより効果的に解決されています。 -> 多くの古典的なNLP手法は、[自然言語処理ツールキット (NLTK)](https://www.nltk.org) Pythonライブラリに実装されています。異なるNLPタスクをNLTKを使用して解決する方法をカバーした素晴らしい[NLTK Book](https://www.nltk.org/book/)がオンラインで利用可能です。 +> 多くの古典的なNLP手法は、Pythonライブラリの[自然言語処理ツールキット (NLTK)](https://www.nltk.org) に実装されています。異なるNLPタスクをNLTKを使用して解決する方法をカバーした素晴らしい[NLTKの本](https://www.nltk.org/book/)がオンラインで利用可能です。 -私たちのコースでは、主にNLPのためにニューラルネットワークを使用することに焦点を当て、必要に応じてNLTKを使用します。 +このコースでは、主にニューラルネットワークを使用したNLPに焦点を当て、必要に応じてNLTKを使用します。 -私たちはすでに、タブularデータや画像を扱うためのニューラルネットワークの使用について学びました。これらのデータタイプとテキストの主な違いは、テキストが可変長のシーケンスであるのに対し、画像の場合は入力サイズが事前に知られていることです。畳み込みネットワークは入力データからパターンを抽出できますが、テキストのパターンはより複雑です。例えば、否定が主語から分離されることが多くの単語にとって任意である場合(例:*私はオレンジが好きではありません* vs. *私はあの大きくてカラフルで美味しいオレンジが好きではありません*)でも、これは依然として一つのパターンとして解釈されるべきです。したがって、言語を扱うためには、*再帰ネットワーク*や*トランスフォーマー*などの新しいニューラルネットワークのタイプを導入する必要があります。 +これまでに、表形式データや画像を扱うためのニューラルネットワークの使用方法を学びました。これらのデータタイプとテキストの主な違いは、テキストが可変長のシーケンスであるのに対し、画像の場合は入力サイズが事前にわかっていることです。畳み込みネットワークは入力データからパターンを抽出できますが、テキストのパターンはより複雑です。例えば、否定が主語から任意の多くの単語で分離される場合があります(例: *私はオレンジが好きではありません* vs. *私はあの大きくてカラフルで美味しいオレンジが好きではありません*)。これでも一つのパターンとして解釈されるべきです。そのため、言語を扱うには、*リカレントネットワーク*や*トランスフォーマー*などの新しいニューラルネットワークタイプを導入する必要があります。 ## ライブラリのインストール -このコースを実行するためにローカルのPythonインストールを使用している場合は、次のコマンドを使用してNLPに必要なすべてのライブラリをインストールする必要があります: +このコースをローカルのPython環境で実行する場合、以下のコマンドを使用してNLPに必要なライブラリをインストールする必要があります。 **PyTorchの場合** ```bash @@ -35,17 +44,17 @@ pip install -r requirements-torch.txt pip install -r requirements-tf.txt ``` -> TensorFlowを使ってNLPを試してみたい方は、[Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste)をご覧ください。 +> TensorFlowを使用したNLPを試したい場合は、[Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste)をご覧ください。 -## GPUの警告 +## GPUに関する注意 -このセクションでは、いくつかの例でかなり大きなモデルをトレーニングします。 -* **GPU対応コンピュータの使用**: 大きなモデルで作業する際の待機時間を短縮するために、GPU対応コンピュータでノートブックを実行することをお勧めします。 -* **GPUメモリの制約**: GPUで実行すると、特に大きなモデルをトレーニングする際に、GPUメモリが不足する状況が発生する可能性があります。 -* **GPUメモリの消費**: トレーニング中に消費されるGPUメモリの量は、ミニバッチサイズを含むさまざまな要因によって異なります。 -* **ミニバッチサイズの最小化**: GPUメモリの問題が発生した場合は、コード内のミニバッチサイズを減少させることを検討してください。 -* **TensorFlowのGPUメモリ解放**: 古いバージョンのTensorFlowは、1つのPythonカーネル内で複数のモデルをトレーニングする際にGPUメモリを正しく解放しない場合があります。GPUメモリの使用を効果的に管理するために、必要に応じてGPUメモリを割り当てるようにTensorFlowを設定できます。 -* **コードの追加**: TensorFlowが必要なときにのみGPUメモリの割り当てを増やすように設定するには、ノートブックに次のコードを含めてください: +このセクションでは、一部の例で非常に大きなモデルをトレーニングします。 +* **GPU対応のコンピュータを使用する**: 大きなモデルを扱う際の待機時間を短縮するために、GPU対応のコンピュータでノートブックを実行することをお勧めします。 +* **GPUメモリの制約**: GPUで実行すると、大きなモデルをトレーニングする際にGPUメモリが不足する状況が発生する可能性があります。 +* **GPUメモリ消費量**: トレーニング中のGPUメモリ消費量は、ミニバッチサイズなどのさまざまな要因によって異なります。 +* **ミニバッチサイズを最小化する**: GPUメモリの問題が発生した場合、コード内のミニバッチサイズを減らすことを検討してください。 +* **TensorFlowのGPUメモリ解放**: 古いバージョンのTensorFlowでは、1つのPythonカーネル内で複数のモデルをトレーニングする際にGPUメモリが正しく解放されないことがあります。GPUメモリ使用量を効果的に管理するには、必要に応じてGPUメモリを割り当てるようTensorFlowを設定できます。 +* **コードの追加**: 必要に応じてGPUメモリ割り当てを増やすようTensorFlowを設定するには、以下のコードをノートブックに追加してください。 ```python physical_devices = tf.config.list_physical_devices('GPU') @@ -53,17 +62,17 @@ if len(physical_devices)>0: tf.config.experimental.set_memory_growth(physical_devices[0], True) ``` -古典的なMLの観点からNLPを学ぶことに興味がある場合は、[このレッスンのスイート](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)を訪れてください。 +古典的な機械学習の観点からNLPを学びたい場合は、[このレッスン集](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)をご覧ください。 -## このセクションでは -このセクションでは、以下について学びます: +## このセクションで学ぶ内容 +このセクションでは以下について学びます: * [テキストをテンソルとして表現する](13-TextRep/README.md) * [単語埋め込み](14-Emdeddings/README.md) -* [言語モデル](15-LanguageModeling/README.md) -* [再帰型ニューラルネットワーク](16-RNN/README.md) +* [言語モデリング](15-LanguageModeling/README.md) +* [リカレントニューラルネットワーク](16-RNN/README.md) * [生成ネットワーク](17-GenerativeNetworks/README.md) * [トランスフォーマー](18-Transformers/README.md) **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。原文のネイティブ言語の文書を権威ある情報源と見なすべきです。重要な情報については、専門の人間翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/6-Other/21-GeneticAlgorithms/README.md b/translations/ja/lessons/6-Other/21-GeneticAlgorithms/README.md index ca589e88..cedd1450 100644 --- a/translations/ja/lessons/6-Other/21-GeneticAlgorithms/README.md +++ b/translations/ja/lessons/6-Other/21-GeneticAlgorithms/README.md @@ -1,80 +1,90 @@ + # 遺伝的アルゴリズム ## [講義前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/121) -**遺伝的アルゴリズム** (GA) は、特定の問題に対する最適解を得るために、集団の進化の方法を利用した**進化的アプローチ**に基づいています。これは1975年に[ジョン・ヘンリー・ホランド](https://wikipedia.org/wiki/John_Henry_Holland)によって提案されました。 +**遺伝的アルゴリズム**(GA)は、AIにおける**進化的アプローチ**に基づいており、集団の進化の方法を利用して、特定の問題に対する最適解を得る手法です。1975年に[ジョン・ヘンリー・ホランド](https://wikipedia.org/wiki/John_Henry_Holland)によって提案されました。 -遺伝的アルゴリズムは以下のアイデアに基づいています: +遺伝的アルゴリズムは以下の考え方に基づいています: -* 問題に対する有効な解は**遺伝子**として表現できます -* **交叉**により、二つの解を組み合わせて新しい有効な解を得ることができます -* **選択**は、いくつかの**適応度関数**を使用してより最適な解を選択するために用いられます -* **突然変異**は最適化を不安定にし、局所的な最小値から脱出するために導入されます +* 問題の有効な解を**遺伝子**として表現できる +* **交叉**によって2つの解を組み合わせ、新しい有効な解を得ることができる +* **選択**を使用して、ある**適応度関数**を基により最適な解を選ぶ +* **突然変異**を導入することで、最適化を不安定化させ、局所的な最小値から抜け出す 遺伝的アルゴリズムを実装するには、以下が必要です: - * **遺伝子** g∈Γ を用いて問題解をコーディングする方法を見つけること - * 遺伝子の集合 Γ 上で、**適応度関数** fit: Γ→**R** を定義すること。小さい関数値はより良い解に対応します。 - * 二つの遺伝子を組み合わせて新しい有効な解を得るための**交叉**メカニズム crossover: Γ2→Γ を定義すること。 - * **突然変異**メカニズム mutate: Γ→Γ を定義すること。 +* 問題の解を**遺伝子** g∈Γ を使って符号化する方法を見つける +* 遺伝子の集合 Γ 上で、**適応度関数** fit: Γ→**R** を定義する。関数値が小さいほど、より良い解を示す。 +* 2つの遺伝子を組み合わせて新しい有効な解を得る**交叉**の仕組みを定義する crossover: Γ2→Γ。 +* **突然変異**の仕組みを定義する mutate: Γ→Γ。 -多くの場合、交叉と突然変異は遺伝子を数値シーケンスまたはビットベクターとして操作するための非常に単純なアルゴリズムです。 +多くの場合、交叉と突然変異は、遺伝子を数値列やビットベクトルとして操作する単純なアルゴリズムです。 -遺伝的アルゴリズムの具体的な実装はケースバイケースで異なることがありますが、全体の構造は以下の通りです: +遺伝的アルゴリズムの具体的な実装はケースバイケースで異なりますが、全体的な構造は以下の通りです: 1. 初期集団 G⊂Γ を選択する -2. このステップで実行される操作のうちの一つをランダムに選択する:交叉または突然変異 -3. **交叉**: - * ランダムに二つの遺伝子 g1, g2 ∈ G を選択する +2. このステップで実行する操作(交叉または突然変異)をランダムに選択する +3. **交叉**: + * 2つの遺伝子 g1, g2 ∈ G をランダムに選択する * 交叉を計算する g=crossover(g1,g2) - * もし fit(g)1) または fit(g)2) なら、集団内の対応する遺伝子を g で置き換える。 -4. **突然変異** - ランダムに遺伝子 g∈G を選択し、それを mutate(g) で置き換える -5. ステップ2から繰り返し、十分に小さな fit の値が得られるか、ステップの限界に達するまで続ける。 + * fit(g)1) または fit(g)2) の場合、対応する遺伝子を g に置き換える +4. **突然変異** - ランダムに遺伝子 g∈G を選択し、それを mutate(g) に置き換える +5. ステップ2から繰り返し、適応度が十分小さくなるか、ステップ数の制限に達するまで続ける ## 典型的なタスク -遺伝的アルゴリズムによって解決される典型的なタスクには以下が含まれます: +遺伝的アルゴリズムで解決される典型的なタスクには以下が含まれます: -1. スケジュール最適化 -1. 最適パッキング -1. 最適切断 -1. 徹底的な探索の高速化 +1. スケジュールの最適化 +1. 最適なパッキング +1. 最適な切断 +1. 全探索の高速化 -## ✍️ 演習:遺伝的アルゴリズム +## ✍️ 演習: 遺伝的アルゴリズム -次のノートブックで学習を続けてください: +以下のノートブックで学習を続けてください: -[このノートブック](../../../../../lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb)に行き、遺伝的アルゴリズムを使用した二つの例を確認してください: +[このノートブック](../../../../../lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb)で、遺伝的アルゴリズムを使用した2つの例を確認できます: -1. 財宝の公正な分配 +1. 宝物の公平な分配 1. 8クイーン問題 ## 結論 -遺伝的アルゴリズムは、物流や探索問題など多くの問題を解決するために使用されます。この分野は、心理学とコンピュータサイエンスのトピックを融合させた研究からインスパイアを受けています。 +遺伝的アルゴリズムは、物流や探索問題を含む多くの問題を解決するために使用されます。この分野は、心理学とコンピュータサイエンスのトピックを融合させた研究に触発されています。 ## 🚀 チャレンジ -「遺伝的アルゴリズムは実装が簡単ですが、その挙動は理解するのが難しい。」[source](https://wikipedia.org/wiki/Genetic_algorithm) Sudokuパズルを解くような遺伝的アルゴリズムの実装を見つけるために調査し、どのように機能するかをスケッチまたはフローチャートで説明してください。 +「遺伝的アルゴリズムは実装が簡単だが、その挙動を理解するのは難しい。」[出典](https://wikipedia.org/wiki/Genetic_algorithm) +遺伝的アルゴリズムの実装例(例えば数独パズルの解法)を調査し、それがどのように機能するかをスケッチやフローチャートで説明してください。 ## [講義後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/221) -## レビュー & 自習 +## 復習と自己学習 -[この素晴らしいビデオ](https://www.youtube.com/watch?v=qv6UVOQ0F44)を見て、コンピュータが遺伝的アルゴリズムによって訓練されたニューラルネットワークを使用してスーパーマリオをプレイする方法について学びましょう。このようなゲームをプレイするコンピュータ学習については、[次のセクション](../22-DeepRL/README.md)でさらに学びます。 +[この素晴らしい動画](https://www.youtube.com/watch?v=qv6UVOQ0F44)を視聴して、遺伝的アルゴリズムで訓練されたニューラルネットワークがどのようにしてスーパーマリオをプレイする方法を学ぶかを確認してください。このようなゲームをプレイするコンピュータの学習については[次のセクション](../22-DeepRL/README.md)で学びます。 -## [課題:ディオファントス方程式](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) +## [課題: ディオファントス方程式](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) -あなたの目標は、いわゆる**ディオファントス方程式** - 整数解を持つ方程式を解くことです。例えば、方程式 a+2b+3c+4d=30 を考えてみてください。この方程式を満たす整数解を見つける必要があります。 +目標は、いわゆる**ディオファントス方程式**(整数解を持つ方程式)を解くことです。例えば、方程式 a+2b+3c+4d=30 を考えてみてください。この方程式を満たす整数解を見つける必要があります。 -*この課題は[この投稿](https://habr.com/post/128704/)にインスパイアされています。* +*この課題は[この投稿](https://habr.com/post/128704/)に触発されています。* ヒント: -1. 解は区間 [0;30] にあると考えることができます -1. 遺伝子として、解の値のリストを考慮することができます +1. 解を [0;30] の範囲で考えることができます +1. 遺伝子として、解の値のリストを使用することを検討してください -[Diophantine.ipynb](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb)を出発点として使用してください。 +[Diophantine.ipynb](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) を出発点として使用してください。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の文書はその母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳をお勧めします。この翻訳の使用から生じる誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書を正式な情報源としてお考えください。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/6-Other/22-DeepRL/README.md b/translations/ja/lessons/6-Other/22-DeepRL/README.md index 4628ae35..535b8c3e 100644 --- a/translations/ja/lessons/6-Other/22-DeepRL/README.md +++ b/translations/ja/lessons/6-Other/22-DeepRL/README.md @@ -1,33 +1,42 @@ -# ディープ強化学習 + +# 深層強化学習 -強化学習 (RL) は、教師あり学習や教師なし学習と並ぶ基本的な機械学習のパラダイムの一つと見なされています。教師あり学習では、結果が既知のデータセットに依存しますが、RLは**実践による学習**に基づいています。例えば、コンピュータゲームを初めて見たとき、ルールを知らなくてもプレイを始め、すぐにプレイしながら行動を調整することでスキルを向上させることができます。 +強化学習(RL)は、教師あり学習や教師なし学習と並ぶ基本的な機械学習のパラダイムの一つとされています。教師あり学習では既知の結果を持つデータセットに依存しますが、RLは**実際に行動することで学ぶ**ことに基づいています。例えば、初めてコンピュータゲームを見たとき、ルールを知らなくてもプレイを始め、プレイしながら行動を調整することでスキルを向上させることができます。 -## [事前講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/122) +## [講義前のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/122) -RLを実行するには、以下が必要です: +RLを行うためには以下が必要です: -* ゲームのルールを設定する**環境**または**シミュレーター**。シミュレーターで実験を行い、その結果を観察できる必要があります。 -* 実験がどれだけ成功したかを示す**報酬関数**。コンピュータゲームをプレイする場合、報酬は最終スコアになります。 +* **環境**または**シミュレーター**:ゲームのルールを設定するもの。シミュレーター内で実験を行い、その結果を観察できる必要があります。 +* **報酬関数**:実験がどれだけ成功したかを示すもの。コンピュータゲームを学ぶ場合、報酬は最終スコアになります。 -報酬関数に基づいて、行動を調整しスキルを向上させることができ、次回はより良いプレイができるようになります。他のタイプの機械学習とRLの主な違いは、RLではゲームが終了するまで勝ったか負けたかを通常知ることができない点です。したがって、特定の動きが良いかどうかを単独で判断することはできず、ゲームの最後にのみ報酬を受け取ります。 +報酬関数に基づいて行動を調整し、スキルを向上させることで次回のプレイをより良いものにすることができます。他の機械学習とRLの主な違いは、RLではゲームが終了するまで勝敗が分からないことです。そのため、特定の動きが良いかどうかを単独で判断することはできず、ゲーム終了時に初めて報酬を受け取ります。 -RLの間、通常は多くの実験を行います。各実験では、これまで学習した最適な戦略に従うこと(**利用**)と、新しい可能な状態を探索すること(**探索**)のバランスを取る必要があります。 +RLでは通常、多くの実験を行います。各実験では、これまで学んだ最適な戦略を追求する(**活用**)と、新しい可能性を探索する(**探索**)のバランスを取る必要があります。 ## OpenAI Gym -RLにとって素晴らしいツールは、[OpenAI Gym](https://gym.openai.com/)です。これは、アタリゲームからポールバランシングの物理学まで、さまざまな環境をシミュレートできる**シミュレーション環境**です。強化学習アルゴリズムのトレーニングに最も人気のあるシミュレーション環境の一つであり、[OpenAI](https://openai.com/)によって維持されています。 +RLにとって非常に便利なツールが[OpenAI Gym](https://gym.openai.com/)です。これは**シミュレーション環境**であり、Atariゲームからポールバランスの物理学まで、さまざまな環境をシミュレートできます。OpenAI Gymは強化学習アルゴリズムをトレーニングするための最も人気のあるシミュレーション環境の一つであり、[OpenAI](https://openai.com/)によって維持されています。 -> **注意**: OpenAI Gymで利用可能なすべての環境は[こちら](https://gym.openai.com/envs/#classic_control)で確認できます。 +> **Note**: OpenAI Gymで利用可能なすべての環境は[こちら](https://gym.openai.com/envs/#classic_control)で確認できます。 -## カートポールバランシング +## CartPoleバランス -現代のバランスデバイス、例えば*セグウェイ*や*ジャイロスクーター*を見たことがあるでしょう。これらは、加速度センサーやジャイロスコープからの信号に応じて車輪を調整することで自動的にバランスを取ることができます。このセクションでは、ポールをバランスさせるという似たような問題を解決する方法を学びます。これは、サーカスのパフォーマーが手の上でポールをバランスさせる状況に似ていますが、このポールバランシングは1次元でのみ行われます。 +現代のバランスデバイス、例えば*セグウェイ*や*ジャイロスクーター*を見たことがあるでしょう。これらは加速度計やジャイロスコープからの信号に応じて車輪を調整することで自動的にバランスを取ることができます。このセクションでは、似たような問題であるポールバランスを解決する方法を学びます。これはサーカスのパフォーマーが手の上でポールをバランスさせる状況に似ていますが、ポールバランスは1次元でのみ発生します。 -バランシングの簡略化されたバージョンは**カートポール**問題として知られています。カートポールの世界では、左右に動くことができる水平スライダーがあり、目標はスライダーの上に垂直のポールをバランスさせることです。 +バランスの簡略化されたバージョンは**CartPole**問題として知られています。CartPoleの世界では、左右に動く水平スライダーがあり、その上に垂直のポールをバランスさせることが目標です。 -カートポール +a cartpole -この環境を作成して使用するには、いくつかの行のPythonコードが必要です: +この環境を作成して使用するには、いくつかのPythonコードが必要です: ```python import gym @@ -45,73 +54,73 @@ while not done: print(f"Total reward: {total_reward}") ``` -各環境には、まったく同じ方法でアクセスできます: -* `env.reset` starts a new experiment -* `env.step`はシミュレーションステップを実行します。これは**アクション**を**アクションスペース**から受け取り、**観測**(観測スペースから)を返し、報酬と終了フラグも返します。 +各環境は以下のようにアクセスできます: +* `env.reset`:新しい実験を開始します。 +* `env.step`:シミュレーションステップを実行します。**アクションスペース**からの**アクション**を受け取り、**観測**(観測スペースから)、報酬、および終了フラグを返します。 -上記の例では、各ステップでランダムなアクションを実行しているため、実験の寿命は非常に短くなっています: +上記の例では、各ステップでランダムなアクションを実行しているため、実験の寿命は非常に短いです: -![バランスしていないカートポール](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-nobalance.gif) +![non-balancing cartpole](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-nobalance.gif) -RLアルゴリズムの目標は、特定の状態に応じてアクションを返すモデル、いわゆる**ポリシー**πを訓練することです。また、ポリシーを確率的に考えることもできます。例えば、任意の状態*s*とアクション*a*に対して、状態*s*で*a*を取る確率π(*a*|*s*)を返すとします。 +RLアルゴリズムの目標は、モデル、つまり**ポリシー**πをトレーニングすることです。このポリシーは、特定の状態に応じてアクションを返します。また、ポリシーを確率的に考えることもできます。例えば、任意の状態*s*とアクション*a*に対して、π(*a*|*s*)は状態*s*でアクション*a*を取るべき確率を返します。 ## ポリシー勾配アルゴリズム -ポリシーをモデル化する最も明白な方法は、状態を入力として受け取り、対応するアクション(またはすべてのアクションの確率)を返すニューラルネットワークを作成することです。ある意味で、これは通常の分類タスクに似ていますが、主な違いは、各ステップでどのアクションを取るべきかを事前に知ることができない点です。 +ポリシーをモデル化する最も明白な方法は、状態を入力として受け取り、対応するアクション(またはすべてのアクションの確率)を返すニューラルネットワークを作成することです。ある意味では通常の分類タスクに似ていますが、大きな違いは各ステップでどのアクションを取るべきか事前に分からないことです。 -ここでのアイデアは、これらの確率を推定することです。実験の各ステップでの総報酬を示す**累積報酬**のベクトルを構築します。また、早期の報酬の役割を減少させるために、早期の報酬に係数γ=0.99を掛けて**報酬の割引**を適用します。その後、より大きな報酬をもたらす実験経路に沿ったステップを強化します。 +ここでのアイデアは、その確率を推定することです。実験の各ステップでの総報酬を示す**累積報酬**のベクトルを構築します。また、**報酬割引**を適用し、初期の報酬の役割を減少させるために係数γ=0.99を掛けます。そして、より大きな報酬をもたらす実験経路のステップを強化します。 -> ポリシー勾配アルゴリズムについて詳しく学び、[例のノートブック](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb)でその動作を確認してください。 +> ポリシー勾配アルゴリズムについて詳しく学び、実際の動作を確認するには[例のノートブック](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb)をご覧ください。 -## アクター-クリティックアルゴリズム +## アクター・クリティックアルゴリズム -ポリシー勾配アプローチの改善版は**アクター-クリティック**と呼ばれています。その主なアイデアは、ニューラルネットワークが2つのことを返すように訓練されることです: +ポリシー勾配アプローチの改良版は**アクター・クリティック**と呼ばれます。その主なアイデアは、ニューラルネットワークが以下の2つを返すようにトレーニングされることです: -* どのアクションを取るかを決定するポリシー。この部分は**アクター**と呼ばれます。 -* この状態で期待できる総報酬の推定。この部分は**クリティック**と呼ばれます。 +* ポリシー:どのアクションを取るべきかを決定します。この部分は**アクター**と呼ばれます。 +* 状態で得られると予想される総報酬の推定値。この部分は**クリティック**と呼ばれます。 -ある意味で、このアーキテクチャは[GAN](../../4-ComputerVision/10-GANs/README.md)に似ており、互いに対抗して訓練される2つのネットワークがあります。アクター-クリティックモデルでは、アクターが取るべきアクションを提案し、クリティックが結果を批判的に評価しようとします。しかし、私たちの目標は、これらのネットワークを協調して訓練することです。 +ある意味では、このアーキテクチャは[GAN](../../4-ComputerVision/10-GANs/README.md)に似ています。GANでは2つのネットワークが互いに競い合いながらトレーニングされますが、アクター・クリティックモデルではアクターが取るべきアクションを提案し、クリティックがその結果を批判的に評価します。ただし、目標はこれらのネットワークを統一してトレーニングすることです。 -実験中に実際の累積報酬とクリティックが返す結果の両方を知っているため、これらの違いを最小化する損失関数を構築することは比較的簡単です。これにより、**クリティック損失**が得られます。**アクター損失**は、ポリシー勾配アルゴリズムと同じアプローチを使用して計算できます。 +実験中に実際の累積報酬とクリティックが返す結果の両方を知っているため、それらの差を最小化する損失関数を構築するのは比較的簡単です。これにより**クリティック損失**が得られます。**アクター損失**はポリシー勾配アルゴリズムと同じアプローチを使用して計算できます。 -これらのアルゴリズムのいずれかを実行した後、私たちのカートポールがこのように振る舞うことを期待できます: +これらのアルゴリズムのいずれかを実行した後、CartPoleは次のように動作することが期待されます: -![バランスの取れたカートポール](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-balance.gif) +![a balancing cartpole](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-balance.gif) -## ✍️ 演習: ポリシー勾配とアクター-クリティックRL +## ✍️ 演習:ポリシー勾配とアクター・クリティックRL -次のノートブックで学習を続けてください: +以下のノートブックで学習を続けてください: -* [TensorFlowにおけるRL](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) -* [PyTorchにおけるRL](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) +* [TensorFlowでのRL](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) +* [PyTorchでのRL](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) ## その他のRLタスク -現在、強化学習は急成長している研究分野です。強化学習のいくつかの興味深い例は以下の通りです: +現在、強化学習は急速に成長している研究分野です。強化学習の興味深い例として以下があります: -* コンピュータに**アタリゲーム**をプレイさせること。この問題の難しい点は、単純な状態をベクトルとして表すのではなく、スクリーンショットとして表す必要があることです。CNNを使用してこの画面画像を特徴ベクトルに変換したり、報酬情報を抽出する必要があります。アタリゲームはGymで利用可能です。 -* コンピュータにチェスや囲碁などのボードゲームをプレイさせること。最近、**Alpha Zero**のような最先端のプログラムは、互いに対戦する2つのエージェントによってゼロから訓練され、各ステップで改善されました。 -* 業界では、RLはシミュレーションから制御システムを作成するために使用されています。[Bonsai](https://azure.microsoft.com/services/project-bonsai/?WT.mc_id=academic-77998-cacaste)というサービスは、そのために特別に設計されています。 +* **Atariゲーム**をコンピュータに教えること。この問題の難しい部分は、単純なベクトルとして表現される状態ではなく、スクリーンショットであることです。そのため、CNNを使用してスクリーン画像を特徴ベクトルに変換したり、報酬情報を抽出する必要があります。AtariゲームはGymで利用可能です。 +* チェスや囲碁などのボードゲームをコンピュータに教えること。最近では、**Alpha Zero**のような最先端プログラムが、2つのエージェントが互いに対戦しながらゼロから学習し、各ステップで改善することでトレーニングされました。 +* 産業界では、シミュレーションから制御システムを作成するためにRLが使用されています。[Bonsai](https://azure.microsoft.com/services/project-bonsai/?WT.mc_id=academic-77998-cacaste)というサービスはそのために特化されています。 ## 結論 -私たちは、エージェントを訓練して、ゲームの望ましい状態を定義する報酬関数を提供し、探索空間をインテリジェントに探索する機会を与えることで良好な結果を達成する方法を学びました。2つのアルゴリズムを成功裏に試し、比較的短期間で良好な結果を得ました。しかし、これはRLへの旅の始まりに過ぎず、さらに深く掘り下げたい場合は、別のコースを受講することを検討すべきです。 +ゲームの望ましい状態を定義する報酬関数を提供し、探索空間を知的に探索する機会を与えることで、エージェントをトレーニングして良い結果を達成する方法を学びました。2つのアルゴリズムを試し、比較的短期間で良い結果を得ることができました。しかし、これはRLへの旅の始まりに過ぎません。さらに深く掘り下げたい場合は、別のコースを受講することを検討してください。 ## 🚀 チャレンジ -「その他のRLタスク」セクションにリストされたアプリケーションを探索し、1つを実装してみてください! +「その他のRLタスク」セクションに記載されているアプリケーションを探索し、1つを実装してみてください! -## [講義後クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/222) +## [講義後のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/222) -## レビュー & 自習 +## 復習と自己学習 -私たちの[初心者向け機械学習カリキュラム](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/README.md)で、古典的な強化学習についてさらに学んでください。 +[初心者向け機械学習カリキュラム](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/README.md)で古典的な強化学習についてさらに学びましょう。 -コンピュータがスーパーマリオをプレイする方法について語る[この素晴らしいビデオ](https://www.youtube.com/watch?v=qv6UVOQ0F44)を見てください。 +コンピュータがスーパーマリオを学ぶ方法について話している[この素晴らしい動画](https://www.youtube.com/watch?v=qv6UVOQ0F44)を視聴してください。 -## 課題: [マウンテンカーを訓練する](lab/README.md) +## 課題:[マウンテンカーをトレーニングする](lab/README.md) -この課題の目標は、別のGym環境である[マウンテンカー](https://www.gymlibrary.ml/environments/classic_control/mountain_car/)を訓練することです。 +この課題では、別のGym環境である[Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/)をトレーニングすることが目標です。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/6-Other/22-DeepRL/lab/README.md b/translations/ja/lessons/6-Other/22-DeepRL/lab/README.md index 8d97a0f5..e2597a9a 100644 --- a/translations/ja/lessons/6-Other/22-DeepRL/lab/README.md +++ b/translations/ja/lessons/6-Other/22-DeepRL/lab/README.md @@ -1,22 +1,23 @@ -# マウンテンカーを訓練して脱出する - -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)からのラボ課題です。 - -## タスク - -あなたの目標は、RLエージェントを訓練してOpenAI環境で[Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/)を制御することです。あなたは2023年10月までのデータで訓練を受けています。 - + ## 環境 -マウンテンカー環境は、谷の中に閉じ込められた車で構成されています。あなたの目標は、谷を飛び出して旗に到達することです。あなたが実行できるアクションは、左に加速する、右に加速する、または何もしないことです。車のx軸に沿った位置と速度を観察することができます。 +Mountain Carの環境は、谷底に閉じ込められた車で構成されています。目標は谷を飛び越えて旗に到達することです。実行できるアクションは、左に加速する、右に加速する、または何もしないの3つです。観測できるのは、車のx軸上の位置と速度です。 ## ノートブックの開始 [MountainCar.ipynb](../../../../../../lessons/6-Other/22-DeepRL/lab/MountainCar.ipynb)を開いてラボを開始してください。 -## 学び +## 学びのポイント -このラボを通じて、RLアルゴリズムを新しい環境に適用することはしばしば非常に簡単であることを学ぶべきです。なぜなら、OpenAI Gymはすべての環境に対して同じインターフェースを持っており、アルゴリズムは環境の性質に大きく依存しないからです。Pythonコードを再構成して、任意の環境をRLアルゴリズムにパラメータとして渡すこともできます。 +このラボを通じて学ぶべきことは、新しい環境にRLアルゴリズムを適用することはしばしば非常に簡単であるということです。これは、OpenAI Gymがすべての環境に対して同じインターフェースを提供しているためです。また、アルゴリズム自体は環境の性質に大きく依存しません。Pythonコードを再構築して、任意の環境をRLアルゴリズムにパラメータとして渡せるようにすることも可能です。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されました。正確性を追求していますが、自動翻訳にはエラーや不正確さが含まれる可能性があることをご承知おきください。原文はその母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当方は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/6-Other/23-MultiagentSystems/README.md b/translations/ja/lessons/6-Other/23-MultiagentSystems/README.md index 9605d552..d795378e 100644 --- a/translations/ja/lessons/6-Other/23-MultiagentSystems/README.md +++ b/translations/ja/lessons/6-Other/23-MultiagentSystems/README.md @@ -1,38 +1,47 @@ + # マルチエージェントシステム -知能を達成するための可能な方法の一つは、**エマージェント**(または**シナジー的**)アプローチと呼ばれるもので、多くの比較的単純なエージェントの結合された行動が、全体としてより複雑(または知的)なシステムの行動を生み出すという事実に基づいています。理論的には、これは[集団知能](https://en.wikipedia.org/wiki/Collective_intelligence)、[エマージェンティズム](https://en.wikipedia.org/wiki/Global_brain)、および[進化的サイバネティクス](https://en.wikipedia.org/wiki/Global_brain)の原則に基づいており、適切に組み合わされることで、下位システムからの何らかの付加価値を得ることができる(いわゆる*メタシステム遷移の原則*)とされています。 +知能を実現する方法の一つとして、**創発的**(または**相乗的**)アプローチがあります。このアプローチは、多くの比較的単純なエージェントの結合された行動が、システム全体としてより複雑(または知的)な行動を生み出す可能性があるという事実に基づいています。理論的には、これは[集合知](https://en.wikipedia.org/wiki/Collective_intelligence)、[創発主義](https://en.wikipedia.org/wiki/Global_brain)、および[進化的サイバネティクス](https://en.wikipedia.org/wiki/Global_brain)の原則に基づいており、これらは、低レベルのシステムを適切に組み合わせることで高レベルのシステムが何らかの付加価値を得る(いわゆる*メタシステム移行の原則*)と述べています。 -## [講義前クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/123) +## [講義前のクイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/123) -**マルチエージェントシステム**の方向性は、1990年代のAIにおいて、インターネットと分散システムの成長に応じて登場しました。古典的なAIの教科書の一つである[人工知能: 現代的アプローチ](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach)は、マルチエージェントシステムの観点から古典的AIを見ています。 +**マルチエージェントシステム**の方向性は、1990年代にインターネットと分散システムの成長に応じてAIの分野で登場しました。古典的なAIの教科書の一つである[Artificial Intelligence: A Modern Approach](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach)は、マルチエージェントシステムの観点から古典的なAIを捉えています。 -マルチエージェントアプローチの中心には、**エージェント**の概念があります。これは、何らかの**環境**の中で生きている存在で、その環境を知覚し、行動を起こすことができます。これは非常に広範な定義であり、エージェントにはさまざまなタイプや分類が存在します。 +マルチエージェントアプローチの中心となるのは、**エージェント**という概念です。エージェントは、ある**環境**に存在し、その環境を認識し、行動を起こすことができる存在です。この定義は非常に広範であり、エージェントには多くの異なる種類や分類があります。 * 推論能力による分類: - - **反応型**エージェントは通常、単純なリクエスト-レスポンス型の行動を持ちます - - **熟慮型**エージェントは、何らかの論理的推論や計画能力を持ちます + - **反応型**エージェントは通常、単純なリクエストとレスポンス型の行動を持つ + - **熟慮型**エージェントは何らかの論理的推論や計画能力を使用する * エージェントがコードを実行する場所による分類: - - **静的**エージェントは専用のネットワークノードで動作します - - **モバイル**エージェントは、ネットワークノード間でコードを移動できます + - **静的**エージェントは専用のネットワークノードで動作する + - **移動型**エージェントはネットワークノード間でコードを移動できる * 行動による分類: - - **受動的エージェント**は特定の目標を持ちません。このようなエージェントは外部の刺激に反応することはできますが、自ら行動を起こすことはありません。 - - **能動的エージェント**は追求する目標を持っています - - **認知エージェント**は複雑な計画や推論を含みます + - **受動型エージェント**は特定の目標を持たない。外部刺激に反応することはできるが、自ら行動を起こすことはない。 + - **能動型エージェント**は追求する目標を持つ + - **認知型エージェント**は複雑な計画や推論を含む 現在、マルチエージェントシステムは多くのアプリケーションで使用されています。 -* ゲームでは、多くのノンプレイヤーキャラクターが何らかのAIを用いており、知的エージェントと見なすことができます -* ビデオ制作では、群衆を含む複雑な3Dシーンのレンダリングは通常、マルチエージェントシミュレーションを使用して行われます -* システムモデリングでは、マルチエージェントアプローチが複雑なモデルの行動をシミュレートするために使用されます。たとえば、マルチエージェントアプローチは、COVID-19の世界的な拡散を予測するために成功裏に使用されました。似たようなアプローチを用いて、都市の交通をモデル化し、交通ルールの変更に対する反応を観察することができます。 -* 複雑な自動化システムでは、各デバイスが独立したエージェントとして機能し、全体のシステムをよりモノリシックではなく、より堅牢にします。 +* ゲームでは、多くのノンプレイヤーキャラクターが何らかのAIを使用しており、知的エージェントと見なすことができる +* 映像制作では、群衆を含む複雑な3Dシーンのレンダリングは通常、マルチエージェントシミュレーションを使用して行われる +* システムモデリングでは、マルチエージェントアプローチを使用して複雑なモデルの行動をシミュレートする。例えば、マルチエージェントアプローチはCOVID-19の世界的な感染拡大を予測するために成功裏に使用された。同様のアプローチは都市の交通をモデル化し、交通規則の変更に対する反応を観察するためにも使用できる。 +* 複雑な自動化システムでは、各デバイスが独立したエージェントとして機能し、システム全体をよりモノリシックでなく、より堅牢にする。 -マルチエージェントシステムについて深く掘り下げる時間はありませんが、**マルチエージェントモデリング**の一例を考えてみましょう。 +私たちはマルチエージェントシステムを深く掘り下げることはしませんが、**マルチエージェントモデリング**の一例を考えてみましょう。 ## NetLogo -[NetLogo](https://ccl.northwestern.edu/netlogo/)は、[Logo](https://en.wikipedia.org/wiki/Logo_(programming_language))プログラミング言語の改良版に基づくマルチエージェントモデリング環境です。この言語は、子供たちにプログラミングの概念を教えるために開発され、**タートル**と呼ばれるエージェントを制御することができ、そのタートルは動きながら跡を残します。これにより、エージェントの行動を理解するための非常に視覚的な方法で複雑な幾何学的図形を作成することができます。 +[NetLogo](https://ccl.northwestern.edu/netlogo/)は、[Logo](https://en.wikipedia.org/wiki/Logo_(programming_language))プログラミング言語の改良版に基づいたマルチエージェントモデリング環境です。この言語は子供たちにプログラミングの概念を教えるために開発され、**タートル**と呼ばれるエージェントを制御することができます。このタートルは移動しながら後ろに軌跡を残すことができ、複雑な幾何学的図形を作成することができます。これはエージェントの行動を視覚的に理解する非常に良い方法です。 -NetLogoでは、`create-turtles`コマンドを使用して多くのタートルを作成できます。次に、すべてのタートルに何らかのアクションを実行させることができます(以下の例では、10ポイント前進します)。 +NetLogoでは、`create-turtles`コマンドを使用して多くのタートルを作成できます。その後、すべてのタートルに何らかのアクションを実行させることができます(以下の例では、10ポイント前進する)。 ``` create-turtles 10 @@ -41,39 +50,39 @@ ask turtles [ ] ``` -もちろん、すべてのタートルが同じことをするのは面白くないので、`ask` groups of turtles, eg. those who are in the vicinity of a certain point. We can also create turtles of different *breeds* using `breed [cats cat]` command. Here `cat`はブリードの名前であり、異なるコマンドが明確さのために異なる形を使用するため、単数形と複数形の両方を指定する必要があります。 +もちろん、すべてのタートルが同じことをするのは面白くありません。そのため、特定のポイント付近にいるタートルのグループに`ask`コマンドを使用して指示を与えることができます。また、`breed [cats cat]`コマンドを使用して異なる*種類*のタートルを作成することもできます。ここで`cat`は種類の名前であり、単数形と複数形の両方を指定する必要があります。これは、異なるコマンドが明確さのために異なる形を使用するためです。 -> ✅ NetLogo言語そのものを学ぶことには立ち入らないでしょう - もっと学びたい場合は、素晴らしい[初心者向けインタラクティブNetLogo辞書](https://ccl.northwestern.edu/netlogo/bind/)を訪問してください。 +> ✅ NetLogo言語自体を学ぶことはしませんが、興味がある場合は素晴らしい[Beginner's Interactive NetLogo Dictionary](https://ccl.northwestern.edu/netlogo/bind/)リソースを訪れてください。 -NetLogoを[ダウンロード](https://ccl.northwestern.edu/netlogo/download.shtml)して、試してみることができます。 +NetLogoを[ダウンロード](https://ccl.northwestern.edu/netlogo/download.shtml)してインストールし、試してみることができます。 ### モデルライブラリ -NetLogoの素晴らしい点は、試すことができる動作するモデルのライブラリが含まれていることです。**ファイル → モデルライブラリ**に移動すると、選択できる多くのモデルのカテゴリがあります。 +NetLogoの素晴らしい点は、試すことができる動作するモデルのライブラリが含まれていることです。**File → Models Library**に移動すると、多くのカテゴリのモデルを選択できます。 -NetLogoモデルライブラリ +NetLogo Models Library > Dmitry Soshnikovによるモデルライブラリのスクリーンショット -たとえば、**生物学 → 群れ行動**のモデルを開くことができます。 +モデルの一つを開くことができます。例えば、**Biology → Flocking**。 ### 主な原則 -モデルを開くと、メインのNetLogo画面に移動します。ここに、有限の資源(草)を考慮したオオカミと羊の個体群を記述したサンプルモデルがあります。 +モデルを開くと、NetLogoのメイン画面に移動します。ここでは、有限の資源(草)を考慮した狼と羊の個体数を記述するサンプルモデルを見てみましょう。 -![NetLogoメイン画面](../../../../../translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.ja.png) +![NetLogo Main Screen](../../../../../translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.ja.png) > Dmitry Soshnikovによるスクリーンショット -この画面では、以下のものが見えます: +この画面では以下が確認できます。 -* **インターフェース**セクションには: - - すべてのエージェントが住むメインフィールド - - ボタン、スライダーなどのさまざまなコントロール - - シミュレーションのパラメータを表示するために使用できるグラフ -* **コード**タブには、NetLogoプログラムを入力できるエディタがあります +* **インターフェース**セクションには以下が含まれます: + - エージェントが存在するメインフィールド + - ボタンやスライダーなどのさまざまなコントロール + - シミュレーションのパラメータを表示するためのグラフ +* **コード**タブにはエディタが含まれており、NetLogoプログラムを入力できます -ほとんどの場合、インターフェースにはシミュレーションの状態を初期化する**セットアップ**ボタンと、実行を開始する**ゴー**ボタンがあります。これらは、次のようなコード内の対応するハンドラーによって処理されます: +ほとんどの場合、インターフェースにはシミュレーション状態を初期化する**Setup**ボタンと実行を開始する**Go**ボタンがあります。これらはコード内の対応するハンドラーによって処理され、以下のように見えます。 ``` to go [ @@ -81,67 +90,67 @@ to go [ ] ``` -NetLogoの世界は以下のオブジェクトで構成されています: +NetLogoの世界は以下のオブジェクトで構成されています。 -* **エージェント**(タートル)はフィールドを移動し、何かをすることができます。`ask turtles [...]` syntax, and the code in brackets is executed by all agents in *turtle mode*. -* **Patches** are square areas of the field, on which agents live. You can refer to all agents on the same patch, or you can change patch colors and some other properties. You can also `ask patches`を使用してエージェントに指示します。 -* **オブザーバー**は、世界を制御するユニークなエージェントです。すべてのボタンハンドラーは*オブザーバーモード*で実行されます。 +* **エージェント**(タートル)はフィールドを移動し、何かを実行できます。`ask turtles [...]`構文を使用してエージェントに指示を与え、角括弧内のコードはすべてのエージェントによって*タートルモード*で実行されます。 +* **パッチ**はフィールドの正方形の領域で、エージェントが存在します。同じパッチ上のすべてのエージェントを参照したり、パッチの色やその他のプロパティを変更したりできます。また、`ask patches`を使用して何かを実行させることもできます。 +* **オブザーバー**は世界を制御するユニークなエージェントです。すべてのボタンハンドラーは*オブザーバーモード*で実行されます。 -> ✅ マルチエージェント環境の美しさは、タートルモードまたはパッチモードで実行されるコードが、すべてのエージェントによって同時に並行して実行されることです。したがって、少しのコードを書き、個々のエージェントの行動をプログラムすることで、シミュレーションシステム全体の複雑な行動を作成することができます。 +> ✅ マルチエージェント環境の魅力は、タートルモードやパッチモードで実行されるコードがすべてのエージェントによって同時に並列実行されることです。そのため、少しのコードを書いて個々のエージェントの行動をプログラムすることで、シミュレーションシステム全体の複雑な行動を作り出すことができます。 ### 群れ行動 -マルチエージェントの行動の一例として、**[群れ行動](https://en.wikipedia.org/wiki/Flocking_(behavior))**を考えてみましょう。群れ行動は、鳥の群れが飛ぶ方法に非常に似た複雑なパターンです。彼らが飛ぶのを見ていると、彼らが何らかの集団アルゴリズムに従っているか、あるいは何らかの形の*集団知能*を持っていると思うかもしれません。しかし、この複雑な行動は、各個体エージェント(この場合は*鳥*)が、近くにいる他のエージェントを観察し、次の3つの単純なルールに従うときに生じます: +マルチエージェント行動の例として、**[群れ行動](https://en.wikipedia.org/wiki/Flocking_(behavior))**を考えてみましょう。群れ行動は、鳥の群れが飛ぶ様子に非常に似た複雑なパターンです。鳥が飛ぶ様子を見ていると、何らかの集団的なアルゴリズムに従っているように見えたり、*集合知*を持っているように思えるかもしれません。しかし、この複雑な行動は、各個体のエージェント(この場合は*鳥*)が近距離にいる他のエージェントを観察し、以下の3つの単純なルールに従うことで生じます。 -* **整列** - 隣接するエージェントの平均的な進行方向に向かって舵を取ります -* **凝集** - 隣接エージェントの平均位置に向かって舵を取ろうとします(*長距離の引力*) -* **分離** - 他の鳥に近づきすぎると、離れようとします(*短距離の反発*) +* **整列** - 隣接するエージェントの平均的な進行方向に向かって進む +* **結合** - 隣接するエージェントの平均位置に向かって進む(*長距離の引き寄せ*) +* **分離** - 他の鳥に近づきすぎた場合、離れるようにする(*短距離の反発*) -群れ行動の例を実行し、その行動を観察することができます。また、*分離の度合い*や*視界の範囲*などのパラメータを調整することもできます。視界の範囲を0に減らすと、すべての鳥が盲目になり、群れ行動が停止します。分離を0に減らすと、すべての鳥が一直線に集まります。 +群れ行動の例を実行してその行動を観察することができます。また、*分離の度合い*や*視野範囲*などのパラメータを調整することもできます。視野範囲を0に減らすと、すべての鳥が盲目になり、群れ行動が停止します。分離を0に減らすと、すべての鳥が一直線に集まります。 -> ✅ **コード**タブに切り替え、群れ行動の3つのルール(整列、凝集、分離)がコード内でどのように実装されているかを確認してください。視界にいるエージェントだけを参照していることに注意してください。 +> ✅ **Code**タブに切り替えて、群れ行動の3つのルール(整列、結合、分離)がコード内でどのように実装されているかを確認してください。視界内にいるエージェントのみを参照している点に注目してください。 -### 他のモデルを見る +### 他のモデルの例 -試すことができるいくつかの興味深いモデルがあります: +以下のような興味深いモデルをいくつか試すことができます。 -* **アート → 花火**は、花火が個々の火流の集団行動と見なされる方法を示します -* **社会科学 → 交通基本**および**社会科学 → 交通グリッド**は、信号機の有無にかかわらず、1Dおよび2Dグリッドでの都市交通のモデルを示します。シミュレーション内の各車両は、次のルールに従います: - - 前方のスペースが空いている場合 - 加速します(一定の最大速度まで) - - 前方に障害物が見えた場合 - ブレーキをかけます(運転手がどれだけ遠くを見ることができるかを調整できます) -* **社会科学 → パーティー**は、人々がカクテルパーティー中にどのようにグループを形成するかを示します。グループの幸福度を最も早く高めるパラメータの組み合わせを見つけることができます。 +* **Art → Fireworks**では、花火が個々の火の流れの集合的な行動として考えられる様子を示します +* **Social Science → Traffic Basic**および**Social Science → Traffic Grid**では、1Dおよび2Dグリッドでの都市交通のモデルを信号機の有無で示します。シミュレーション内の各車両は以下のルールに従います: + - 前方のスペースが空いている場合 - 加速(一定の最大速度まで) + - 前方に障害物が見える場合 - 減速(運転者がどれだけ遠くを見えるかを調整可能) +* **Social Science → Party**では、カクテルパーティ中に人々がどのようにグループ化するかを示します。グループの幸福度が最も速く増加するパラメータの組み合わせを見つけることができます。 -これらの例からわかるように、マルチエージェントシミュレーションは、同じまたは類似の論理に従う個々のエージェントで構成される複雑なシステムの行動を理解するための非常に有用な方法です。また、コンピュータゲームの[NPC](https://en.wikipedia.org/wiki/NPC)や3Dアニメーションの世界のエージェントを制御するためにも使用できます。 +これらの例からわかるように、マルチエージェントシミュレーションは、同じまたは類似の論理に従う個々のエージェントで構成される複雑なシステムの行動を理解するための非常に有用な方法です。また、コンピュータゲーム内の[NPC](https://en.wikipedia.org/wiki/NPC)や3Dアニメーション世界内のエージェントなど、仮想エージェントを制御するためにも使用できます。 ## 熟慮型エージェント -上記のエージェントは非常に単純で、何らかのアルゴリズムを使用して環境の変化に反応します。このようなエージェントは**反応型エージェント**です。しかし、時にはエージェントが推論し、行動を計画することができ、その場合には**熟慮型**と呼ばれます。 +上記で説明したエージェントは非常に単純で、環境の変化に対して何らかのアルゴリズムを使用して反応します。このようなエージェントは**反応型エージェント**と呼ばれます。しかし、時にはエージェントが推論し、行動を計画することがあり、その場合は**熟慮型**と呼ばれます。 -典型的な例は、人間から休暇ツアーを予約する指示を受け取るパーソナルエージェントです。インターネット上に多くのエージェントがいて、これを手伝うことができるとしましょう。エージェントは、利用可能なフライトを確認し、異なる日付のホテル価格を調べ、最良の価格を交渉しようとします。休暇計画が完了し、所有者によって確認されると、予約を進めることができます。 +典型的な例として、人間からの指示を受けて休暇ツアーを予約する個人エージェントがあります。インターネット上に存在する多くのエージェントがそれを助けることができます。このエージェントは他のエージェントに連絡し、利用可能なフライトや異なる日付のホテル料金を確認し、最適な価格を交渉しようとします。休暇計画が完了し、所有者によって確認されると、予約を進めることができます。 -そのためには、エージェントは**コミュニケーション**を取る必要があります。成功するコミュニケーションのためには、次のことが必要です: +これを実現するために、エージェントは**通信**する必要があります。成功する通信には以下が必要です。 -* 知識を交換するためのいくつかの**標準的な言語**、例えば[知識交換フォーマット](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format)(KIF)や[知識クエリおよび操作言語](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language)(KQML)。これらの言語は[発話行為理論](https://en.wikipedia.org/wiki/Speech_act)に基づいて設計されています。 -* さまざまな**オークションタイプ**に基づいた交渉のための**プロトコル**を含むべきです。 -* 同じ概念を参照し、その意味を理解するための**共通のオントロジー**を使用します。 -* さまざまなエージェントができることを**発見**する方法も必要です。これも何らかのオントロジーに基づいています。 +* 知識を交換するための**標準言語**、例えば[Knowledge Interchange Format](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format)(KIF)や[Knowledge Query and Manipulation Language](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language)(KQML)。これらの言語は[発話行為理論](https://en.wikipedia.org/wiki/Speech_act)に基づいて設計されています。 +* 交渉のための**プロトコル**を含む必要があり、異なる**オークション形式**に基づいています。 +* 同じ概念を参照し、その意味を理解するための**共通のオントロジー**。 +* 異なるエージェントが何をできるかを発見する方法も必要であり、これも何らかのオントロジーに基づいています。 -熟慮型エージェントは反応型エージェントよりもはるかに複雑で、環境の変化に反応するだけでなく、*行動を開始する*こともできる必要があります。熟慮型エージェントの提案されたアーキテクチャの一つは、いわゆる信念-欲求-意図(BDI)エージェントです: +熟慮型エージェントは反応型エージェントよりもはるかに複雑で、環境の変化に反応するだけでなく、*行動を開始*することもできなければなりません。熟慮型エージェントの提案されているアーキテクチャの一つに、いわゆる信念-欲求-意図(BDI)エージェントがあります。 -* **信念**は、エージェントの環境に関する知識のセットを形成します。これは知識ベースや、エージェントが環境の特定の状況に適用できるルールのセットとして構造化できます。 -* **欲求**は、エージェントが何をしたいか、すなわちその目標を定義します。たとえば、上記のパーソナルアシスタントエージェントの目標はツアーを予約することであり、ホテルエージェントの目標は利益を最大化することです。 -* **意図**は、エージェントが目標を達成するために計画する具体的な行動です。行動は通常、環境を変化させ、他のエージェントとのコミュニケーションを引き起こします。 +* **信念**はエージェントの環境に関する知識のセットを形成します。これは知識ベースやルールのセットとして構造化され、エージェントが環境内の特定の状況に適用することができます。 +* **欲求**はエージェントが何をしたいか、つまりその目標を定義します。例えば、上記の個人アシスタントエージェントの目標はツアーを予約することであり、ホテルエージェントの目標は利益を最大化することです。 +* **意図**はエージェントが目標を達成するために計画する具体的な行動です。行動は通常環境を変化させ、他のエージェントとの通信を引き起こします。 -マルチエージェントシステムを構築するためのプラットフォームもいくつか存在します。例えば、[JADE](https://jade.tilab.com/)があります。[この論文](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf)には、マルチエージェントプラットフォームのレビューと、マルチエージェントシステムの簡単な歴史およびそのさまざまな使用シナリオが含まれています。 +マルチエージェントシステムを構築するためのプラットフォームとして[JADE](https://jade.tilab.com/)などがあります。[この論文](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf)には、マルチエージェントプラットフォームのレビュー、マルチエージェントシステムの簡単な歴史、およびそのさまざまな使用シナリオが含まれています。 ## 結論 -マルチエージェントシステムは非常に異なる形を取り、多くの異なるアプリケーションで使用されることができます。 -それらはすべて、個々のエージェントのより単純な行動に焦点を当て、**シナジー効果**により全体のシステムのより複雑な行動を達成する傾向があります。 +マルチエージェントシステムは非常に多様な形を取り、多くの異なるアプリケーションで使用される可能性があります。 +これらはすべて、個々のエージェントの単純な行動に焦点を当て、**相乗効果**によってシステム全体のより複雑な行動を達成します。 ## 🚀 チャレンジ -このレッスンを現実世界に持ち込み、問題を解決できるマルチエージェントシステムを概念化してみてください。たとえば、学校のバスルートを最適化するためにマルチエージェントシステムは何をする必要があるでしょうか?ベーカリー +このレッスンを現実世界に応用し、問題を解決するためのマルチエージェントシステム **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。元の文書はその原文を権威ある情報源として考慮すべきです。重要な情報については、専門の人間による翻訳をお勧めします。この翻訳の使用に起因する誤解や誤解釈について、当社は一切責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があることをご承知おきください。原文(元の言語で記載された文書)が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳をお勧めします。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/6-Other/23-MultiagentSystems/assignment.md b/translations/ja/lessons/6-Other/23-MultiagentSystems/assignment.md index 23dc96b1..3914dfd3 100644 --- a/translations/ja/lessons/6-Other/23-MultiagentSystems/assignment.md +++ b/translations/ja/lessons/6-Other/23-MultiagentSystems/assignment.md @@ -1,8 +1,17 @@ -# NetLogo 課題 + +# NetLogo課題 -NetLogo のライブラリにあるモデルの中から1つを選び、実際の状況にできるだけ近い形でシミュレーションを行ってください。良い例としては、Alternative Visualizations フォルダーにある Virus モデルを調整して、COVID-19 の拡散をモデル化する方法を示すことが挙げられます。実際のウイルスの拡散を模倣するモデルを構築できますか? +NetLogoのライブラリにあるモデルの1つを選び、それを使って現実の状況をできるだけ正確にシミュレーションしてください。良い例としては、Alternative VisualizationsフォルダにあるVirusモデルを調整して、COVID-19の拡散をモデル化する方法を示すことが挙げられます。現実のウイルス拡散を模倣するモデルを作成できますか? -作業の成果を示すために、コピーを保存し、モデルがどのように現実の状況と関連しているかを説明するビデオデモを作成してください。 +作業内容を示すために、コピーを保存し、モデルが現実の状況とどのように関連しているかを説明するビデオデモを作成してください。 **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳にはエラーや不正確さが含まれる可能性があることをご承知おきください。元の文書は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用から生じる誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書を正式な情報源としてお考えください。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/7-Ethics/README.md b/translations/ja/lessons/7-Ethics/README.md index a86abe88..560dc7b8 100644 --- a/translations/ja/lessons/7-Ethics/README.md +++ b/translations/ja/lessons/7-Ethics/README.md @@ -1,43 +1,52 @@ + # 倫理的かつ責任あるAI -このコースはほぼ終わりに近づいており、今までの内容を通じて、AIがデータの中に関係性を見つけ出し、人間の行動のいくつかの側面を再現するモデルを訓練するための形式的な数学的手法に基づいていることが明確に理解できたことを願っています。この歴史的な時点において、私たちはAIをデータからパターンを抽出し、それらのパターンを新しい問題を解決するために適用する非常に強力なツールと見なしています。 +このコースもほぼ終了に近づきました。ここまでで、AIがデータの関係性を見つけ出し、人間の行動の一部を再現するモデルを訓練するための、いくつかの正式な数学的手法に基づいていることが明確に理解できたと思います。この時点で、AIはデータからパターンを抽出し、それを新しい問題解決に応用する非常に強力なツールであると考えられています。 -## [講義前のクイズ](https://white-water-09ec41f0f.azurestaticapps.net/quiz/5/) +## [事前講義クイズ](https://white-water-09ec41f0f.azurestaticapps.net/quiz/5/) -しかし、サイエンスフィクションでは、AIが人類に対して危険をもたらすというストーリーをしばしば目にします。通常、これらのストーリーはAIの反乱に焦点を当てており、AIが人間に対抗することを決定するというものです。これは、AIが何らかの感情を持っているか、開発者が予期しない決定を下すことができることを示唆しています。 +しかし、SFではAIが人類に危険をもたらすという物語がよく描かれます。通常、これらの物語はAIの反乱、つまりAIが人間に対抗することを決意するという内容が中心です。これは、AIが何らかの感情を持ち、開発者が予期しない決定を下すことができることを示唆しています。 -このコースで学んだAIの種類は、大規模な行列演算に過ぎません。それは私たちの問題を解決するのを助ける非常に強力なツールであり、他の強力なツールと同様に、良い目的にも悪い目的にも使用される可能性があります。重要なのは、それが*悪用される*可能性があるということです。 +このコースで学んだAIは、大規模な行列演算に過ぎません。それは私たちの問題解決を助ける非常に強力なツールですが、他の強力なツールと同様に、良い目的にも悪い目的にも使用される可能性があります。重要なのは、それが*誤用*される可能性があるということです。 ## 責任あるAIの原則 -AIの偶発的または意図的な悪用を避けるために、Microsoftは重要な[責任あるAIの原則](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-77998-cacaste)を示しています。これらの原則の基盤となる概念は以下の通りです: +AIの偶発的または意図的な誤用を防ぐために、Microsoftは重要な[責任あるAIの原則](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-77998-cacaste)を掲げています。以下の概念がこれらの原則を支えています: -* **公平性**は、*モデルのバイアス*という重要な問題に関連しています。これは、訓練に偏ったデータを使用することによって引き起こされる可能性があります。たとえば、ある人がソフトウェア開発者の職に就く確率を予測しようとする場合、モデルは男性に対して高い優先度を与える可能性があります - それは訓練データセットが男性の聴衆に偏っていた可能性があるからです。私たちは、訓練データを慎重にバランスを取り、モデルを調査してバイアスを避け、モデルがより関連性の高い特徴を考慮に入れるようにする必要があります。 -* **信頼性と安全性**。AIモデルはその性質上、間違いを犯す可能性があります。ニューラルネットワークは確率を返し、私たちは意思決定を行う際にそれを考慮する必要があります。すべてのモデルには精度と再現率があり、誤った助言が引き起こす可能性のある害を防ぐためにそれを理解する必要があります。 -* **プライバシーとセキュリティ**にはAI特有の影響があります。たとえば、モデルの訓練にデータを使用する場合、そのデータは何らかの形で「統合」されます。一方では、これによりセキュリティとプライバシーが向上しますが、他方では、モデルがどのデータで訓練されたのかを覚えておく必要があります。 -* **包括性**は、私たちが人々を置き換えるためのAIを構築しているのではなく、むしろ人々を補完し、私たちの仕事をより創造的にするためのものであることを意味します。また、これは公平性とも関連しており、過小評価されたコミュニティに対処する際に、収集したデータセットのほとんどが偏っている可能性があるため、これらのコミュニティがAIによって含まれ、適切に扱われることを確認する必要があります。 -* **透明性**。これは、私たちが使用されているAIについて常に明確であることを含みます。また、可能な限り、*解釈可能な*AIシステムを使用したいと考えています。 -* **責任**。AIモデルが何らかの決定を下したとき、それらの決定に対して誰が責任を負うのかは必ずしも明確ではありません。私たちは、AIの決定の責任がどこにあるのかを理解する必要があります。ほとんどの場合、重要な決定を下す際に人間をループに含めることが望ましく、実際の人々が責任を持つようにする必要があります。 +* **公平性**は、*モデルのバイアス*という重要な問題に関連しています。これは、バイアスのあるデータを使用して訓練することで引き起こされる可能性があります。例えば、ある人がソフトウェア開発者の職に就く確率を予測しようとする場合、訓練データセットが男性に偏っている可能性が高いため、モデルは男性を優先する傾向があります。訓練データを慎重にバランスさせ、モデルを調査してバイアスを回避し、より関連性の高い特徴を考慮するようにする必要があります。 +* **信頼性と安全性**。AIモデルはその性質上、間違いを犯す可能性があります。ニューラルネットワークは確率を返すため、意思決定の際にそれを考慮する必要があります。すべてのモデルには精度と再現率があり、それを理解して誤った助言が引き起こす可能性のある害を防ぐ必要があります。 +* **プライバシーとセキュリティ**には、AI特有の意味合いがあります。例えば、モデルを訓練するためにデータを使用すると、そのデータが何らかの形でモデルに「統合」されます。一方ではセキュリティとプライバシーが向上しますが、他方ではモデルがどのデータで訓練されたかを覚えておく必要があります。 +* **包括性**は、人々を置き換えるためではなく、人々を補完し、私たちの仕事をより創造的にするためにAIを構築していることを意味します。また、公平性にも関連しており、過小評価されているコミュニティに対処する際、収集するデータセットの多くが偏っている可能性が高いため、それらのコミュニティがAIによって正しく扱われるようにする必要があります。 +* **透明性**。これには、AIが使用されていることを常に明確にすることが含まれます。また、可能な限り、*解釈可能*なAIシステムを使用したいと考えています。 +* **説明責任**。AIモデルが何らかの決定を下す場合、その決定に対する責任が誰にあるのかが必ずしも明確ではありません。AIの決定に対する責任がどこにあるのかを理解する必要があります。ほとんどの場合、重要な決定を下す際に人間を関与させ、実際の人々が責任を負うようにしたいと考えています。 ## 責任あるAIのためのツール -Microsoftは、[責任あるAIツールボックス](https://github.com/microsoft/responsible-ai-toolbox)を開発しました。これには一連のツールが含まれています: +Microsoftは、以下のツールを含む[Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox)を開発しました: -* 解釈可能性ダッシュボード(InterpretML) -* 公平性ダッシュボード(FairLearn) -* エラー分析ダッシュボード -* 責任あるAIダッシュボードには以下が含まれます +* Interpretability Dashboard (InterpretML) +* Fairness Dashboard (FairLearn) +* Error Analysis Dashboard +* Responsible AI Dashboard(以下を含む) - - EconML - 因果分析のためのツールで、もしも質問に焦点を当てています - - DiCE - 反事実分析のためのツールで、モデルの決定に影響を与えるために変更が必要な特徴を確認できます + - EconML - 因果分析のためのツールで、What-ifの質問に焦点を当てています + - DiCE - 反事実分析のためのツールで、モデルの決定に影響を与えるためにどの特徴を変更する必要があるかを確認できます -AI倫理についての詳細情報は、[このレッスン](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/3-fairness?WT.mc_id=academic-77998-cacaste)を訪れてください。このレッスンには課題が含まれています。 +AI倫理についての詳細は、課題を含む機械学習カリキュラムの[このレッスン](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/3-fairness?WT.mc_id=academic-77998-cacaste)をご覧ください。 -## レビューと自己学習 +## 復習と自主学習 -責任あるAIについてもっと学ぶには、この[ラーニングパス](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77998-cacaste)を受講してください。 +責任あるAIについてさらに学ぶには、この[学習パス](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77998-cacaste)を受講してください。 -## [講義後のクイズ](https://white-water-09ec41f0f.azurestaticapps.net/quiz/6/) +## [事後講義クイズ](https://white-water-09ec41f0f.azurestaticapps.net/quiz/6/) **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。元の文書はその母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用から生じる誤解や誤訳については、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/README.md b/translations/ja/lessons/README.md index 5bd9df44..10e46b66 100644 --- a/translations/ja/lessons/README.md +++ b/translations/ja/lessons/README.md @@ -1,8 +1,17 @@ + # 概要 -![概要のスケッチ](../../../translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.ja.png) +![概要のイラスト](../../../translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.ja.png) -> スケッチノート作成者: [Tomomi Imura](https://twitter.com/girlie_mac) +> スケッチノート作成者:[Tomomi Imura](https://twitter.com/girlie_mac) **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確さを追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることにご留意ください。元の文書はその母国語で権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈については、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/X-Extras/X1-MultiModal/README.md b/translations/ja/lessons/X-Extras/X1-MultiModal/README.md index 71cc0346..41f1e922 100644 --- a/translations/ja/lessons/X-Extras/X1-MultiModal/README.md +++ b/translations/ja/lessons/X-Extras/X1-MultiModal/README.md @@ -1,79 +1,88 @@ + # マルチモーダルネットワーク -トランスフォーマーモデルがNLPタスクを解決する上で成功を収めた後、同様のアーキテクチャがコンピュータビジョンタスクにも適用されてきました。視覚と自然言語の機能を*組み合わせる*モデルの構築に対する関心が高まっています。そのような試みの一つがOpenAIによって行われ、CLIPおよびDALL.Eと呼ばれています。 +トランスフォーマーモデルがNLPタスクで成功を収めた後、同様のアーキテクチャがコンピュータビジョンタスクにも適用されるようになりました。視覚と言語の能力を*組み合わせる*モデルを構築することへの関心が高まっています。その試みの一つがOpenAIによるCLIPやDALL.Eです。 -## 対照的画像事前学習 (CLIP) +## Contrastive Image Pre-Training (CLIP) -CLIPの主なアイデアは、テキストプロンプトと画像を比較し、画像がプロンプトにどれだけ一致するかを判断できることです。 +CLIPの主なアイデアは、テキストプロンプトと画像を比較し、画像がプロンプトにどれだけ対応しているかを判断できるようにすることです。 -![CLIPアーキテクチャ](../../../../../translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.ja.png) +![CLIP アーキテクチャ](../../../../../translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.ja.png) -> *このブログ記事からの画像です [this blog post](https://openai.com/blog/clip/)* +> *画像は[このブログ記事](https://openai.com/blog/clip/)から引用* -モデルは、インターネットから取得した画像とそのキャプションでトレーニングされています。各バッチについて、N対の(画像、テキスト)を取得し、それらをいくつかのベクトル表現に変換します。これらの表現は互いにマッチングされます。損失関数は、1対(例:IとT)に対応するベクトル間のコサイン類似度を最大化し、他のすべてのペア間のコサイン類似度を最小化するように定義されています。これがこのアプローチが**対照的**と呼ばれる理由です。 +このモデルは、インターネットから取得した画像とそのキャプションを用いてトレーニングされます。各バッチでは、N組の(画像、テキスト)ペアを取り、それらをベクトル表現に変換します。そして、それらの表現をマッチングさせます。損失関数は、1つのペア(例: IとT)に対応するベクトル間のコサイン類似度を最大化し、他のすべてのペア間のコサイン類似度を最小化するように定義されます。このアプローチが**コントラスト学習**と呼ばれる理由です。 -CLIPモデル/ライブラリは[OpenAI GitHub](https://github.com/openai/CLIP)から入手できます。このアプローチは[このブログ記事](https://openai.com/blog/clip/)で説明されており、[この論文](https://arxiv.org/pdf/2103.00020.pdf)でより詳細に記載されています。 +CLIPモデル/ライブラリは[OpenAI GitHub](https://github.com/openai/CLIP)から利用可能です。このアプローチは[このブログ記事](https://openai.com/blog/clip/)で説明されており、さらに詳細は[この論文](https://arxiv.org/pdf/2103.00020.pdf)に記載されています。 -このモデルが事前学習されると、画像のバッチとテキストプロンプトのバッチを与えることができ、確率を持つテンソルを返します。CLIPは以下のいくつかのタスクに使用できます。 +このモデルを事前学習した後、画像のバッチとテキストプロンプトのバッチを与えると、確率のテンソルを返します。CLIPは以下のようなタスクに使用できます: **画像分類** -たとえば、画像を猫、犬、人間に分類する必要があるとします。この場合、モデルに画像と一連のテキストプロンプト("*猫の写真*", "*犬の写真*", "*人間の写真*")を与えます。得られた3つの確率のベクトルの中から、最も高い値を持つインデックスを選択するだけです。 +例えば、画像を猫、犬、人間に分類する必要があるとします。この場合、モデルに画像と一連のテキストプロンプト(例: "*a picture of a cat*"、"*a picture of a dog*"、"*a picture of a human*")を与えます。結果として得られる3つの確率のベクトルの中で、最も高い値を持つインデックスを選択すればよいのです。 ![CLIPによる画像分類](../../../../../translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.ja.png) -> *このブログ記事からの画像です [this blog post](https://openai.com/blog/clip/)* +> *画像は[このブログ記事](https://openai.com/blog/clip/)から引用* **テキストベースの画像検索** -逆に、画像のコレクションを持っている場合、このコレクションをモデルに渡し、テキストプロンプトを与えることで、与えられたプロンプトに最も類似した画像を取得できます。 +逆のことも可能です。画像のコレクションがある場合、このコレクションをモデルに渡し、テキストプロンプトを与えると、指定されたプロンプトに最も類似した画像を返します。 -## ✍️ 例: [CLIPを使用した画像分類と画像検索](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) +## ✍️ 例: [CLIPを使った画像分類と画像検索](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) -CLIPの実行を確認するには、[Clip.ipynb](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb)ノートブックを開いてください。 +[Clip.ipynb](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb)ノートブックを開いて、CLIPの動作を確認してください。 -## VQGAN+ CLIPによる画像生成 +## VQGAN+CLIPを使った画像生成 -CLIPは、テキストプロンプトから**画像生成**にも使用できます。これを行うには、いくつかのベクトル入力に基づいて画像を生成できる**生成モデル**が必要です。そのようなモデルの一つが[VQGAN](https://compvis.github.io/taming-transformers/)(ベクトル量子化GAN)と呼ばれています。 +CLIPはテキストプロンプトからの**画像生成**にも使用できます。このためには、ベクトル入力に基づいて画像を生成できる**生成モデル**が必要です。その一つが[VQGAN](https://compvis.github.io/taming-transformers/)(Vector-Quantized GAN)と呼ばれるモデルです。 -VQGANが通常の[GAN](../../4-ComputerVision/10-GANs/README.md)と異なる主なアイデアは次の通りです: -* 自己回帰トランスフォーマーアーキテクチャを使用して、画像を構成する文脈に富んだ視覚部分のシーケンスを生成します。これらの視覚部分は、[CNN](../../4-ComputerVision/07-ConvNets/README.md)によって学習されます。 -* 画像の部分が「本物」か「偽物」であるかを検出する部分画像判別器を使用します(従来のGANの「全か無か」アプローチとは異なります)。 +VQGANが通常の[GAN](../../4-ComputerVision/10-GANs/README.md)と異なる主な点は以下の通りです: +* 自己回帰型トランスフォーマーアーキテクチャを使用して、画像を構成する文脈豊かな視覚的パーツのシーケンスを生成します。これらの視覚的パーツは[CNN](../../4-ComputerVision/07-ConvNets/README.md)によって学習されます。 +* サブイメージ判別器を使用して、画像の一部が「本物」か「偽物」かを検出します(従来のGANの「全体か無か」のアプローチとは異なります)。 -VQGANについて詳しくは、[Taming Transformers](https://compvis.github.io/taming-transformers/)のウェブサイトで学ぶことができます。 +VQGANの詳細については、[Taming Transformers](https://compvis.github.io/taming-transformers/)のウェブサイトをご覧ください。 -VQGANと従来のGANの重要な違いの一つは、後者が任意の入力ベクトルから適切な画像を生成できるのに対し、VQGANは一貫性のない画像を生成する可能性が高いことです。したがって、画像生成プロセスをさらにガイドする必要があり、それはCLIPを使用して行うことができます。 +VQGANと従来のGANの重要な違いの一つは、後者が任意の入力ベクトルから適切な画像を生成できるのに対し、VQGANは一貫性のない画像を生成する可能性が高いことです。そのため、画像生成プロセスをさらに誘導する必要があり、それがCLIPを使用して行われます。 -![VQGAN+CLIPアーキテクチャ](../../../../../translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.ja.png) +![VQGAN+CLIP アーキテクチャ](../../../../../translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.ja.png) -テキストプロンプトに対応する画像を生成するために、まずランダムなエンコーディングベクトルを用意し、それをVQGANに通して画像を生成します。次に、CLIPを使用して、画像がテキストプロンプトにどれだけ一致するかを示す損失関数を生成します。目標は、この損失を最小化し、バックプロパゲーションを使用して入力ベクトルのパラメータを調整することです。 +テキストプロンプトに対応する画像を生成するには、まずランダムなエンコーディングベクトルを用意し、それをVQGANに通して画像を生成します。その後、CLIPを使用して、画像がテキストプロンプトにどれだけ対応しているかを示す損失関数を生成します。その損失を最小化することを目指し、逆伝播を使用して入力ベクトルのパラメータを調整します。 -VQGAN+CLIPを実装した優れたライブラリは[Pixray](http://github.com/pixray/pixray)です。 +VQGAN+CLIPを実装した優れたライブラリとして[Pixray](http://github.com/pixray/pixray)があります。 -![Pixrayによって生成された画像](../../../../../translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.ja.png) | ![Pixrayによって生成された画像](../../../../../translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.ja.png) | ![Pixrayによって生成された画像](../../../../../translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.ja.png) +![Pixrayによる生成画像](../../../../../translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.ja.png) | ![Pixrayによる生成画像](../../../../../translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.ja.png) | ![Pixrayによる生成画像](../../../../../translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.ja.png) ----|----|---- -プロンプト"*若い男性の文学教師が本を持っている水彩画のクローズアップポートレート*"から生成された画像 | プロンプト"*若い女性のコンピュータサイエンス教師がコンピュータを持っている油彩画のクローズアップポートレート*"から生成された画像 | プロンプト"*黒板の前にいる老年男性数学教師の油彩画のクローズアップポートレート*"から生成された画像 +プロンプト *a closeup watercolor portrait of young male teacher of literature with a book* から生成された画像 | プロンプト *a closeup oil portrait of young female teacher of computer science with a computer* から生成された画像 | プロンプト *a closeup oil portrait of old male teacher of mathematics in front of blackboard* から生成された画像 -> 画像は[Dmitry Soshnikov](http://soshnikov.com)による**人工教師**コレクションからのものです。 +> 画像は[Dmitry Soshnikov](http://soshnikov.com)による**Artificial Teachers**コレクションから引用 ## DALL-E ### [DALL-E 1](https://openai.com/research/dall-e) -DALL-Eは、プロンプトから画像を生成するように訓練されたGPT-3のバージョンです。120億のパラメータで訓練されています。 +DALL-Eは、プロンプトから画像を生成するようにトレーニングされたGPT-3のバージョンです。120億のパラメータでトレーニングされています。 -CLIPとは異なり、DALL-Eはテキストと画像をトークンの単一ストリームとして受け取ります。そのため、複数のプロンプトから、テキストに基づいて画像を生成することができます。 +CLIPとは異なり、DALL-Eはテキストと画像の両方を、画像とテキストのトークンの単一ストリームとして受け取ります。そのため、複数のプロンプトからテキストに基づいて画像を生成できます。 ### [DALL-E 2](https://openai.com/dall-e-2) -DALL-E 1と2の主な違いは、よりリアルな画像とアートを生成することです。 +DALL-E 1と2の主な違いは、よりリアルな画像やアートを生成できる点です。 DALL-Eによる画像生成の例: -![Pixrayによって生成された画像](../../../../../translated_images/DALL·E%202023-06-20%2015.56.56%20-%20a%20closeup%20watercolor%20portrait%20of%20young%20male%20teacher%20of%20literature%20with%20a%20book.6c235e8271d9ed10ce985d86aeb241a58518958647973af136912116b9518fce.ja.png) | ![Pixrayによって生成された画像](../../../../../translated_images/DALL·E%202023-06-20%2015.57.43%20-%20a%20closeup%20oil%20portrait%20of%20young%20female%20teacher%20of%20computer%20science%20with%20a%20computer.f21dc4166340b6c8b4d1cb57efd1e22127407f9b28c9ac7afe11344065369e64.ja.png) | ![Pixrayによって生成された画像](../../../../../translated_images/DALL·E%202023-06-20%2015.58.42%20-%20%20a%20closeup%20oil%20portrait%20of%20old%20male%20teacher%20of%20mathematics%20in%20front%20of%20blackboard.d331c2dfbdc3f7c46aa65c0809066f5e7ed4b49609cd259852e760df21051e4a.ja.png) +![Pixrayによる生成画像](../../../../../translated_images/DALL·E%202023-06-20%2015.56.56%20-%20a%20closeup%20watercolor%20portrait%20of%20young%20male%20teacher%20of%20literature%20with%20a%20book.6c235e8271d9ed10ce985d86aeb241a58518958647973af136912116b9518fce.ja.png) | ![Pixrayによる生成画像](../../../../../translated_images/DALL·E%202023-06-20%2015.57.43%20-%20a%20closeup%20oil%20portrait%20of%20young%20female%20teacher%20of%20computer%20science%20with%20a%20computer.f21dc4166340b6c8b4d1cb57efd1e22127407f9b28c9ac7afe11344065369e64.ja.png) | ![Pixrayによる生成画像](../../../../../translated_images/DALL·E%202023-06-20%2015.58.42%20-%20%20a%20closeup%20oil%20portrait%20of%20old%20male%20teacher%20of%20mathematics%20in%20front%20of%20blackboard.d331c2dfbdc3f7c46aa65c0809066f5e7ed4b49609cd259852e760df21051e4a.ja.png) ----|----|---- -プロンプト"*若い男性の文学教師が本を持っている水彩画のクローズアップポートレート*"から生成された画像 | プロンプト"*若い女性のコンピュータサイエンス教師がコンピュータを持っている油彩画のクローズアップポートレート*"から生成された画像 | プロンプト"*黒板の前にいる老年男性数学教師の油彩画のクローズアップポートレート*"から生成された画像 +プロンプト *a closeup watercolor portrait of young male teacher of literature with a book* から生成された画像 | プロンプト *a closeup oil portrait of young female teacher of computer science with a computer* から生成された画像 | プロンプト *a closeup oil portrait of old male teacher of mathematics in front of blackboard* から生成された画像 ## 参考文献 -* VQGAN論文: [高解像度画像合成のためのトランスフォーマーの調整](https://compvis.github.io/taming-transformers/paper/paper.pdf) -* CLIP論文: [自然言語監視からの転送可能な視覚モデルの学習](https://arxiv.org/pdf/2103.00020.pdf) +* VQGAN論文: [Taming Transformers for High-Resolution Image Synthesis](https://compvis.github.io/taming-transformers/paper/paper.pdf) +* CLIP論文: [Learning Transferable Visual Models From Natural Language Supervision](https://arxiv.org/pdf/2103.00020.pdf) **免責事項**: -この文書は、機械ベースのAI翻訳サービスを使用して翻訳されました。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご承知おきください。原文の母国語の文書が権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用によって生じる誤解や誤訳について、当社は責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 \ No newline at end of file diff --git a/translations/ja/lessons/sketchnotes/LICENSE.md b/translations/ja/lessons/sketchnotes/LICENSE.md index c7a03d01..51a1cdc5 100644 --- a/translations/ja/lessons/sketchnotes/LICENSE.md +++ b/translations/ja/lessons/sketchnotes/LICENSE.md @@ -1,126 +1,122 @@ -# クリエイティブ・コモンズ 表示-継承 4.0 国際ライセンス + +Attribution-ShareAlike 4.0 国際 -クリエイティブ・コモンズ株式会社(「クリエイティブ・コモンズ」)は法律事務所ではなく、法的サービスや法的アドバイスを提供するものではありません。クリエイティブ・コモンズの公開ライセンスの配布は、弁護士とクライアントの関係やその他の関係を生じさせるものではありません。クリエイティブ・コモンズは、そのライセンスおよび関連情報を「現状のまま」で提供します。クリエイティブ・コモンズは、そのライセンス、ライセンス条件のもとでライセンスされた資料、または関連情報について、いかなる保証も行いません。クリエイティブ・コモンズは、これらの使用によって生じる損害に対して、最大限の範囲で責任を放棄します。 +======================================================================= -## クリエイティブ・コモンズ 公開ライセンスの使用 +クリエイティブ・コモンズ・コーポレーション(以下「クリエイティブ・コモンズ」)は法律事務所ではなく、法的サービスや法的助言を提供するものではありません。クリエイティブ・コモンズのパブリックライセンスの配布は、弁護士と依頼者の関係やその他の関係を生じさせるものではありません。クリエイティブ・コモンズは、そのライセンスおよび関連情報を「現状のまま」提供します。クリエイティブ・コモンズは、そのライセンス、ライセンス条件に基づいてライセンスされた素材、または関連情報に関していかなる保証も行いません。クリエイティブ・コモンズは、それらの使用に起因する損害について、可能な限り最大限の範囲で責任を否認します。 -クリエイティブ・コモンズの公開ライセンスは、著作権および以下の公開ライセンスに指定されたその他の権利に基づいて、クリエイターや他の権利保有者が著作権の対象となるオリジナル作品やその他の資料を共有するために使用できる標準的な条件を提供します。以下の考慮事項は情報提供のみを目的としたものであり、網羅的ではなく、私たちのライセンスの一部ではありません。 +クリエイティブ・コモンズのパブリックライセンスの使用 -### ライセンサーの考慮事項 -私たちの公開ライセンスは、著作権および特定のその他の権利によって制限される方法で資料を使用するために公衆に許可を与える権限を持つ者によって使用されることを意図しています。私たちのライセンスは取り消し不可能です。ライセンサーは、ライセンスを適用する前に選択したライセンスの条件を読み理解するべきです。ライセンサーは、期待通りに公衆が資料を再利用できるように、ライセンスを適用する前に必要なすべての権利を確保するべきです。ライセンサーは、ライセンスの対象外となる資料を明確にマークするべきです。これには、他のCCライセンスの資料や、著作権の例外や制限の下で使用される資料が含まれます。ライセンサーのためのさらなる考慮事項は、wiki.creativecommons.org/Considerations_for_licensors を参照してください。 +クリエイティブ・コモンズのパブリックライセンスは、著作権および以下のパブリックライセンスで指定された特定の権利の対象となる著作物やその他の素材を共有するために、創作者やその他の権利者が使用できる標準的な条件を提供します。以下の考慮事項は情報提供のみを目的としており、網羅的なものではなく、ライセンスの一部を構成するものではありません。 -### 公衆の考慮事項 -私たちの公開ライセンスのいずれかを使用することにより、ライセンサーはライセンスされた資料を指定された条件の下で使用するための許可を公衆に付与します。ライセンサーの許可が必要ない理由がある場合(たとえば、著作権の適用可能な例外や制限による場合)、その使用はライセンスによって規制されません。私たちのライセンスは、ライセンサーが付与する権限を持つ著作権および特定のその他の権利の下での許可のみを付与します。ライセンスされた資料の使用は、他の理由(他者がその資料に対して著作権またはその他の権利を持っているため)によって制限される場合があります。ライセンサーは、すべての変更をマークまたは説明するように求めるなど、特別なリクエストを行うことができます。私たちのライセンスによって要求されてはいませんが、合理的な範囲でこれらのリクエストを尊重することをお勧めします。公衆のためのさらなる考慮事項は、wiki.creativecommons.org/Considerations_for_licensees を参照してください。 + ライセンサー向けの考慮事項: 私たちのパブリックライセンスは、著作権および特定の権利によって制限される素材の使用を一般に許可する権限を持つ人々による使用を意図しています。私たちのライセンスは取り消し不可能です。ライセンサーは、ライセンスを適用する前に、その条件を読み、理解する必要があります。また、ライセンサーは、ライセンスを適用する前に、素材を期待通りに再利用できるように、必要なすべての権利を確保する必要があります。ライセンサーは、ライセンスの対象外の素材を明確に表示する必要があります。これには、他のCCライセンス素材や、著作権の例外や制限の下で使用される素材が含まれます。ライセンサー向けのさらなる考慮事項: + wiki.creativecommons.org/Considerations_for_licensors + + 公衆向けの考慮事項: 私たちのパブリックライセンスを使用することで、ライセンサーは指定された条件の下でライセンスされた素材を使用する許可を公衆に与えます。ライセンサーの許可が不要な場合(例えば、適用される著作権の例外や制限のため)、その使用はライセンスによって規制されません。私たちのライセンスは、ライセンサーが許可を与える権限を持つ著作権および特定の権利の下でのみ許可を与えます。ライセンスされた素材の使用は、他の理由で制限される場合があります。例えば、他者がその素材に著作権やその他の権利を持っている場合です。ライセンサーは、すべての変更を記録または説明するよう求める場合があります。これはライセンスで義務付けられているわけではありませんが、合理的な範囲でそのような要求を尊重することが推奨されます。公衆向けのさらなる考慮事項: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +クリエイティブ・コモンズ 表示-継承 4.0 国際 公衆ライセンス + +ライセンスされた権利(以下で定義)を行使することにより、あなたはこのクリエイティブ・コモンズ 表示-継承 4.0 国際 公衆ライセンス(以下「公衆ライセンス」)の条件に拘束されることに同意し、受諾します。この公衆ライセンスが契約として解釈される範囲において、あなたはこれらの条件を受け入れることを考慮してライセンスされた権利を付与され、ライセンサーはこれらの条件の下でライセンスされた素材を利用可能にすることによる利益を考慮して、あなたにその権利を付与します。 + +第1条 -- 定義 + + a. 改変された素材とは、ライセンサーが保有する著作権および類似の権利の下で許可が必要な方法で、ライセンスされた素材が翻訳、変更、編曲、変形、またはその他の方法で改変された素材を指します。この公衆ライセンスの目的上、ライセンスされた素材が音楽作品、演奏、または音声録音である場合、ライセンスされた素材が映像と同期している場合は常に改変された素材が生成されます。 + + b. 改変者のライセンスとは、この公衆ライセンスの条件に従って、改変された素材に対するあなたの著作権および類似の権利に適用されるライセンスを指します。 + + c. BY-SA互換ライセンスとは、クリエイティブ・コモンズがこの公衆ライセンスと本質的に同等であると承認したライセンスで、creativecommons.org/compatiblelicenses にリストされています。 + + d. 著作権および類似の権利とは、著作権および/または著作権に密接に関連する類似の権利を指し、これには、演奏、放送、音声録音、データベースの特有の権利(Sui Generis Database Rights)などが含まれますが、これらに限定されません。この公衆ライセンスの目的上、第2条(b)(1)-(2)で指定された権利は、著作権および類似の権利には含まれません。 + + e. 有効な技術的保護手段とは、1996年12月20日に採択されたWIPO著作権条約第11条の義務を履行する法律および/または類似の国際協定の下で、適切な権限がない場合に回避できない手段を指します。 + + f. 例外および制限とは、公正使用、公正取引、および/またはライセンスされた素材の使用に適用されるその他の例外または制限を指します。 + + g. ライセンス要素とは、クリエイティブ・コモンズの公衆ライセンスの名称に記載されているライセンス属性を指します。この公衆ライセンスのライセンス要素は、表示および継承です。 + + h. ライセンスされた素材とは、ライセンサーがこの公衆ライセンスを適用した芸術的または文学的作品、データベース、またはその他の素材を指します。 + + i. ライセンスされた権利とは、この公衆ライセンスの条件に従うことを条件として、ライセンスされた素材の使用に適用されるすべての著作権および類似の権利で、ライセンサーがライセンスする権限を持つものを指します。 + + j. ライセンサーとは、この公衆ライセンスの下で権利を付与する個人または団体を指します。 + + k. 共有とは、複製、公衆への表示、公衆への演奏、配布、普及、通信、または輸入など、ライセンスされた権利の下で許可が必要な方法またはプロセスによって素材を公衆に提供することを指します。また、素材を公衆が個別に選択した場所および時間にアクセスできるようにする方法も含まれます。 + + l. データベースの特有の権利(Sui Generis Database Rights)とは、1996年3月11日の欧州議会および理事会のデータベースの法的保護に関する指令96/9/ECの改正および/または後継として生じた権利、ならびに世界中の本質的に同等の権利を指します。 + + m. あなたとは、この公衆ライセンスの下でライセンスされた権利を行使する個人または団体を指します。あなたのは、対応する意味を持ちます。 + + +権利、そしてあなたが Sui Generis Database Rights を有するデータベース(ただしその個々の内容物は含まない)は、適応された素材に該当します。 + +これはセクション 3(b) の目的にも含まれます。そして +c. あなたがデータベースの内容全体またはその大部分を共有する場合、セクション 3(a) の条件を遵守しなければなりません。 + +疑義を避けるために、このセクション 4 は、ライセンスされた権利が他の著作権および類似の権利を含む場合における、このパブリックライセンスに基づくあなたの義務を補足するものであり、置き換えるものではありません。 --- -## セクション 1 -- 定義 +### セクション 5 -- 保証の否認および責任の制限 - a. **適応資料** とは、著作権および類似の権利の対象となる資料で、ライセンスされた資料に基づいているか、または派生したもので、ライセンスされた資料が翻訳、変更、編成、変形、またはその他の方法で修正されていることを意味します。著作権および類似の権利を持つライセンサーによる許可が必要です。この公開ライセンスの目的上、ライセンスされた資料が音楽作品、パフォーマンス、または音声録音である場合、適応資料は常にライセンスされた資料が動画像と同期している場合に生成されます。 +a. ライセンサーが別途明示的に行わない限り、可能な範囲で、ライセンサーはライセンスされた素材を「現状のまま」および「利用可能な状態で」提供し、ライセンスされた素材に関して、明示的、黙示的、法定、またはその他のいかなる種類の表明または保証も行いません。これには、所有権、商品性、特定の目的への適合性、非侵害、潜在的またはその他の欠陥の不存在、正確性、またはエラーの有無(既知または発見可能かどうかを問わない)に関する保証が含まれますが、これに限定されません。保証の否認が全面的または部分的に認められない場合、この否認はあなたに適用されない場合があります。 - b. **アダプターライセンス** とは、あなたが適応資料に対する著作権および類似の権利に適用するライセンスを意味します。 +b. 可能な範囲で、ライセンサーは、いかなる法的理論(過失を含むがこれに限定されない)またはその他の理由に基づいても、このパブリックライセンスまたはライセンスされた素材の使用に起因する直接的、特別、間接的、付随的、結果的、懲罰的、模範的、またはその他の損失、費用、経費、または損害について、たとえライセンサーがその可能性を知らされていたとしても、一切の責任を負いません。責任の制限が全面的または部分的に認められない場合、この制限はあなたに適用されない場合があります。 - c. **BY-SA互換ライセンス** とは、creativecommons.org/compatiblelicenses にリストされ、クリエイティブ・コモンズによってこの公開ライセンスと本質的に同等であると承認されたライセンスを意味します。 +c. 上記の保証の否認および責任の制限は、可能な範囲で、すべての責任を完全に否認し、放棄するものとして解釈されます。 - d. **著作権および類似の権利** とは、著作権および著作権に密接に関連する権利(パフォーマンス、放送、音声録音、Sui Generisデータベース権を含むがこれに限定されない)を意味します。これらの権利がどのようにラベル付けまたは分類されているかにかかわらず、著作権および類似の権利に該当しない権利については、公開ライセンスの目的のために、セクション2(b)(1)-(2)で指定された権利は著作権および類似の権利ではありません。 +--- - e. **効果的技術的手段** とは、適切な権限がない場合に、1996年12月20日に採択されたWIPO著作権条約第11条の義務を履行する法律の下で回避できない手段を意味します。 +### セクション 6 -- 期間および終了 - f. **例外および制限** とは、フェアユース、フェアディーリング、およびあなたのライセンスされた資料の使用に適用される著作権および類似の権利に対する他の例外または制限を意味します。 +a. このパブリックライセンスは、ここでライセンスされた著作権および類似の権利の期間中適用されます。ただし、あなたがこのパブリックライセンスに違反した場合、このパブリックライセンスに基づくあなたの権利は自動的に終了します。 - g. **ライセンス要素** とは、クリエイティブ・コモンズ公開ライセンスの名前に記載されたライセンス属性を意味します。この公開ライセンスのライセンス要素は、表示および継承です。 +b. セクション 6(a) に基づきライセンスされた素材の使用権が終了した場合、以下の条件で再開されます: - h. **ライセンスされた資料** とは、ライセンサーがこの公開ライセンスを適用した芸術的または文学的な作品、データベース、またはその他の資料を意味します。 +1. 違反が発見されてから30日以内に是正されることを条件に、違反が是正された日付に自動的に再開される。 +2. ライセンサーによる明示的な再開の承認がある場合。 - i. **ライセンスされた権利** とは、この公開ライセンスの条件に従ってあなたに付与される権利を意味し、ライセンスされた資料の使用に適用されるすべての著作権および類似の権利に制限され、ライセンサーがライセンスを付与する権限を持つ権利です。 +疑義を避けるために、このセクション 6(b) は、あなたのこのパブリックライセンス違反に対してライセンサーが救済を求める権利に影響を与えません。 - j. **ライセンサー** とは、この公開ライセンスの下で権利を付与する個人または団体を意味します。 +c. 疑義を避けるために、ライセンサーは別の条件または規約の下でライセンスされた素材を提供したり、ライセンスされた素材の配布を停止したりすることができます。ただし、これによってこのパブリックライセンスが終了することはありません。 - k. **共有** とは、ライセンスされた権利の下で許可を必要とする手段またはプロセスによって公衆に資料を提供することを意味し、複製、公的展示、公的パフォーマンス、配布、普及、通信、または輸入を含みます。また、個々の選択によって公衆が資料にアクセスできる方法で資料を公衆に提供することを含みます。 +d. セクション 1、5、6、7、および 8 は、このパブリックライセンスの終了後も存続します。 - l. **Sui Generisデータベース権** とは、1996年3月11日の欧州議会および理事会の指令96/9/ECに基づく著作権以外の権利を意味し、データベースの法的保護に関するもので、改正または後継のもの、または世界の他の場所で本質的に同等の権利を意味します。 +--- - m. **あなた** とは、この公開ライセンスの下でライセンスされた権利を行使する個人または団体を意味します。「あなた」は、対応する意味を持ちます。 +### セクション 7 -- その他の条件および規約 -## セクション 2 -- 範囲 +a. ライセンサーは、あなたが伝達した追加または異なる条件や規約に、明示的に同意しない限り拘束されません。 - a. **ライセンス付与** +b. ここに記載されていないライセンスされた素材に関する取り決め、理解、または合意は、このパブリックライセンスの条件および規約とは別個であり、独立しています。 - 1. この公開ライセンスの条件に従い、ライセンサーは、あなたに対して、ライセンスされた資料におけるライセンスされた権利を行使するための、全世界的、ロイヤリティフリー、サブライセンス不可、非独占的、取り消し不可能なライセンスを付与します。これにより、以下のことが可能になります: +--- - a. ライセンスされた資料を、全部または一部を複製し、共有すること;および +### セクション 8 -- 解釈 - b. 適応資料を制作、複製し、共有すること。 +a. 疑義を避けるために、このパブリックライセンスは、ライセンスされた素材をこのパブリックライセンスの許可なしに合法的に使用できる範囲を減少、制限、制約、または条件付けるものではなく、そのように解釈されることもありません。 - 2. **例外および制限**:疑義を避けるために、例外および制限があなたの使用に適用される場合、この公開ライセンスは適用されず、その条件に従う必要はありません。 +b. 可能な範囲で、このパブリックライセンスのいかなる条項も執行不能と見なされた場合、それは執行可能にするために必要最小限の範囲で自動的に修正されます。条項が修正できない場合、それはこのパブリックライセンスから切り離され、残りの条件および規約の執行可能性には影響を与えません。 - 3. **期間**:この公開ライセンスの期間は、セクション6(a)に指定されています。 +c. このパブリックライセンスのいかなる条項または条件も、ライセンサーが明示的に同意しない限り放棄されず、遵守が承諾されることもありません。 - 4. **メディアおよびフォーマット;技術的変更の許可**:ライセンサーは、あなたが現在知られているか、今後作成されるすべてのメディアおよびフォーマットでライセンスされた権利を行使することを許可し、それを行うために必要な技術的変更を行うことを許可します。ライセンサーは、ライセンスされた権利を行使するために必要な技術的変更を行うことを禁じる権利や権限を放棄または主張しないことに同意します。この公開ライセンスの目的上、セクション2(a)(4)によって許可された変更を行うことは、適応資料を生成することはありません。 +d. このパブリックライセンスのいかなる内容も、ライセンサーまたはあなたに適用される特権および免責(いかなる管轄または権限の法的手続きからのものを含む)を制限または放棄するものとして解釈されることはありません。 - 5. **下流の受取人** +--- - a. ライセンサーからのオファー -- ライセンスされた資料:ライセンスされた資料のすべての受取人は、自動的にこの公開ライセンスの条件の下でライセンスされた権利を行使するためのライセンサーからのオファーを受け取ります。 +Creative Commons はそのパブリックライセンスの当事者ではありません。ただし、Creative Commons が公開する素材に対してそのパブリックライセンスのいずれかを適用することを選択した場合、その場合に限り「ライセンサー」と見なされます。Creative Commons のパブリックライセンスの文書は、CC0 Public Domain Dedication の下でパブリックドメインに捧げられています。Creative Commons のポリシー(creativecommons.org/policies)で許可されている場合を除き、Creative Commons の商標「Creative Commons」またはその他の商標やロゴを、Creative Commons の事前の書面による同意なしに使用することはできません。これには、パブリックライセンスの無許可の改変や、ライセンスされた素材の使用に関するその他の取り決め、理解、または合意に関連する場合が含まれますが、これに限定されません。疑義を避けるために、この段落はパブリックライセンスの一部ではありません。 - b. ライセンサーからの追加のオファー -- 適応資料:あなたからの適応資料のすべての受取人は、自動的にあなたが適用するアダプターライセンスの条件の下で適応資料におけるライセンスされた権利を行使するためのライセンサーからのオファーを受け取ります。 - - c. 下流の制限なし:あなたは、ライセンスされた資料の受取人がライセンスされた権利を行使することを制限する場合、ライセンスされた資料に対して追加または異なる条件を提供したり、課したり、または効果的技術的手段を適用したりしてはいけません。 - - 6. **推奨なし**:この公開ライセンスのいかなる内容も、あなたがライセンスされた資料を使用していることが、ライセンサーまたはクレジットを受け取ることに指定された他者と関連している、またはそれらによって後援、支持、または公式の地位を与えられているということを主張または暗示する許可を構成したり解釈されたりすることはありません。 - - b. **その他の権利** - - 1. 完全性の権利などの道徳的権利は、この公開ライセンスの下でライセンスされていません。また、パブリシティ、プライバシー、およびその他の類似の人格権もライセンスされていません。ただし、可能な限り、ライセンサーは、ライセンスされた権利を行使するために必要な限られた範囲で、ライセンサーが保持するそのような権利を放棄または主張しないことに同意しますが、その他の目的ではありません。 - - 2. 特許権および商標権は、この公開ライセンスの下でライセンスされていません。 - - 3. 可能な限り、ライセンサーは、ライセンスされた権利を行使するためにあなたからロイヤリティを徴収する権利を放棄します。これは、直接的または任意の法定または強制的なライセンス制度を通じての徴収を含みます。他のすべての場合、ライセンサーはそのようなロイヤリティを徴収する権利を明示的に留保します。 - -## セクション 3 -- ライセンス条件 - -あなたのライセンスされた権利の行使は、以下の条件に明示的に従うものとします。 - - a. **表示** - - 1. あなたがライセンスされた資料を共有する場合(変更された形態を含む)、あなたは以下を行う必要があります: - - a. ライセンサーがライセンスされた資料に提供した場合は、以下を保持すること: - - i. ライセンスされた資料のクリエイターおよびクレジットを受け取ることに指定された他の者の特定を、ライセンサーが要求する合理的な方法で行うこと(指定された場合はペンネームを含む); - - ii. 著作権表示; - - iii. この公開ライセンスを参照する通知; - - iv. 保証の免責事項を参照する通知; - - v. ライセンスされた資料へのURIまたはハイパーリンクを、合理的に実現可能な範囲で提供すること; - - b. ライセンスされた資料を変更した場合は、その旨を示し、以前の変更の指示を保持すること;および - - c. ライセンスされた資料がこの公開ライセンスの下でライセンスされていることを示し、この公開ライセンスのテキストまたはURIまたはハイパーリンクを含めること。 - - 2. あなたは、ライセンスされた資料を共有する際のメディア、手段、および文脈に基づいて、セクション3(a)(1)の条件を合理的な方法で満たすことができます。たとえば、必要な情報を含むリソースへのURIまたはハイパーリンクを提供することで条件を満たすことが合理的である場合があります。 - - 3. ライセンサーから要求された場合、あなたは、合理的に実現可能な範囲で、セクション3(a)(1)(A)で要求される情報を削除する必要があります。 - - b. **継承** - - セクション3(a)の条件に加えて、あなたが制作した適応資料を共有する場合、以下の条件も適用されます。 - - 1. あなたが適用するアダプターライセンスは、同じライセンス要素を持つクリエイティブ・コモンズライセンスである必要があります。このバージョンまたはそれ以降のバージョン、またはBY-SA互換ライセンスである必要があります。 - - 2. あなたが適用するアダプターライセンスのテキストまたはURIまたはハイパーリンクを含める必要があります。この条件は、あなたが適応資料を共有する際のメディア、手段、および文脈に基づいて合理的な方法で満たすことができます。 - - 3. あなたは、あなたが適用するアダプターライセンスの下で付与された権利の行使を制限するような、適応資料に対して追加または異なる条件を提供したり、課したり、または効果的技術的手段を適用したりしてはいけません。 - -## セクション 4 -- Sui Generisデータベース権 - -ライセンスされた権利にあなたのライセンスされた資料の使用に適用されるSui Generisデータベース権が含まれる場合: - - a. 疑義を避けるために、セクション2(a)(1)は、データベースのすべてまたは実質的な部分の内容を抽出、再利用、複製、および共有する権利をあなたに付与します; - - b. あなたがSui Generisデータベース権を持つデータベースにデータベースのすべてまたは実質的な部分の +Creative Commons への連絡は creativecommons.org で可能です。 **免責事項**: -この文書は、機械翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。原文の母国語の文書を権威ある情報源として考慮するべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があることをご承知おきください。原文(元の言語で記載された文書)が信頼できる情報源として優先されるべきです。重要な情報については、専門の人間による翻訳をお勧めします。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いかねます。 \ No newline at end of file diff --git a/translations/ja/lessons/sketchnotes/README.md b/translations/ja/lessons/sketchnotes/README.md index 28988a04..400152e7 100644 --- a/translations/ja/lessons/sketchnotes/README.md +++ b/translations/ja/lessons/sketchnotes/README.md @@ -1,8 +1,17 @@ + すべてのカリキュラムのスケッチノートはここからダウンロードできます。 -🎨 作成者: 今浦友美 (Twitter: [@girlie_mac](https://twitter.com/girlie_mac), GitHub: [girliemac](https://github.com/girliemac)) +🎨 作成者: Tomomi Imura (Twitter: [@girlie_mac](https://twitter.com/girlie_mac), GitHub: [girliemac](https://github.com/girliemac)) [![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) **免責事項**: -この文書は、機械翻訳AIサービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文の母国語の文書を権威ある情報源と見なすべきです。重要な情報については、専門の人間翻訳を推奨します。この翻訳の使用から生じる誤解や誤訳について、当社は一切の責任を負いません。 \ No newline at end of file +この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。 \ No newline at end of file diff --git a/translations/ko/README.md b/translations/ko/README.md index 83ac2bf2..e10d8056 100644 --- a/translations/ko/README.md +++ b/translations/ko/README.md @@ -1,79 +1,88 @@ -[![GitHub 라이센스](https://img.shields.io/github/license/microsoft/AI-For-Beginners.svg)](https://github.com/microsoft/AI-For-Beginners/blob/main/LICENSE) -[![GitHub 기여자](https://img.shields.io/github/contributors/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/) -[![GitHub 이슈](https://img.shields.io/github/issues/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/issues/) -[![GitHub 풀 리퀘스트](https://img.shields.io/github/issues-pr/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/pulls/) -[![PR 환영](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub license](https://img.shields.io/github/license/microsoft/AI-For-Beginners.svg)](https://github.com/microsoft/AI-For-Beginners/blob/main/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) -[![GitHub 시청자](https://img.shields.io/github/watchers/microsoft/AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/AI-For-Beginners/watchers/) -[![GitHub 포크](https://img.shields.io/github/forks/microsoft/AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/AI-For-Beginners/network/) -[![GitHub 스타](https://img.shields.io/github/stars/microsoft/AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/) -[![바인더](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD) -[![기터](https://badges.gitter.im/Microsoft/ai-for-beginners.svg)](https://gitter.im/Microsoft/ai-for-beginners?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/AI-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/AI-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD) +[![Gitter](https://badges.gitter.im/Microsoft/ai-for-beginners.svg)](https://gitter.im/Microsoft/ai-for-beginners?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) +[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) -# 초보자를 위한 인공지능 - 커리큘럼 +# 초보자를 위한 인공지능 - 커리큘럼 -|![ 스케치노트 [(@girlie_mac)](https://twitter.com/girlie_mac) ](./lessons/sketchnotes/ai-overview.png)| -|:---:| -| 초보자를 위한 AI - _스케치노트 [@girlie_mac](https://twitter.com/girlie_mac)_ | +|![ Sketchnote by [(@girlie_mac)](https://twitter.com/girlie_mac) ](./lessons/sketchnotes/ai-overview.png)| +|:---:| +| 초보자를 위한 인공지능 - _스케치노트 by [@girlie_mac](https://twitter.com/girlie_mac)_ | -12주, 24강의로 구성된 **인공지능** (AI) 커리큘럼을 통해 AI의 세계를 탐험해보세요! 실용적인 수업, 퀴즈, 실습이 포함되어 있습니다. 이 커리큘럼은 초보자 친화적이며 TensorFlow와 PyTorch와 같은 도구 및 AI 윤리를 다룹니다. +**인공지능**(AI)의 세계를 탐험해보세요! 12주 동안 진행되는 24개의 강의로 구성된 커리큘럼입니다. 실습 강의, 퀴즈, 실험이 포함되어 있으며 초보자도 쉽게 따라올 수 있습니다. TensorFlow와 PyTorch 같은 도구뿐만 아니라 AI 윤리도 다룹니다. -## 배울 내용 +## 학습 내용 -**[강좌의 마인드맵](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)** +**[코스 마인드맵](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)** -이 커리큘럼에서는 다음을 배웁니다: +이 커리큘럼에서 배우게 될 내용: -* **지식 표현**과 추론을 포함한 "좋은 옛날" 상징적 접근법을 포함한 인공지능의 다양한 접근법 ([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence)). -* 현대 AI의 핵심인 **신경망**과 **딥러닝**. 우리는 [TensorFlow](http://Tensorflow.org)와 [PyTorch](http://pytorch.org)라는 두 가지 인기 있는 프레임워크에서 코드를 사용하여 이러한 중요한 주제의 개념을 설명할 것입니다. -* 이미지와 텍스트 작업을 위한 **신경 아키텍처**. 최신 모델을 다루겠지만 최첨단에 대한 정보는 다소 부족할 수 있습니다. -* **유전 알고리즘** 및 **다중 에이전트 시스템**과 같은 덜 인기 있는 AI 접근법. +* **지식 표현**과 추론을 포함한 "고전적인" 상징적 접근 방식([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence)). +* 현대 AI의 핵심인 **신경망**과 **딥러닝**. 이 중요한 주제의 개념을 [TensorFlow](http://Tensorflow.org)와 [PyTorch](http://pytorch.org)라는 두 가지 인기 있는 프레임워크를 사용하여 코드로 설명합니다. +* 이미지와 텍스트를 다루기 위한 **신경 아키텍처**. 최신 모델을 다루지만 최첨단 기술은 다소 부족할 수 있습니다. +* **유전 알고리즘**과 **다중 에이전트 시스템**과 같은 덜 알려진 AI 접근 방식. -이 커리큘럼에서 다루지 않을 내용: +이 커리큘럼에서 다루지 않는 내용: -> [이 강좌의 추가 자료는 Microsoft Learn 컬렉션에서 확인하세요.](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) +> [이 과정의 추가 자료는 Microsoft Learn 컬렉션에서 확인하세요](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) -* **비즈니스에서 AI 사용 사례**. Microsoft Learn의 [비즈니스 사용자를 위한 AI 소개](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) 학습 경로를 고려해보세요, 또는 [AI 비즈니스 스쿨](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum), [INSEAD](https://www.insead.edu/)와 협력하여 개발되었습니다. -* **고전 기계 학습**, 이는 우리의 [초보자를 위한 기계 학습 커리큘럼](http://github.com/Microsoft/ML-for-Beginners)에서 잘 설명되어 있습니다. -* **[인지 서비스](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)**를 사용하여 구축된 실제 AI 응용 프로그램. 이를 위해 Microsoft Learn의 [비전](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum), [자연어 처리](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum), **[Azure OpenAI 서비스와 함께하는 생성적 AI](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** 및 기타를 시작하는 것을 추천합니다. -* 특정 ML **클라우드 프레임워크**로는 [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum), [Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum), 또는 [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum)가 있습니다. [Azure Machine Learning로 머신 러닝 솔루션 구축 및 운영](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) 및 [Azure Databricks로 머신 러닝 솔루션 구축 및 운영](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) 학습 경로를 고려해 보세요. -* **대화형 AI**와 **챗봇**. 별도의 [대화형 AI 솔루션 만들기](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) 학습 경로가 있으며, 더 많은 세부정보는 [이 블로그 게시물](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/)을 참조할 수 있습니다. -* **딥 러닝**의 기초가 되는 **심화 수학**. 이를 위해 Ian Goodfellow, Yoshua Bengio, Aaron Courville의 [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618)을 추천하며, 이 책은 [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/)에서 온라인으로도 제공됩니다. +* **비즈니스에서 AI 활용** 사례. Microsoft Learn에서 [비즈니스 사용자를 위한 AI 소개](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) 학습 경로를 수강하거나 [INSEAD](https://www.insead.edu/)와 협력하여 개발된 [AI 비즈니스 스쿨](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum)을 참고하세요. +* **고전적인 머신러닝**, 이는 [초보자를 위한 머신러닝 커리큘럼](http://github.com/Microsoft/ML-for-Beginners)에 잘 설명되어 있습니다. +* **[Cognitive Services](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)**를 사용하여 구축된 실용적인 AI 애플리케이션. 이를 위해 Microsoft Learn의 [비전](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum), [자연어 처리](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum), **[Azure OpenAI Service를 활용한 생성 AI](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** 등의 모듈을 시작하는 것을 추천합니다. +* 특정 ML **클라우드 프레임워크**, 예를 들어 [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum), [Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum), 또는 [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum). [Azure Machine Learning을 사용하여 머신러닝 솔루션 구축 및 운영](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) 및 [Azure Databricks를 사용하여 머신러닝 솔루션 구축 및 운영](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) 학습 경로를 고려하세요. +* **대화형 AI** 및 **챗봇**. 별도의 [대화형 AI 솔루션 만들기](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) 학습 경로가 있으며, [이 블로그 게시물](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/)을 참조할 수 있습니다. +* 딥러닝의 **심화 수학적 내용**. 이를 위해 Ian Goodfellow, Yoshua Bengio, Aaron Courville의 [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618)을 추천하며, 온라인에서도 확인할 수 있습니다: [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/). -클라우드에서의 _AI_ 주제에 대한 부드러운 소개를 원하신다면 [Azure에서 인공지능 시작하기](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) 학습 경로를 고려해 보세요. +클라우드에서 _AI_를 부드럽게 소개받고 싶다면 [Azure에서 인공지능 시작하기](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) 학습 경로를 고려하세요. -# 콘텐츠 +# 콘텐츠 -| | 수업 링크 | PyTorch/Keras/TensorFlow | 실습 | -| :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ | -| 0 | [강의 설정](./lessons/0-course-setup/setup.md) | [개발 환경 설정](./lessons/0-course-setup/how-to-run.md) | | -| I | [**AI 소개**](./lessons/1-Intro/README.md) | | | -| 01 | [AI의 소개와 역사](./lessons/1-Intro/README.md) | - | - | -| II | **기호 AI** | -| 02 | [지식 표현 및 전문가 시스템](./lessons/2-Symbolic/README.md) | [전문가 시스템](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) / [온톨로지](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) /[개념 그래프](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) | | -| III | [**신경망 소개**](./lessons/3-NeuralNetworks/README.md) ||| -| 03 | [퍼셉트론](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [노트북](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [실습](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) | -| 04 | [다층 퍼셉트론 및 나만의 프레임워크 만들기](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [노트북](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [실습](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) | -| 05 | [프레임워크 소개 (PyTorch/TensorFlow) 및 과적합](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [실습](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) | -| IV | [**컴퓨터 비전**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [Microsoft Azure에서 컴퓨터 비전 탐색하기](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) | -| 06 | [컴퓨터 비전 소개. OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [노트북](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [실습](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) | -| 07 | [합성곱 신경망](./lessons/4-ComputerVision/07-ConvNets/README.md) 및 [CNN 아키텍처](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [실습](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) | -| 08 | [사전 훈련된 네트워크 및 전이 학습](./lessons/4-ComputerVision/08-TransferLearning/README.md) 및 [훈련 팁](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [실습](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) | -| 09 | [오토인코더 및 VAE](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | | -| 10 | [생성적 적대 신경망 및 예술적 스타일 전이](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | | +| | 강의 링크 | PyTorch/Keras/TensorFlow | 실습 | +| :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ | +| 0 | [코스 설정](./lessons/0-course-setup/setup.md) | [개발 환경 설정](./lessons/0-course-setup/how-to-run.md) | | +| I | [**AI 소개**](./lessons/1-Intro/README.md) | | | +| 01 | [AI 소개 및 역사](./lessons/1-Intro/README.md) | - | - | +| II | **상징적 AI** | +| 02 | [지식 표현 및 전문가 시스템](./lessons/2-Symbolic/README.md) | [전문가 시스템](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) / [온톨로지](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) /[개념 그래프](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) | | +| III | [**신경망 소개**](./lessons/3-NeuralNetworks/README.md) ||| +| 03 | [퍼셉트론](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [노트북](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [실습](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) | +| 04 | [다층 퍼셉트론 및 자체 프레임워크 생성](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [노트북](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [실습](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) | +| 05 | [프레임워크 소개 (PyTorch/TensorFlow) 및 과적합](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [실습](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) | +| IV | [**컴퓨터 비전**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [Microsoft Azure에서 컴퓨터 비전 탐색](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) | +| 06 | [컴퓨터 비전 소개. OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [노트북](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [실습](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) | +| 07 | [합성곱 신경망](./lessons/4-ComputerVision/07-ConvNets/README.md) & [CNN 아키텍처](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [실습](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) | +| 08 | [사전 학습된 네트워크와 전이 학습](./lessons/4-ComputerVision/08-TransferLearning/README.md) 및 [학습 팁](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [실습](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) | +| 09 | [오토인코더와 VAEs](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | | +| 10 | [생성적 적대 신경망(GANs) 및 예술적 스타일 전이](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | | | 11 | [객체 탐지](./lessons/4-ComputerVision/11-ObjectDetection/README.md) | [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) | [실습](./lessons/4-ComputerVision/11-ObjectDetection/lab/README.md) | -| 12 | [의미론적 분할. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) | | -| V | [**자연어 처리**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [Microsoft Azure에서 자연어 처리 탐색하기](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)| +| 12 | [의미론적 분할. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](../../(https:/github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb)) | | +| V | [**자연어 처리**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [Microsoft Azure에서 자연어 처리 탐색](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)| | 13 | [텍스트 표현. Bow/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | | -| 14 | [의미적 단어 임베딩. Word2Vec와 GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | | -| 15 | [언어 모델링. 자신만의 임베딩 학습하기](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [실습](./lessons/5-NLP/15-LanguageModeling/lab/README.md) | -| 16 | [순환 신경망](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | | +| 14 | [의미론적 단어 임베딩. Word2Vec 및 GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | | +| 15 | [언어 모델링. 임베딩 직접 학습하기](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [실습](./lessons/5-NLP/15-LanguageModeling/lab/README.md) | +| 16 | [순환 신경망(RNN)](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | | | 17 | [생성적 순환 신경망](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.md) / [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.md) | [실습](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) | | 18 | [트랜스포머. BERT.](./lessons/5-NLP/18-Transformers/READMEtransformers.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | | -| 19 | [명명된 개체 인식](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [실습](./lessons/5-NLP/19-NER/lab/README.md) | -| 20 | [대형 언어 모델, 프롬프트 프로그래밍 및 몇 가지 샷 작업](./lessons/5-NLP/20-LangModels/READMELargeLang.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | | +| 19 | [개체명 인식(NER)](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [실습](./lessons/5-NLP/19-NER/lab/README.md) | +| 20 | [대규모 언어 모델, 프롬프트 프로그래밍 및 Few-Shot 작업](./lessons/5-NLP/20-LangModels/READMELargeLang.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | | | VI | **기타 AI 기술** || | | 21 | [유전 알고리즘](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [노트북](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | | | 22 | [심층 강화 학습](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [실습](./lessons/6-Other/22-DeepRL/lab/README.md) | @@ -81,60 +90,66 @@ | VII | **AI 윤리** | | | | 24 | [AI 윤리 및 책임 있는 AI](./lessons/7-Ethics/README.md) | [Microsoft Learn: 책임 있는 AI 원칙](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | | | IX | **추가 자료** | | | -| 25 | [다중 모달 네트워크, CLIP 및 VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [노트북](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) | | +| 25 | [멀티모달 네트워크, CLIP 및 VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [노트북](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) | | -## 각 수업에는 다음이 포함됩니다 +## 각 강의는 다음을 포함합니다 * 사전 학습 자료 -* 실행 가능한 Jupyter 노트북, 보통 프레임워크에 따라 다릅니다 (**PyTorch** 또는 **TensorFlow**). 실행 가능한 노트북은 많은 이론적 자료도 포함되어 있으므로 주제를 이해하려면 노트북의 최소 한 버전( PyTorch 또는 TensorFlow)을 통해 학습해야 합니다. -* 특정 주제에 대해 학습한 내용을 실제 문제에 적용해 볼 수 있는 **실습**이 제공됩니다. -* 일부 섹션에는 관련 주제를 다루는 [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) 모듈에 대한 링크가 포함되어 있습니다. +* 실행 가능한 Jupyter 노트북, 주로 프레임워크(**PyTorch** 또는 **TensorFlow**)에 따라 제공됩니다. 실행 가능한 노트북에는 많은 이론적 내용이 포함되어 있으므로 주제를 이해하려면 노트북 버전 중 하나(예: PyTorch 또는 TensorFlow)를 반드시 학습해야 합니다. +* **실습**은 일부 주제에서 제공되며, 학습한 내용을 특정 문제에 적용해볼 기회를 제공합니다. +* 일부 섹션에는 관련 주제를 다루는 [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) 모듈 링크가 포함되어 있습니다. ## 시작하기 -- 개발 환경 설정을 도와주기 위해 [설정 수업](./lessons/0-course-setup/setup.md)을 만들었습니다. - 교육자를 위해 [커리큘럼 설정 수업](./lessons/0-course-setup/for-teachers.md)도 준비했습니다! -- [VSCode 또는 Codepace에서 코드 실행하기](./lessons/0-course-setup/how-to-run.md) +- 개발 환경 설정을 돕기 위해 [설정 강의](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/setup.md)를 준비했습니다. - 교육자를 위해 [교사용 커리큘럼 설정 강의](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/for-teachers.md)도 준비했습니다! +- [VSCode 또는 Codepace에서 코드 실행 방법](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/how-to-run.md) -다음 단계를 따르세요: +다음 단계를 따라 진행하세요: -저장소 포크하기: 이 페이지의 오른쪽 상단에 있는 "Fork" 버튼을 클릭하세요. +저장소 포크: 페이지 오른쪽 상단의 "Fork" 버튼을 클릭하세요. -저장소 클론하기: `git clone https://github.com/microsoft/AI-For-Beginners.git` +저장소 클론: `git clone https://github.com/microsoft/AI-For-Beginners.git` -나중에 쉽게 찾을 수 있도록 이 저장소에 별표(🌟)를 다는 것을 잊지 마세요. +이 저장소를 나중에 쉽게 찾을 수 있도록 별표(🌟)를 잊지 마세요. ## 다른 학습자 만나기 -우리의 [공식 AI Discord 서버](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum)에 참여하여 이 과정을 수강하는 다른 학습자들과 만나고 네트워크를 형성하며 지원을 받으세요. +[공식 AI Discord 서버](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum)에 가입하여 이 과정을 수강하는 다른 학습자들과 네트워크를 형성하고 지원을 받으세요. -## 퀴즈 - -> **퀴즈에 대한 주의사항**: 모든 퀴즈는 etc\quiz-app의 Quiz-app 폴더에 포함되어 있습니다. 이들은 수업 내에서 링크되어 있으며 퀴즈 앱은 로컬에서 실행하거나 Azure에 배포할 수 있습니다. `quiz-app` 폴더의 지침을 따르세요. 점진적으로 현지화되고 있습니다. +제품 피드백이나 질문이 있을 경우 [Azure AI Foundry 개발자 포럼](https://aka.ms/foundry/forum)을 방문하세요. +## 퀴즈 +> **퀴즈에 대한 참고 사항**: 모든 퀴즈는 etc\quiz-app의 Quiz-app 폴더에 포함되어 있습니다. 퀴즈는 각 레슨 내에서 연결되어 있으며, 퀴즈 앱은 로컬에서 실행하거나 Azure에 배포할 수 있습니다. `quiz-app` 폴더의 지침을 따르세요. 퀴즈는 점진적으로 현지화되고 있습니다. ## 도움 요청 -제안 사항이 있거나 오타 또는 코드 오류를 발견하셨나요? 이슈를 제기하거나 풀 리퀘스트를 생성하세요. +제안 사항이 있거나 철자 또는 코드 오류를 발견하셨나요? 이슈를 제기하거나 풀 리퀘스트를 생성해 주세요. ## 특별 감사 -* **✍️ 주 저자:** [Dmitry Soshnikov](http://soshnikov.com), PhD -* **🔥 편집자:** [Jen Looper](https://twitter.com/jenlooper), PhD -* **🎨 스케치 노트 일러스트레이터:** [Tomomi Imura](https://twitter.com/girlie_mac) -* **✅ 퀴즈 제작자:** [Lateefah Bello](https://github.com/CinnamonXI), [MLSA](https://studentambassadors.microsoft.com/) -* **🙏 핵심 기여자:** [Evgenii Pishchik](https://github.com/Pe4enIks) +* **✍️ 주요 저자:** [Dmitry Soshnikov](http://soshnikov.com), PhD +* **🔥 편집자:** [Jen Looper](https://twitter.com/jenlooper), PhD +* **🎨 스케치노트 일러스트레이터:** [Tomomi Imura](https://twitter.com/girlie_mac) +* **✅ 퀴즈 제작자:** [Lateefah Bello](https://github.com/CinnamonXI), [MLSA](https://studentambassadors.microsoft.com/) +* **🙏 핵심 기여자:** [Evgenii Pishchik](https://github.com/Pe4enIks) ## 기타 커리큘럼 -우리 팀은 다른 커리큘럼도 제작합니다! 확인해보세요: +우리 팀은 다른 커리큘럼도 제작합니다! 확인해 보세요: -* [초보자를 위한 데이터 과학](https://aka.ms/ds4beginners) -* [**버전 2.0** 초보자를 위한 생성 AI](https://aka.ms/genai-beginners) -* [**NEW** 초보자를 위한 사이버 보안](https://github.com/microsoft/Security-101??WT.mc_id=academic-96948-sayoung) -* [초보자를 위한 웹 개발](https://aka.ms/webdev-beginners) -* [초보자를 위한 IoT](https://aka.ms/iot-beginners) -* [초보자를 위한 머신러닝](https://aka.ms/ml4beginners) -* [초보자를 위한 XR 개발](https://aka.ms/xr-dev-for-beginners) -* [AI 페어 프로그래밍을 위한 GitHub Copilot 마스터하기](https://aka.ms/GitHubCopilotAI) +- [초보자를 위한 생성형 AI](https://aka.ms/genai-beginners) +- [초보자를 위한 생성형 AI .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [JavaScript로 생성형 AI](https://github.com/microsoft/generative-ai-with-javascript) +- [Java로 생성형 AI](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [초보자를 위한 AI](https://aka.ms/ai-beginners) +- [초보자를 위한 데이터 과학](https://aka.ms/datascience-beginners) +- [초보자를 위한 머신러닝](https://aka.ms/ml-beginners) +- [초보자를 위한 사이버 보안](https://github.com/microsoft/Security-101) +- [초보자를 위한 웹 개발](https://aka.ms/webdev-beginners) +- [초보자를 위한 IoT](https://aka.ms/iot-beginners) +- [초보자를 위한 XR 개발](https://github.com/microsoft/xr-development-for-beginners) +- [에이전트 활용을 위한 GitHub Copilot 마스터하기](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [C#/.NET 개발자를 위한 GitHub Copilot 마스터하기](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [나만의 Copilot 모험 선택하기](https://github.com/microsoft/CopilotAdventures) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못 해석에 대해서는 저희가 책임지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/SECURITY.md b/translations/ko/SECURITY.md index bb653211..32f15f6a 100644 --- a/translations/ko/SECURITY.md +++ b/translations/ko/SECURITY.md @@ -1,40 +1,49 @@ + ## 보안 -Microsoft는 소프트웨어 제품 및 서비스의 보안을 매우 중요하게 생각하며, 여기에는 [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin) 및 [우리의 GitHub 조직](https://opensource.microsoft.com/)을 통해 관리되는 모든 소스 코드 저장소가 포함됩니다. +Microsoft는 소프트웨어 제품과 서비스의 보안을 매우 중요하게 생각하며, 여기에는 [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), 그리고 [우리의 GitHub 조직들](https://opensource.microsoft.com/)을 통해 관리되는 모든 소스 코드 저장소가 포함됩니다. -Microsoft 소유의 저장소에서 [Microsoft의 보안 취약점 정의](https://aka.ms/opensource/security/definition)에 해당하는 보안 취약점을 발견했다고 생각되면, 아래에 설명된 대로 저희에게 보고해 주시기 바랍니다. +만약 [Microsoft의 보안 취약성 정의](https://aka.ms/opensource/security/definition)에 해당하는 보안 취약성을 Microsoft 소유의 저장소에서 발견했다고 생각하신다면, 아래 설명된 대로 이를 보고해 주시기 바랍니다. ## 보안 문제 보고 -**공개 GitHub 이슈를 통해 보안 취약점을 보고하지 마십시오.** +**공개 GitHub 이슈를 통해 보안 취약성을 보고하지 마십시오.** -대신, Microsoft 보안 대응 센터(MSRC)에 [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report)로 보고해 주십시오. +대신, Microsoft Security Response Center (MSRC)에 [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report)를 통해 보고해 주십시오. -로그인 없이 제출하고 싶으시면 [secure@microsoft.com](mailto:secure@microsoft.com)으로 이메일을 보내주세요. 가능하다면, 저희 PGP 키로 메시지를 암호화해 주십시오; [Microsoft 보안 대응 센터 PGP 키 페이지](https://aka.ms/opensource/security/pgpkey)에서 다운로드할 수 있습니다. +로그인 없이 제출하려면, [secure@microsoft.com](mailto:secure@microsoft.com)으로 이메일을 보내주십시오. 가능하다면, 메시지를 PGP 키로 암호화해 주시기 바랍니다. PGP 키는 [Microsoft Security Response Center PGP Key 페이지](https://aka.ms/opensource/security/pgpkey)에서 다운로드할 수 있습니다. -24시간 이내에 답변을 받으실 수 있습니다. 만약 어떤 이유로 답변을 받지 못하셨다면, 원래 메시지를 수신했는지 확인하기 위해 이메일로 후속 조치를 취해 주시기 바랍니다. 추가 정보는 [microsoft.com/msrc](https://aka.ms/opensource/security/msrc)에서 확인하실 수 있습니다. +24시간 이내에 응답을 받을 수 있습니다. 만약 응답을 받지 못한 경우, 원래 메시지가 제대로 전달되었는지 확인하기 위해 이메일로 후속 연락을 취해 주십시오. 추가 정보는 [microsoft.com/msrc](https://aka.ms/opensource/security/msrc)에서 확인할 수 있습니다. -문제의 본질과 범위를 더 잘 이해하는 데 도움이 되도록 아래에 나열된 요청된 정보를 가능한 한 많이 포함해 주시기 바랍니다: +가능한 한 아래 나열된 정보를 포함하여 문제의 성격과 범위를 더 잘 이해할 수 있도록 도와주십시오: - * 문제 유형 (예: 버퍼 오버플로우, SQL 인젝션, 크로스 사이트 스크립팅 등) - * 문제의 발생과 관련된 소스 파일의 전체 경로 - * 영향을 받은 소스 코드의 위치 (태그/브랜치/커밋 또는 직접 URL) - * 문제를 재현하는 데 필요한 특별한 구성 - * 문제를 재현하는 단계별 지침 + * 문제 유형 (예: 버퍼 오버플로, SQL 삽입, 크로스 사이트 스크립팅 등) + * 문제와 관련된 소스 파일의 전체 경로 + * 영향을 받는 소스 코드의 위치 (태그/브랜치/커밋 또는 직접 URL) + * 문제를 재현하기 위해 필요한 특별한 구성 + * 문제를 재현하기 위한 단계별 지침 * 개념 증명 또는 익스플로잇 코드 (가능한 경우) - * 공격자가 문제를 어떻게 악용할 수 있는지 포함한 문제의 영향 + * 문제의 영향, 특히 공격자가 문제를 어떻게 악용할 수 있는지 -이 정보는 귀하의 보고서를 더 신속하게 분류하는 데 도움이 될 것입니다. +이 정보는 보고서를 더 신속하게 처리하는 데 도움이 됩니다. -버그 바운티를 위해 보고하는 경우, 더 완전한 보고서는 더 높은 보상 금액에 기여할 수 있습니다. 저희의 활성 프로그램에 대한 자세한 내용은 [Microsoft 버그 바운티 프로그램](https://aka.ms/opensource/security/bounty) 페이지를 방문해 주십시오. +버그 바운티를 위해 보고하는 경우, 더 완전한 보고서는 더 높은 바운티 보상으로 이어질 수 있습니다. 활성 프로그램에 대한 자세한 내용은 [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) 페이지를 방문해 주십시오. -## 선호하는 언어 +## 선호 언어 -모든 커뮤니케이션은 영어로 진행하는 것을 선호합니다. +모든 커뮤니케이션은 영어로 진행되는 것을 선호합니다. ## 정책 -Microsoft는 [조정된 취약점 공개](https://aka.ms/opensource/security/cvd) 원칙을 따릅니다. +Microsoft는 [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd) 원칙을 따릅니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/etc/CODE_OF_CONDUCT.md b/translations/ko/etc/CODE_OF_CONDUCT.md index e5b0d962..55e45160 100644 --- a/translations/ko/etc/CODE_OF_CONDUCT.md +++ b/translations/ko/etc/CODE_OF_CONDUCT.md @@ -1,3 +1,12 @@ + # Microsoft 오픈 소스 행동 강령 이 프로젝트는 [Microsoft 오픈 소스 행동 강령](https://opensource.microsoft.com/codeofconduct/)을 채택했습니다. @@ -6,7 +15,7 @@ - [Microsoft 오픈 소스 행동 강령](https://opensource.microsoft.com/codeofconduct/) - [Microsoft 행동 강령 FAQ](https://opensource.microsoft.com/codeofconduct/faq/) -- 질문이나 우려 사항이 있을 경우 [opencode@microsoft.com](mailto:opencode@microsoft.com)으로 연락하세요. +- 질문이나 우려 사항은 [opencode@microsoft.com](mailto:opencode@microsoft.com)으로 연락하세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역을 사용하여 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/etc/CONTRIBUTING.md b/translations/ko/etc/CONTRIBUTING.md index 6eff9ac1..e29360c2 100644 --- a/translations/ko/etc/CONTRIBUTING.md +++ b/translations/ko/etc/CONTRIBUTING.md @@ -1,20 +1,30 @@ + # 기여하기 -이 프로젝트는 기여와 제안을 환영합니다. 대부분의 기여는 여러분이 기여에 대한 권리를 가지고 있으며, 실제로도 그 권리를 우리에게 부여한다는 내용을 담은 기여자 라이선스 계약(CLA)에 동의해야 합니다. 자세한 내용은 https://cla.microsoft.com를 방문하세요. +이 프로젝트는 기여와 제안을 환영합니다. 대부분의 기여는 기여자 라이선스 계약(CLA)에 동의해야 하며, 이를 통해 귀하가 기여할 권리가 있고, 실제로 기여를 사용할 권리를 우리에게 부여한다는 것을 선언해야 합니다. 자세한 내용은 https://cla.microsoft.com을 방문하세요. -풀 요청을 제출하면, CLA 봇이 자동으로 CLA를 제공해야 하는지 여부를 판단하고 PR에 적절한 장식(예: 레이블, 댓글)을 추가합니다. 봇이 제공하는 지침을 따르기만 하면 됩니다. 우리 CLA를 사용하는 모든 리포지토리에서 이 작업을 한 번만 수행하면 됩니다. +풀 리퀘스트를 제출하면, CLA 봇이 자동으로 CLA 제공 필요 여부를 확인하고 PR에 적절히 표시(예: 라벨, 댓글)합니다. 봇이 제공하는 지침을 따르기만 하면 됩니다. CLA는 모든 저장소에서 한 번만 동의하면 됩니다. -이 프로젝트는 [Microsoft 오픈 소스 행동 강령](https://opensource.microsoft.com/codeofconduct/)을 채택했습니다. 더 많은 정보는 [행동 강령 FAQ](https://opensource.microsoft.com/codeofconduct/faq/)를 참조하시거나 추가 질문이나 의견이 있는 경우 [opencode@microsoft.com](mailto:opencode@microsoft.com)으로 문의해 주세요. +이 프로젝트는 [Microsoft 오픈 소스 행동 강령](https://opensource.microsoft.com/codeofconduct/)을 채택했습니다. +자세한 내용은 [행동 강령 FAQ](https://opensource.microsoft.com/codeofconduct/faq/)를 참조하거나, 추가 질문이나 의견이 있다면 [opencode@microsoft.com](mailto:opencode@microsoft.com)으로 문의하세요. -# 기여를 찾고 있습니다 +# 기여를 기다립니다 -현재 다음 주제에 대한 기여를 적극적으로 찾고 있습니다: +현재 다음 주제에 대한 기여를 적극적으로 기다리고 있습니다: -- [ ] 심층 강화 학습에 대한 섹션 작성 -- [ ] 객체 탐지에 대한 섹션 및 노트북 개선 -- [ ] PyTorch Lightning (이 섹션에 대한 [링크](https://github.com/microsoft/AI-For-Beginners/blob/main/3-NeuralNetworks/05-Frameworks/README.md)) -- [ ] 명명된 개체 인식에 대한 섹션 및 샘플 작성 -- [ ] 이 섹션에 대한 [링크](https://github.com/microsoft/AI-For-Beginners/tree/main/5-NLP/15-LanguageModeling)에서 우리만의 임베딩을 훈련하기 위한 샘플 만들기 +- [ ] 딥 강화 학습(Deep Reinforcement Learning) 섹션 작성 +- [ ] 객체 탐지(Object Detection) 섹션 및 노트북 개선 +- [ ] PyTorch Lightning ([이 섹션](https://github.com/microsoft/AI-For-Beginners/blob/main/3-NeuralNetworks/05-Frameworks/README.md) 참고) +- [ ] 개체명 인식(Named Entity Recognition) 섹션 및 샘플 작성 +- [ ] [이 섹션](https://github.com/microsoft/AI-For-Beginners/tree/main/5-NLP/15-LanguageModeling)을 위한 자체 임베딩 학습 샘플 생성 **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역을 사용하여 발생하는 오해나 잘못된 해석에 대해 저희는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/etc/Mindmap.md b/translations/ko/etc/Mindmap.md index c1c0278b..55485084 100644 --- a/translations/ko/etc/Mindmap.md +++ b/translations/ko/etc/Mindmap.md @@ -1,76 +1,87 @@ + # AI ## [AI 소개](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/1-Intro/README.md) - AI 정의 - - AI의 역사 + - AI 역사 - AI 접근 방식 - - 상향식/기호적 접근 - - 하향식/신경망 접근 - - 진화적 접근 - - 시너지적/창발적 AI + - 상향식/기호적 + - 하향식/신경망 + - 진화적 + - 협력적/발현적 AI - [Microsoft AI 비즈니스 스쿨](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-cacaste) ## [기호적 AI](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/README.md) - 지식 표현 - [전문가 시스템](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) - [온톨로지](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) - - 의미론적 웹 + - 시맨틱 웹 ## [신경망](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/README.md) - [퍼셉트론](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/README.md) - - [다층 네트워크](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/README.md) + - [다층 신경망](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/README.md) - [프레임워크 소개](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/README.md) - [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) - [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.md) - - [과적합](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/Overfitting.md) + - [오버피팅](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/Overfitting.md) ## [컴퓨터 비전](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/README.md) - MS Learn에서 - - [AI 기초: 컴퓨터 비전 탐색](https://docs.microsoft.com/learn/paths/explore-computer-vision-microsoft-azure/?WT.mc_id=academic-77998-cacaste) - - [PyTorch를 이용한 CV](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) - - [TensorFlow를 이용한 CV](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste) - - [CV 소개. OpenCV](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/README.md) + - [AI 기초: 컴퓨터 비전 탐구](https://docs.microsoft.com/learn/paths/explore-computer-vision-microsoft-azure/?WT.mc_id=academic-77998-cacaste) + - [PyTorch를 활용한 컴퓨터 비전](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) + - [TensorFlow를 활용한 컴퓨터 비전](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste) + - [컴퓨터 비전 소개. OpenCV](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/README.md) - [합성곱 신경망](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/README.md) - [CNN 아키텍처](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) - [전이 학습](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/README.md) - - [훈련 팁](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) + - [학습 팁](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) - [오토인코더와 VAE](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/README.md) - [생성적 적대 신경망](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/README.md) - [스타일 전이](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) - [객체 탐지](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/README.md) - - [세분화](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/README.md) + - [세그멘테이션](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/README.md) ## [자연어 처리](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/README.md) - MS Learn에서 - - [AI 기초: 자연어 처리 탐색](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-cacaste) - - [PyTorch를 이용한 NLP](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) - - [TensorFlow를 이용한 NLP](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) -- [텍스트 표현](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/README.md) - - 단어의 가방 + - [AI 기초: NLP 탐구](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-cacaste) + - [PyTorch를 활용한 NLP](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) + - [TensorFlow를 활용한 NLP](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) + - [텍스트 표현](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/README.md) + - Bag of Words - TF/IDF - - [의미 임베딩](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/README.md) + - [시맨틱 임베딩](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/README.md) - Word2Vec - GloVE - [언어 모델링](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling) - [순환 신경망](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/README.md) - LSTM - GRU - - [생성적 순환 네트워크](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/README.md) - - [변환기와 BERT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/README.md) - - [명명된 개체 인식](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/19-NER/README.md) - - [텍스트 생성 및 GPT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/20-LanguageModels/README.md) + - [생성적 순환 신경망](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/README.md) + - [트랜스포머와 BERT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/README.md) + - [개체명 인식](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/19-NER/README.md) + - [텍스트 생성과 GPT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/20-LanguageModels/README.md) + ## 기타 기술 - [유전 알고리즘](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/README.md) - [심층 강화 학습](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/README.md) - [다중 에이전트 시스템](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/23-MultiagentSystems/README.md) ## [AI 윤리](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/7-Ethics/README.md) - - [책임 있는 AI에 대한 MS Learn](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) + - [MS Learn에서 책임 있는 AI](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) + ## 추가 자료 - - [다중 모달 네트워크](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/README.md) + - [멀티모달 네트워크](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/README.md) - [CLIP](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) - DALL-E - VQ-GAN **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우, 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/etc/SUPPORT.md b/translations/ko/etc/SUPPORT.md index fbcf5cd5..bbff6227 100644 --- a/translations/ko/etc/SUPPORT.md +++ b/translations/ko/etc/SUPPORT.md @@ -1,14 +1,23 @@ + # 지원 -## 문제 신고 및 도움 받는 방법 +## 문제 제기 및 도움 받는 방법 -이 프로젝트는 버그 및 기능 요청을 추적하기 위해 GitHub Issues를 사용합니다. 중복을 피하기 위해 새로운 문제를 신고하기 전에 기존 문제를 검색해 주세요. 새로운 문제의 경우, 버그나 기능 요청을 새로운 Issue로 신고해 주세요. +이 프로젝트는 GitHub Issues를 사용하여 버그와 기능 요청을 추적합니다. 중복을 피하기 위해 새로운 문제를 제기하기 전에 기존 문제를 검색해 보세요. 새로운 문제의 경우, 버그나 기능 요청을 새로운 Issue로 작성하세요. -이 프로젝트 사용에 대한 도움이나 질문은 토론 게시판을 이용해 주세요. +이 프로젝트 사용에 대한 도움과 질문은 Discussion Boards를 이용하세요. ## Microsoft 지원 정책 -이 프로젝트에 대한 지원은 위에 나열된 리소스로 제한됩니다. +이 프로젝트에 대한 지원은 위에 나열된 리소스에 한정됩니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 저희는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/etc/TRANSLATIONS.md b/translations/ko/etc/TRANSLATIONS.md index 73e40d32..eba691ef 100644 --- a/translations/ko/etc/TRANSLATIONS.md +++ b/translations/ko/etc/TRANSLATIONS.md @@ -1,36 +1,45 @@ -# 수업 번역에 기여하기 + +# 수업 번역으로 기여하기 -이 커리큘럼의 수업에 대한 번역을 환영합니다! +이 커리큘럼의 수업 번역을 환영합니다! -## 가이드라인 +## 지침 -각 수업 폴더와 수업 소개 폴더에는 번역된 마크다운 파일이 포함된 폴더가 있습니다. +각 수업 폴더와 수업 소개 폴더에는 번역된 마크다운 파일이 포함되어 있습니다. -> 주의: 코드 샘플 파일의 코드는 번역하지 마세요. 번역해야 할 항목은 README, 과제 및 퀴즈뿐입니다. 감사합니다! +> 참고: 코드 샘플 파일의 코드는 번역하지 마세요. 번역해야 할 부분은 README, 과제, 퀴즈입니다. 감사합니다! -번역된 파일은 다음과 같은 명명 규칙을 따라야 합니다: +번역된 파일은 다음 명명 규칙을 따라야 합니다: **README._[language]_.md** -여기서 _[language]_는 ISO 639-1 표준에 따른 두 글자의 언어 약어입니다 (예: `README.es.md`는 스페인어, `README.nl.md`는 네덜란드어에 해당). +여기서 _[language]_는 ISO 639-1 표준을 따르는 두 글자 언어 약어입니다 (예: 스페인어는 `README.es.md`, 네덜란드어는 `README.nl.md`). **assignment._[language]_.md** -README와 유사하게, 과제도 번역해 주세요. +README와 마찬가지로 과제도 번역해주세요. **퀴즈** -1. 번역을 퀴즈 앱에 추가하려면 여기에서 파일을 추가하세요: https://github.com/microsoft/AI-For-Beginners/tree/main/etc/quiz-app/src/assets/translations, 적절한 명명 규칙(en.json, fr.json)을 따르세요. **'true' 또는 'false'라는 단어는 현지화하지 마세요. 감사합니다!** +1. 번역을 퀴즈 앱에 추가하려면 여기에 파일을 추가하세요: https://github.com/microsoft/AI-For-Beginners/tree/main/etc/quiz-app/src/assets/translations, 올바른 명명 규칙을 따르세요 (en.json, fr.json). **단, 'true'와 'false'는 현지화하지 마세요. 감사합니다!** 2. 퀴즈 앱의 App.vue 파일에서 드롭다운에 언어 코드를 추가하세요. 3. 퀴즈 앱의 [translations index.js 파일](https://github.com/microsoft/AI-For-Beginners/blob/main/etc/quiz-app/src/assets/translations/index.js)을 편집하여 언어를 추가하세요. -4. 마지막으로, 번역된 README.md 파일의 모든 퀴즈 링크를 직접 번역된 퀴즈로 연결되도록 수정하세요: https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1에서 https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1?loc=id로 변경합니다. +4. 마지막으로, 번역된 README.md 파일의 모든 퀴즈 링크를 번역된 퀴즈로 직접 연결되도록 수정하세요: https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1은 https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1?loc=id로 변경됩니다. **감사합니다** -여러분의 노고에 진심으로 감사드립니다! +여러분의 노력에 진심으로 감사드립니다! **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 있을 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/etc/quiz-app/README.md b/translations/ko/etc/quiz-app/README.md index 94bf90bf..fb65d59e 100644 --- a/translations/ko/etc/quiz-app/README.md +++ b/translations/ko/etc/quiz-app/README.md @@ -1,18 +1,27 @@ + # 퀴즈 -이 퀴즈는 https://aka.ms/ai-beginners의 AI 커리큘럼을 위한 강의 전후 퀴즈입니다. +이 퀴즈는 https://aka.ms/ai-beginners 에서 제공하는 AI 커리큘럼의 강의 전후 퀴즈입니다. ## 번역된 퀴즈 세트 추가하기 -`assets/translations` 폴더에 맞는 퀴즈 구조를 생성하여 퀴즈 번역을 추가하세요. 표준 퀴즈는 `assets/translations/en`에 있습니다. 퀴즈는 수업별로 여러 그룹으로 나뉘어 있습니다. 적절한 퀴즈 섹션에 맞춰 번호를 정렬하세요. 이 커리큘럼에는 총 40개의 퀴즈가 있으며, 카운트는 0부터 시작합니다. +번역된 퀴즈를 추가하려면 `assets/translations` 폴더에 해당하는 퀴즈 구조를 생성하세요. 기본 퀴즈는 `assets/translations/en`에 있습니다. 퀴즈는 강의별로 여러 그룹으로 나뉘어 있습니다. 번호가 올바른 퀴즈 섹션과 일치하도록 정렬하세요. 이 커리큘럼에는 총 40개의 퀴즈가 있으며, 번호는 0부터 시작합니다. -번역을 편집한 후, 번역 폴더의 index.js 파일을 수정하여 `en`의 규칙에 따라 모든 파일을 가져오세요. +번역을 편집한 후, 번역 폴더의 `index.js` 파일을 편집하여 `en`의 규칙을 따라 모든 파일을 가져오도록 설정하세요. -`index.js` 파일을 `assets/translations`에서 수정하여 새로 번역된 파일을 가져옵니다. +`assets/translations`의 `index.js` 파일을 편집하여 새로 번역된 파일을 가져오도록 수정하세요. -그런 다음, 이 앱의 `App.vue`에서 드롭다운을 수정하여 귀하의 언어를 추가하세요. 지역화된 약어를 귀하의 언어 폴더 이름과 일치시킵니다. +그런 다음, 이 앱의 `App.vue` 파일에서 드롭다운을 편집하여 해당 언어를 추가하세요. 로컬화된 약어가 해당 언어의 폴더 이름과 일치하도록 설정하세요. -마지막으로, 번역된 수업에서 퀴즈 링크가 존재하는 경우, 이 지역화를 쿼리 매개변수로 포함하도록 모든 퀴즈 링크를 수정하세요: 예를 들어 `?loc=fr`. +마지막으로, 번역된 강의에 퀴즈 링크가 있는 경우, 이 로컬화를 쿼리 매개변수로 포함하도록 수정하세요. 예: `?loc=fr` ## 프로젝트 설정 @@ -38,59 +47,60 @@ npm run build npm run lint ``` -### 구성 사용자화 +### 구성 사용자 정의 [구성 참조](https://cli.vuejs.org/config/)를 참조하세요. -크레딧: 이 퀴즈 앱의 원본 버전 덕분입니다: https://github.com/arpan45/simple-quiz-vue +크레딧: 이 퀴즈 앱의 원본 버전에 감사드립니다: https://github.com/arpan45/simple-quiz-vue ## Azure에 배포하기 -시작하는 데 도움이 되는 단계별 가이드입니다: +다음은 시작하는 데 도움이 되는 단계별 가이드입니다: -1. GitHub 저장소 포크하기 -정적 웹 앱 코드가 GitHub 저장소에 있는지 확인하세요. 이 저장소를 포크합니다. +1. GitHub 저장소 포크하기 + 정적 웹 앱 코드가 GitHub 저장소에 있는지 확인하세요. 이 저장소를 포크하세요. -2. Azure 정적 웹 앱 만들기 -- [Azure 계정](http://azure.microsoft.com) 만들기 -- [Azure 포털](https://portal.azure.com)로 이동 -- "리소스 만들기"를 클릭하고 "정적 웹 앱"을 검색합니다. -- "만들기"를 클릭합니다. +2. Azure 정적 웹 앱 생성 + - [Azure 계정](http://azure.microsoft.com)을 생성하세요. + - [Azure 포털](https://portal.azure.com)로 이동하세요. + - "리소스 생성"을 클릭하고 "Static Web App"을 검색하세요. + - "생성"을 클릭하세요. -3. 정적 웹 앱 구성 -- 기본: 구독: 귀하의 Azure 구독을 선택합니다. -- 리소스 그룹: 새 리소스 그룹을 만들거나 기존 리소스를 사용합니다. -- 이름: 정적 웹 앱의 이름을 제공합니다. -- 지역: 사용자와 가장 가까운 지역을 선택합니다. +3. 정적 웹 앱 구성 + - 기본 설정: + - 구독: Azure 구독을 선택하세요. + - 리소스 그룹: 새 리소스 그룹을 생성하거나 기존 그룹을 사용하세요. + - 이름: 정적 웹 앱의 이름을 입력하세요. + - 지역: 사용자와 가장 가까운 지역을 선택하세요. -- #### 배포 세부정보: -- 소스: "GitHub"를 선택합니다. -- GitHub 계정: Azure가 귀하의 GitHub 계정에 접근할 수 있도록 권한을 부여합니다. -- 조직: 귀하의 GitHub 조직을 선택합니다. -- 저장소: 정적 웹 앱이 포함된 저장소를 선택합니다. -- 브랜치: 배포할 브랜치를 선택합니다. + - #### 배포 세부 정보: + - 소스: "GitHub"를 선택하세요. + - GitHub 계정: Azure가 GitHub 계정에 접근할 수 있도록 승인하세요. + - 조직: GitHub 조직을 선택하세요. + - 저장소: 정적 웹 앱이 포함된 저장소를 선택하세요. + - 브랜치: 배포할 브랜치를 선택하세요. -- #### 빌드 세부정보: -- 빌드 프리셋: 앱이 구축된 프레임워크를 선택합니다 (예: React, Angular, Vue 등). -- 앱 위치: 앱 코드가 포함된 폴더를 지정합니다 (예: 루트에 있는 경우 /). -- API 위치: API가 있는 경우 위치를 지정합니다 (선택 사항). -- 출력 위치: 빌드 출력이 생성되는 폴더를 지정합니다 (예: build 또는 dist). + - #### 빌드 세부 정보: + - 빌드 프리셋: 앱이 빌드된 프레임워크를 선택하세요 (예: React, Angular, Vue 등). + - 앱 위치: 앱 코드가 포함된 폴더를 지정하세요 (예: 루트에 있다면 /). + - API 위치: API가 있다면 위치를 지정하세요 (선택 사항). + - 출력 위치: 빌드 출력이 생성되는 폴더를 지정하세요 (예: build 또는 dist). -4. 검토 및 생성 -설정을 검토하고 "생성"을 클릭합니다. Azure는 필요한 리소스를 설정하고 귀하의 저장소에 GitHub Actions 워크플로를 생성합니다. +4. 검토 및 생성 + 설정을 검토하고 "생성"을 클릭하세요. Azure가 필요한 리소스를 설정하고 GitHub Actions 워크플로를 저장소에 생성합니다. -5. GitHub Actions 워크플로 -Azure는 귀하의 저장소에 GitHub Actions 워크플로 파일을 자동으로 생성합니다 (.github/workflows/azure-static-web-apps-.yml). 이 워크플로는 빌드 및 배포 프로세스를 처리합니다. +5. GitHub Actions 워크플로 + Azure는 자동으로 GitHub Actions 워크플로 파일을 저장소에 생성합니다 (.github/workflows/azure-static-web-apps-.yml). 이 워크플로는 빌드 및 배포 프로세스를 처리합니다. -6. 배포 모니터링 -GitHub 저장소의 "작업" 탭으로 이동합니다. -워크플로가 실행되고 있어야 합니다. 이 워크플로는 귀하의 정적 웹 앱을 Azure에 빌드하고 배포합니다. -워크플로가 완료되면, 귀하의 앱은 제공된 Azure URL에서 실시간으로 사용할 수 있습니다. +6. 배포 모니터링 + GitHub 저장소의 "Actions" 탭으로 이동하세요. + 실행 중인 워크플로를 확인할 수 있습니다. 이 워크플로는 정적 웹 앱을 Azure에 빌드하고 배포합니다. + 워크플로가 완료되면 제공된 Azure URL에서 앱이 라이브로 실행됩니다. -### 예시 워크플로 파일 +### 예제 워크플로 파일 -다음은 GitHub Actions 워크플로 파일의 예시입니다: -name: Azure Static Web Apps CI/CD +다음은 GitHub Actions 워크플로 파일의 예제입니다: +name: Azure Static Web Apps CI/CD ``` on: push: @@ -120,8 +130,8 @@ jobs: ``` ### 추가 자료 -- [Azure Static Web Apps 문서](https://learn.microsoft.com/azure/static-web-apps/getting-started) -- [GitHub Actions 문서](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) +- [Azure 정적 웹 앱 문서](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [GitHub Actions 문서](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 저희가 책임지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/0-course-setup/for-teachers.md b/translations/ko/lessons/0-course-setup/for-teachers.md index 3fbd204f..ef06f4c6 100644 --- a/translations/ko/lessons/0-course-setup/for-teachers.md +++ b/translations/ko/lessons/0-course-setup/for-teachers.md @@ -1,26 +1,35 @@ + # 교육자를 위한 안내 -이 커리큘럼을 교실에서 사용하고 싶으신가요? 자유롭게 사용하세요! +이 커리큘럼을 교실에서 사용하고 싶으신가요? 자유롭게 활용하세요! -사실, GitHub Classroom을 사용하여 GitHub 내에서 직접 사용할 수 있습니다. +사실, GitHub 자체에서 [GitHub Classroom](https://classroom.github.com/classrooms)을 사용하여 이 커리큘럼을 활용할 수 있습니다. -이를 위해 이 저장소를 포크하세요. 각 수업마다 저장소를 만들어야 하므로, 각 폴더를 별도의 저장소로 추출해야 합니다. 이렇게 하면 [GitHub Classroom](https://classroom.github.com/classrooms)이 각 수업을 개별적으로 인식할 수 있습니다. +이를 위해서는 이 저장소를 포크해야 합니다. 각 수업마다 별도의 저장소를 만들어야 하므로, 각 폴더를 개별 저장소로 분리해야 합니다. 이렇게 하면 GitHub Classroom이 각 수업을 개별적으로 처리할 수 있습니다. -이 [전체 지침](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/)을 통해 교실을 설정하는 방법에 대한 아이디어를 얻을 수 있습니다. +[전체 지침](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/)을 통해 디지털 교실을 설정하는 방법에 대한 아이디어를 얻을 수 있습니다. -## 현재 상태로 저장소 사용하기 +## 현재 상태 그대로 저장소 사용하기 -현재 상태로 이 저장소를 사용하고 싶으시다면, GitHub Classroom을 사용하지 않고도 가능합니다. 학생들과 어떤 수업을 함께 진행할지 소통해야 합니다. +GitHub Classroom을 사용하지 않고 현재 상태 그대로 이 저장소를 사용하고 싶으시다면, 그것도 가능합니다. 학생들에게 함께 진행할 수업을 알려주시면 됩니다. -온라인 형식(Zoom, Teams 등)에서는 퀴즈를 위한 분임 토의 방을 만들고, 학생들이 학습 준비를 할 수 있도록 멘토링할 수 있습니다. 그런 다음 학생들에게 퀴즈를 풀고 특정 시간에 '이슈'로 답안을 제출하도록 초대할 수 있습니다. 과제를 원활하게 진행하고 싶다면, 학생들이 공개적으로 협력할 수 있도록 동일한 방식으로 진행할 수 있습니다. +온라인 형식(Zoom, Teams 등)에서는 퀴즈를 위해 소그룹을 구성하고, 학생들이 학습 준비를 할 수 있도록 멘토링할 수 있습니다. 그런 다음 학생들에게 퀴즈를 풀고 특정 시간에 '이슈'로 답변을 제출하도록 요청할 수 있습니다. 과제를 진행할 때도 학생들이 공개적으로 협력하도록 유도할 수 있습니다. -좀 더 개인적인 형식을 원하신다면, 학생들에게 커리큘럼을 각 수업별로 자신의 GitHub 저장소에 개인 저장소로 포크하고, 당신에게 접근 권한을 주도록 요청하세요. 그러면 학생들은 퀴즈와 과제를 개인적으로 완료하고, 당신의 교실 저장소에 이슈를 통해 제출할 수 있습니다. +보다 비공개 형식을 선호하신다면, 학생들에게 커리큘럼을 각 수업별로 포크하여 자신의 GitHub 저장소에 비공개로 저장하도록 요청하고, 여러분에게 접근 권한을 부여하도록 하세요. 그런 다음 학생들은 퀴즈와 과제를 비공개로 완료하고, 여러분의 교실 저장소의 이슈를 통해 제출할 수 있습니다. -온라인 교실 형식에서 이 작업을 수행할 수 있는 다양한 방법이 있습니다. 어떤 방법이 가장 잘 작동하는지 알려주세요! +온라인 교실 형식에서 이를 구현할 수 있는 다양한 방법이 있습니다. 어떤 방식이 가장 잘 작동하는지 알려주세요! -## 여러분의 의견을 들려주세요 +## 의견을 공유해주세요 -우리는 이 커리큘럼이 여러분과 학생들에게 유용하게 작동하기를 원합니다. 토론 게시판에 피드백을 남겨주세요! +이 커리큘럼이 여러분과 학생들에게 잘 맞도록 만들고 싶습니다. 토론 게시판에서 피드백을 공유해주세요! **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/0-course-setup/how-to-run.md b/translations/ko/lessons/0-course-setup/how-to-run.md index 6675c529..20c87643 100644 --- a/translations/ko/lessons/0-course-setup/how-to-run.md +++ b/translations/ko/lessons/0-course-setup/how-to-run.md @@ -1,12 +1,21 @@ + # 코드 실행 방법 -이 커리큘럼에는 실행 가능한 예제와 실습이 많이 포함되어 있습니다. 이를 실행하기 위해서는 이 커리큘럼의 일환으로 제공되는 Jupyter Notebooks에서 Python 코드를 실행할 수 있는 능력이 필요합니다. 코드를 실행하는 방법은 여러 가지가 있습니다. +이 커리큘럼에는 실행 가능한 예제와 실습이 많이 포함되어 있으며, 이를 실행해 보고 싶을 것입니다. 이를 위해서는 이 커리큘럼의 일부로 제공된 Jupyter Notebook에서 Python 코드를 실행할 수 있는 환경이 필요합니다. 코드를 실행하는 방법에는 여러 가지가 있습니다: -## 컴퓨터에서 로컬로 실행하기 +## 로컬 컴퓨터에서 실행 -코드를 로컬 컴퓨터에서 실행하려면 Python의 어떤 버전이 설치되어 있어야 합니다. 개인적으로 **[miniconda](https://conda.io/en/latest/miniconda.html)** 설치를 추천합니다. 이는 다양한 Python **가상 환경**을 위한 `conda` 패키지 관리자를 지원하는 가벼운 설치입니다. +코드를 로컬 컴퓨터에서 실행하려면 Python의 어떤 버전이든 설치되어 있어야 합니다. 개인적으로는 **[miniconda](https://conda.io/en/latest/miniconda.html)**를 설치하는 것을 추천합니다. 이는 가벼운 설치 방식으로, 다양한 Python **가상 환경**을 지원하는 `conda` 패키지 관리자를 제공합니다. -miniconda를 설치한 후, 리포지토리를 클론하고 이 과정에서 사용할 가상 환경을 생성해야 합니다: +miniconda를 설치한 후, 저장소를 클론하고 이 강좌에서 사용할 가상 환경을 생성해야 합니다: ```bash git clone http://github.com/microsoft/ai-for-beginners @@ -15,53 +24,53 @@ conda env create --name ai4beg --file .devcontainer/environment.yml conda activate ai4beg ``` -### Python 확장과 함께 Visual Studio Code 사용하기 +### Python 확장이 포함된 Visual Studio Code 사용 -커리큘럼을 사용하는 가장 좋은 방법은 [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste)에서 [Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste)과 함께 여는 것입니다. +이 커리큘럼을 사용하는 가장 좋은 방법은 [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste)와 [Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste)을 사용하여 여는 것입니다. -> **Note**: VS Code에서 디렉토리를 클론하고 열면 Python 확장 설치를 자동으로 제안합니다. 위에서 설명한 대로 miniconda도 설치해야 합니다. +> **Note**: 저장소를 클론하고 VS Code에서 디렉토리를 열면, Python 확장을 설치하라는 제안이 자동으로 표시됩니다. 위에서 설명한 대로 miniconda도 설치해야 합니다. -> **Note**: VS Code에서 리포지토리를 컨테이너에서 다시 열라는 제안을 받으면, 로컬 Python 설치를 사용하기 위해 이를 거부해야 합니다. +> **Note**: VS Code가 저장소를 컨테이너에서 다시 열 것을 제안하면, 로컬 Python 설치를 사용하기 위해 이를 거부해야 합니다. -### 브라우저에서 Jupyter 사용하기 +### 브라우저에서 Jupyter 사용 -브라우저에서 직접 Jupyter 환경을 사용할 수도 있습니다. 사실, 클래식 Jupyter와 Jupyter Hub 모두 자동 완성, 코드 하이라이팅 등으로 꽤 편리한 개발 환경을 제공합니다. +브라우저에서 바로 Jupyter 환경을 사용할 수도 있습니다. 실제로, 클래식 Jupyter와 Jupyter Hub는 자동 완성, 코드 하이라이팅 등 편리한 개발 환경을 제공합니다. -로컬에서 Jupyter를 시작하려면, 과정 디렉토리로 이동한 후 다음을 실행하세요: +로컬에서 Jupyter를 시작하려면, 강좌 디렉토리로 이동하여 다음 명령을 실행하세요: ```bash jupyter notebook -``` -또는 +``` +또는 ```bash jupyterhub -``` -그 후, `.ipynb` files, open them and start working. +``` +그런 다음 `.ipynb` 파일 중 하나로 이동하여 열고 작업을 시작할 수 있습니다. -### Running in container +### 컨테이너에서 실행 -One alternative to Python installation would be to run the code in container. Since our repository contains special `.devcontainer` 폴더로 이동하면 이 리포지토리를 위한 컨테이너를 빌드하는 방법이 안내됩니다. VS Code는 컨테이너에서 코드를 다시 열 것을 제안할 것입니다. 이 경우 Docker 설치가 필요하며, 더 복잡하므로 경험이 많은 사용자에게 추천합니다. +Python을 설치하는 대신 컨테이너에서 코드를 실행하는 방법도 있습니다. 저장소에는 이 저장소를 위한 컨테이너를 빌드하는 방법을 지시하는 `.devcontainer` 폴더가 포함되어 있으므로, VS Code는 코드를 컨테이너에서 다시 열 것을 제안할 것입니다. 이를 위해 Docker 설치가 필요하며, 다소 복잡할 수 있으므로 더 숙련된 사용자에게 추천합니다. -## 클라우드에서 실행하기 +## 클라우드에서 실행 -로컬에 Python을 설치하고 싶지 않거나 클라우드 리소스에 접근할 수 있다면, 클라우드에서 코드를 실행하는 것이 좋은 대안이 될 수 있습니다. 이를 수행할 수 있는 여러 방법이 있습니다: +Python을 로컬에 설치하고 싶지 않거나 클라우드 리소스에 접근할 수 있다면, 클라우드에서 코드를 실행하는 것도 좋은 대안입니다. 이를 실행하는 몇 가지 방법이 있습니다: -* **[GitHub Codespaces](https://github.com/features/codespaces)**를 사용하기. GitHub에서 여러분을 위해 생성된 가상 환경으로, VS Code 브라우저 인터페이스를 통해 접근할 수 있습니다. Codespaces에 접근할 수 있다면, 리포지토리에서 **Code** 버튼을 클릭하고, 코드를 시작하여 금방 실행할 수 있습니다. -* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**를 사용하기. [Binder](https://mybinder.org)는 GitHub에서 코드를 테스트할 수 있도록 제공되는 무료 컴퓨팅 리소스입니다. Binder에서 리포지토리를 열 수 있는 버튼이 홈페이지에 있으며, 이 버튼을 클릭하면 Binder 사이트로 빠르게 이동하여 기본 컨테이너를 빌드하고 Jupyter 웹 인터페이스를 원활하게 시작할 수 있습니다. +* **[GitHub Codespaces](https://github.com/features/codespaces)**를 사용하는 방법. 이는 GitHub에서 제공하는 가상 환경으로, VS Code 브라우저 인터페이스를 통해 접근할 수 있습니다. Codespaces에 접근할 수 있다면, 저장소의 **Code** 버튼을 클릭하고 Codespace를 시작하면 바로 실행할 수 있습니다. +* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**를 사용하는 방법. [Binder](https://mybinder.org)는 GitHub에서 코드를 테스트하려는 사람들을 위해 제공되는 무료 클라우드 컴퓨팅 리소스입니다. 저장소의 첫 페이지에 Binder에서 저장소를 열 수 있는 버튼이 있으며, 이를 클릭하면 Binder 사이트로 이동하여 기본 컨테이너를 빌드하고 Jupyter 웹 인터페이스를 원활하게 시작할 수 있습니다. -> **Note**: 오용을 방지하기 위해 Binder는 일부 웹 리소스에 대한 접근을 차단하고 있습니다. 이로 인해 공용 인터넷에서 모델 및/또는 데이터 세트를 가져오는 일부 코드가 작동하지 않을 수 있습니다. 우회 방법을 찾아야 할 수도 있습니다. 또한, Binder에서 제공하는 컴퓨팅 리소스는 기본적이므로, 특히 후반부의 더 복잡한 수업에서는 훈련 속도가 느릴 수 있습니다. +> **Note**: 오용을 방지하기 위해 Binder는 일부 웹 리소스에 대한 접근을 차단합니다. 이는 모델이나 데이터를 공용 인터넷에서 가져오는 코드를 실행할 때 문제가 될 수 있습니다. 해결 방법을 찾아야 할 수도 있습니다. 또한, Binder에서 제공되는 컴퓨팅 리소스는 기본적이므로, 특히 더 복잡한 후반부 강의에서는 학습 속도가 느릴 수 있습니다. -## GPU와 함께 클라우드에서 실행하기 +## GPU를 활용한 클라우드 실행 -이 커리큘럼의 일부 후반부 수업은 GPU 지원이 큰 도움이 될 것입니다. 그렇지 않으면 훈련 속도가 매우 느려질 것입니다. 특히 [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste)나 귀하의 기관을 통해 클라우드에 접근할 수 있다면, 다음과 같은 몇 가지 옵션을 따라할 수 있습니다: +이 커리큘럼의 후반부 강의 중 일부는 GPU 지원이 있으면 훨씬 더 효율적입니다. 그렇지 않으면 학습 속도가 매우 느릴 수 있습니다. 클라우드에 접근할 수 있는 경우, 특히 [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste)나 기관을 통해 접근할 수 있다면, 다음 옵션을 고려할 수 있습니다: -* [데이터 과학 가상 머신](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste)을 생성하고 Jupyter를 통해 연결합니다. 그러면 리포지토리를 머신에 바로 클론하고 학습을 시작할 수 있습니다. NC 시리즈 VM은 GPU 지원을 제공합니다. +* [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste)을 생성하고 Jupyter를 통해 연결합니다. 그런 다음, 해당 머신에 저장소를 클론하고 학습을 시작할 수 있습니다. NC 시리즈 VM은 GPU를 지원합니다. -> **Note**: Azure for Students를 포함한 일부 구독은 기본적으로 GPU 지원을 제공하지 않습니다. 기술 지원 요청을 통해 추가 GPU 코어를 요청해야 할 수도 있습니다. +> **Note**: Azure for Students를 포함한 일부 구독은 기본적으로 GPU 지원을 제공하지 않습니다. 추가 GPU 코어를 요청하려면 기술 지원 요청이 필요할 수 있습니다. -* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste)를 생성한 후, 그곳의 Notebook 기능을 사용합니다. [이 비디오](https://azure-for-academics.github.io/quickstart/azureml-papers/)는 Azure ML 노트북에 리포지토리를 클론하고 사용하는 방법을 보여줍니다. +* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste)를 생성한 후, Notebook 기능을 사용합니다. [이 비디오](https://azure-for-academics.github.io/quickstart/azureml-papers/)는 Azure ML 노트북에 저장소를 클론하고 사용하는 방법을 보여줍니다. -또한 Google Colab을 사용할 수도 있으며, 여기에는 무료 GPU 지원이 제공되며 Jupyter Notebooks를 업로드하여 차례로 실행할 수 있습니다. +Google Colab도 사용할 수 있으며, 일부 무료 GPU 지원을 제공합니다. Jupyter Notebook을 업로드하여 하나씩 실행할 수 있습니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/0-course-setup/setup.md b/translations/ko/lessons/0-course-setup/setup.md index 28f91dfd..56b01c9b 100644 --- a/translations/ko/lessons/0-course-setup/setup.md +++ b/translations/ko/lessons/0-course-setup/setup.md @@ -1,45 +1,54 @@ + # 이 커리큘럼 시작하기 ## 학생이신가요? -다음 자료를 통해 시작해 보세요: +다음 리소스를 통해 시작해보세요: -* [학생 허브 페이지](https://docs.microsoft.com/learn/student-hub?WT.mc_id=academic-77998-cacaste) 이 페이지에서는 초급 자료, 학생 패키지, 무료 인증 바우처를 얻는 방법 등을 찾을 수 있습니다. 이 페이지는 북마크해 두고 가끔씩 확인할 만한 가치가 있습니다. 매달 최소한 한 번은 콘텐츠가 교체되기 때문입니다. -* [Microsoft 학생 학습 앰배서더](https://studentambassadors.microsoft.com?WT.mc_id=academic-77998-cacaste) 전 세계 학생 앰배서더 커뮤니티에 가입하세요. 이는 Microsoft에 들어가는 길이 될 수 있습니다. +* [Student Hub 페이지](https://docs.microsoft.com/learn/student-hub?WT.mc_id=academic-77998-cacaste) 이 페이지에서는 초보자를 위한 리소스, 학생 팩, 그리고 무료 인증서 바우처를 받을 수 있는 방법을 찾을 수 있습니다. 이 페이지는 즐겨찾기에 추가하고 정기적으로 확인하세요. 콘텐츠는 최소 월 단위로 변경됩니다. +* [Microsoft Student Learn Ambassadors](https://studentambassadors.microsoft.com?WT.mc_id=academic-77998-cacaste) 글로벌 학생 대사 커뮤니티에 참여하세요. 이것이 Microsoft로 들어가는 길이 될 수 있습니다. -**학생 여러분**, 커리큘럼을 활용하는 방법은 몇 가지가 있습니다. 우선, 텍스트를 읽고 GitHub에서 코드를 직접 살펴볼 수 있습니다. 노트북 중 하나에서 코드를 실행하고 싶다면 - [우리의 지침을 읽어보세요](./etc/how-to-run.md), 그리고 [이 블로그 게시물에서](https://soshnikov.com/education/how-to-execute-notebooks-from-github/) 실행 방법에 대한 더 많은 조언을 찾을 수 있습니다. +**학생 여러분**, 커리큘럼을 사용하는 몇 가지 방법이 있습니다. 먼저, GitHub에서 텍스트를 읽고 코드를 직접 살펴볼 수 있습니다. 노트북에서 코드를 실행하고 싶다면 [실행 방법에 대한 지침](./etc/how-to-run.md)을 읽고, [이 블로그 게시물](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)에서 추가적인 조언을 찾아보세요. -> **참고**: [이 커리큘럼에서 코드를 실행하는 방법에 대한 지침](/how-to-run.md) +> **Note**: [이 커리큘럼의 코드 실행 방법에 대한 지침](./how-to-run.md) -## 자기 주도 학습 +## 자기주도 학습 -하지만, 이 과정을 자기 주도 학습 프로젝트로 진행하고 싶다면, 전체 리포를 자신의 GitHub 계정으로 포크하고 혼자 또는 그룹과 함께 연습 문제를 완료하는 것을 추천합니다: +만약 이 과정을 자기주도 학습 프로젝트로 진행하고 싶다면, 전체 저장소를 자신의 GitHub 계정으로 포크하고 혼자 또는 그룹과 함께 연습 문제를 완료하는 것을 추천합니다: * 강의 전 퀴즈로 시작하세요. -* 강의의 소개 텍스트를 읽어보세요. -* 강의에 추가 노트북이 있다면, 이를 읽고 코드를 실행해 보세요. TensorFlow와 PyTorch 노트북이 모두 제공된다면, 하나에 집중하세요 - 좋아하는 프레임워크를 선택하세요. -* 노트북에는 코드를 약간 수정하여 실험해야 하는 도전 과제가 포함되어 있는 경우가 많습니다. +* 강의 소개 텍스트를 읽으세요. +* 강의에 추가 노트북이 있다면, 코드를 읽고 실행하며 진행하세요. TensorFlow와 PyTorch 노트북이 모두 제공된다면, 선호하는 프레임워크를 선택해 집중하세요. +* 노트북에는 종종 코드를 약간 수정하여 실험해야 하는 도전 과제가 포함되어 있습니다. * 강의 후 퀴즈를 진행하세요. -* 모듈에 실습이 첨부되어 있다면 - 과제를 완료하세요. -* [토론 게시판](https://github.com/microsoft/AI-For-Beginners/discussions)을 방문하여 "소리 내어 배우기"를 해보세요. +* 모듈에 실습이 포함되어 있다면 과제를 완료하세요. +* [토론 게시판](https://github.com/microsoft/AI-For-Beginners/discussions)을 방문하여 "소리 내어 배우기"를 실천하세요. -> 추가 학습을 위해, 다음 [Microsoft Learn](https://docs.microsoft.com/en-us/users/dmitrysoshnikov-9132/collections/31zgizg2p418yo/?WT.mc_id=academic-77998-cacaste) 모듈과 학습 경로를 따르는 것을 추천합니다. +> 추가 학습을 위해, [Microsoft Learn](https://docs.microsoft.com/en-us/users/dmitrysoshnikov-9132/collections/31zgizg2p418yo/?WT.mc_id=academic-77998-cacaste) 모듈과 학습 경로를 따라가는 것을 추천합니다. -**교사 여러분**, 이 커리큘럼을 활용하는 방법에 대한 [몇 가지 제안](/for-teachers.md)을 포함했습니다. +**교사 여러분**, 이 커리큘럼을 활용하는 방법에 대한 [몇 가지 제안](/for-teachers.md)을 포함시켰습니다. --- ## 교육학 -이 커리큘럼을 구축하면서 두 가지 교육 원칙을 선택했습니다: 실습 기반 **프로젝트 중심**과 **빈번한 퀴즈 포함**입니다. +이 커리큘럼을 개발하면서 두 가지 교육학 원칙을 선택했습니다: **프로젝트 기반**으로 실습을 보장하고 **빈번한 퀴즈**를 포함하는 것입니다. -콘텐츠가 프로젝트와 일치하도록 보장함으로써, 학생들이 더 몰입할 수 있게 하고 개념의 유지가 강화됩니다. 또한, 수업 전에 낮은 난이도의 퀴즈를 진행하면 학생이 주제 학습에 대한 의도를 설정할 수 있으며, 수업 후 두 번째 퀴즈는 추가적인 유지 효과를 보장합니다. 이 커리큘럼은 유연하고 재미있게 설계되었으며, 전체 또는 부분적으로 수강할 수 있습니다. 프로젝트는 작게 시작하여 12주 사이클이 끝날 때까지 점점 복잡해집니다. +프로젝트와 콘텐츠를 연계함으로써 학생들에게 더 흥미로운 학습 경험을 제공하고 개념의 이해와 기억력을 강화할 수 있습니다. 또한, 수업 전 낮은 부담의 퀴즈는 학생들이 주제를 학습할 의도를 설정하게 하고, 수업 후 두 번째 퀴즈는 추가적인 기억력을 보장합니다. 이 커리큘럼은 유연하고 재미있게 설계되었으며 전체 또는 일부로 진행할 수 있습니다. 프로젝트는 작게 시작하여 12주 과정이 끝날 때 점점 복잡해집니다. -> **퀴즈에 대한 주의 사항**: 모든 퀴즈는 [이 앱](https://red-field-0a6ddfd03.1.azurestaticapps.net/)에 포함되어 있으며, 총 50개의 퀴즈가 각각 세 문제로 구성되어 있습니다. 퀴즈는 강의 내에서 링크되어 있지만, 퀴즈 앱은 로컬에서도 실행할 수 있습니다. `etc/quiz-app` 폴더의 지침을 따르세요. +> **퀴즈에 대한 참고 사항**: 모든 퀴즈는 [이 앱](https://red-field-0a6ddfd03.1.azurestaticapps.net/)에 포함되어 있으며, 총 50개의 퀴즈가 각 3문제로 구성되어 있습니다. 퀴즈는 강의 내에서 링크되어 있지만, 퀴즈 앱은 로컬에서 실행할 수 있습니다. `etc/quiz-app` 폴더의 지침을 따르세요. ## 오프라인 접근 -[Docsify](https://docsify.js.org/#/)를 사용하여 이 문서를 오프라인에서 실행할 수 있습니다. 이 리포를 포크하고, [Docsify를 설치](https://docsify.js.org/#/quickstart)한 후, 이 리포의 `etc/docsify` 폴더에서 `docsify serve`를 입력하세요. 웹사이트는 로컬호스트의 포트 3000에서 제공됩니다: `localhost:3000`. 커리큘럼의 PDF는 [이 링크](../../../../../../etc/pdf/readme.pdf)에서 확인할 수 있습니다. +[Docsify](https://docsify.js.org/#/)를 사용하여 이 문서를 오프라인에서 실행할 수 있습니다. 이 저장소를 포크하고, [Docsify 설치](https://docsify.js.org/#/quickstart)를 로컬 머신에 진행한 후, 이 저장소의 루트 폴더에서 `docsify serve`를 입력하세요. 웹사이트는 localhost의 포트 3000에서 제공됩니다: `localhost:3000`. 커리큘럼의 PDF는 [이 링크](../../../../../../../../../etc/pdf/readme.pdf)에서 이용 가능합니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 있을 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역을 사용하여 발생하는 오해나 잘못된 해석에 대해 저희는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/1-Intro/README.md b/translations/ko/lessons/1-Intro/README.md index 2ef258f2..4b2a6e36 100644 --- a/translations/ko/lessons/1-Intro/README.md +++ b/translations/ko/lessons/1-Intro/README.md @@ -1,56 +1,66 @@ + > 이미지 제공: [Dmitry Soshnikov](http://soshnikov.com) -시간이 지나면서 컴퓨팅 자원이 저렴해지고 더 많은 데이터가 제공됨에 따라, 신경망 접근 방식은 컴퓨터 비전이나 음성 인식과 같은 여러 분야에서 인간과 경쟁하는 뛰어난 성능을 보여주기 시작했습니다. 지난 10년 동안, 인공지능이라는 용어는 주로 신경망의 동의어로 사용되었으며, 우리가 듣는 대부분의 인공지능 성공 사례는 신경망에 기반하고 있습니다. +시간이 지나면서 컴퓨팅 자원이 저렴해지고 더 많은 데이터가 이용 가능해지면서, 신경망 접근법이 컴퓨터 비전이나 음성 이해와 같은 여러 분야에서 인간과 경쟁하며 뛰어난 성과를 보여주기 시작했습니다. 지난 10년 동안, 인공지능이라는 용어는 대부분 신경망의 동의어로 사용되었는데, 우리가 듣는 대부분의 AI 성공 사례가 신경망을 기반으로 하고 있기 때문입니다. -체스 프로그램을 만드는 접근 방식이 어떻게 변화했는지 관찰할 수 있습니다: +체스 프로그램 개발에서 접근 방식이 어떻게 변화했는지 살펴볼 수 있습니다: -* 초기 체스 프로그램은 탐색 기반으로, 프로그램이 주어진 수의 다음 수에 대해 상대방의 가능한 수를 추정하려고 명시적으로 시도하고, 몇 수 내에 달성할 수 있는 최적의 위치를 바탕으로 최적의 수를 선택했습니다. 이로 인해 [알파-베타 가지치기](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning) 탐색 알고리즘이 개발되었습니다. -* 탐색 전략은 게임이 끝날 무렵, 가능한 수가 적은 경우에 잘 작동합니다. 그러나 게임 시작 시 탐색 공간은 방대하며, 알고리즘은 인간 플레이어 간의 기존 경기에서 학습하여 개선할 수 있습니다. 이후 실험에서는 [사례 기반 추론](https://en.wikipedia.org/wiki/Case-based_reasoning)을 사용하여 프로그램이 현재 게임의 위치와 매우 유사한 사례를 지식 기반에서 찾도록 했습니다. -* 현대 프로그램은 신경망과 [강화 학습](https://en.wikipedia.org/wiki/Reinforcement_learning)을 기반으로 하며, 프로그램은 스스로와 오랜 시간 동안 대국을 하며 자신의 실수로부터 학습합니다. 이는 인간이 체스를 배우는 방식과 유사합니다. 그러나 컴퓨터 프로그램은 훨씬 더 많은 게임을 짧은 시간에 플레이할 수 있으므로 훨씬 더 빠르게 학습할 수 있습니다. +* 초기 체스 프로그램은 검색 기반으로 작동했습니다. 프로그램은 주어진 몇 번의 다음 수에서 상대방의 가능한 움직임을 명시적으로 추정하고, 몇 번의 움직임 후에 달성할 수 있는 최적의 위치를 기반으로 최적의 움직임을 선택했습니다. 이는 [알파-베타 가지치기](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning) 검색 알고리즘 개발로 이어졌습니다. +* 검색 전략은 가능한 움직임의 수가 제한된 게임 후반부에서는 잘 작동하지만, 게임 초반부에서는 검색 공간이 방대하여 알고리즘을 인간 플레이어 간의 기존 경기에서 학습하도록 개선할 수 있습니다. 이후 실험에서는 [사례 기반 추론](https://en.wikipedia.org/wiki/Case-based_reasoning)을 사용하여 프로그램이 게임의 현재 위치와 매우 유사한 사례를 지식 기반에서 찾도록 했습니다. +* 인간 플레이어를 능가하는 현대 프로그램은 신경망과 [강화 학습](https://en.wikipedia.org/wiki/Reinforcement_learning)을 기반으로 하며, 프로그램이 오랜 시간 동안 스스로 경기를 하며 자신의 실수로부터 학습하는 방식으로 작동합니다. 이는 인간이 체스를 배우는 방식과 매우 유사하지만, 컴퓨터 프로그램은 훨씬 더 많은 경기를 훨씬 짧은 시간 안에 플레이할 수 있어 훨씬 빠르게 학습할 수 있습니다. -✅ AI가 플레이한 다른 게임에 대해 조금 조사해 보세요. +✅ AI가 플레이한 다른 게임에 대해 조사해 보세요. -유사하게, "대화 프로그램"을 만드는 접근 방식이 어떻게 변화했는지 볼 수 있습니다(튜링 테스트를 통과할 수 있는 프로그램): +마찬가지로 "대화형 프로그램"(튜링 테스트를 통과할 가능성이 있는 프로그램)을 만드는 접근 방식이 어떻게 변화했는지 볼 수 있습니다: -* 초기 프로그램인 [엘리자](https://en.wikipedia.org/wiki/ELIZA)와 같은 프로그램은 매우 간단한 문법 규칙과 입력 문장을 질문으로 재구성하는 방식에 기반했습니다. -* 현대의 어시스턴트인 Cortana, Siri, Google Assistant는 모두 음성을 텍스트로 변환하고 우리의 의도를 인식하기 위해 신경망을 사용하며, 필요한 작업을 수행하기 위해 일부 추론이나 명시적 알고리즘을 사용합니다. -* 앞으로는 완전한 신경망 기반 모델이 스스로 대화를 처리할 것으로 예상됩니다. 최근의 GPT 및 [Turing-NLG](https://turing.microsoft.com/) 신경망 가족은 이 분야에서 큰 성공을 보여주고 있습니다. +* [Eliza](https://en.wikipedia.org/wiki/ELIZA)와 같은 초기 프로그램은 매우 간단한 문법 규칙과 입력 문장을 질문으로 재구성하는 방식에 기반했습니다. +* Cortana, Siri, Google Assistant와 같은 현대적인 비서들은 음성을 텍스트로 변환하고 사용자의 의도를 인식하기 위해 신경망을 사용하는 하이브리드 시스템이며, 이후 필요한 작업을 수행하기 위해 일부 추론 또는 명시적 알고리즘을 사용합니다. +* 미래에는 대화 자체를 처리할 수 있는 완전한 신경망 기반 모델을 기대할 수 있습니다. 최근 GPT 및 [Turing-NLG](https://turing.microsoft.com/) 계열의 신경망은 이 분야에서 큰 성공을 보여주고 있습니다. > 이미지 제공: Dmitry Soshnikov, [사진](https://unsplash.com/photos/r8LmVbUKgns) 제공: [Marina Abrosimova](https://unsplash.com/@abrosimova_marina_foto), Unsplash ## 최근 AI 연구 -신경망 연구의 최근 큰 성장은 2010년경에 시작되었으며, 대규모 공개 데이터 세트가 제공되기 시작했습니다. 약 1400만 개의 주석이 달린 이미지로 구성된 [ImageNet](https://en.wikipedia.org/wiki/ImageNet)이라는 방대한 이미지 컬렉션은 [ImageNet 대규모 시각 인식 챌린지](https://image-net.org/challenges/LSVRC/)의 출발점이 되었습니다. +신경망 연구의 최근 급격한 성장은 2010년경 대규모 공개 데이터셋이 이용 가능해지면서 시작되었습니다. 약 1,400만 개의 주석이 달린 이미지를 포함한 방대한 이미지 컬렉션인 [ImageNet](https://en.wikipedia.org/wiki/ImageNet)은 [ImageNet 대규모 시각 인식 챌린지](https://image-net.org/challenges/LSVRC/)의 탄생을 이끌었습니다. ![ILSVRC 정확도](../../../../lessons/1-Intro/images/ilsvrc.gif) > 이미지 제공: [Dmitry Soshnikov](http://soshnikov.com) -2012년, [합성곱 신경망](../4-ComputerVision/07-ConvNets/README.md)이 이미지 분류에 처음 사용되었으며, 이로 인해 분류 오류가 크게 감소했습니다(거의 30%에서 16.4%로). 2015년, Microsoft Research의 ResNet 아키텍처가 [인간 수준의 정확도](https://doi.org/10.1109/ICCV.2015.123)를 달성했습니다. -그 이후로, 신경망은 많은 작업에서 매우 성공적인 성과를 보여주었습니다: +2012년, [합성곱 신경망(Convolutional Neural Networks)](../4-ComputerVision/07-ConvNets/README.md)이 처음으로 이미지 분류에 사용되었고, 이로 인해 분류 오류율이 크게 감소했습니다(약 30%에서 16.4%로). 2015년에는 Microsoft Research의 ResNet 아키텍처가 [인간 수준의 정확도](https://doi.org/10.1109/ICCV.2015.123)를 달성했습니다. + +그 이후로 신경망은 다양한 작업에서 매우 성공적인 성과를 보여주었습니다: --- -연도 | 인간 수준의 성과 ------|-------- +연도 | 인간 수준 성과 달성 +-----|------------------- 2015 | [이미지 분류](https://doi.org/10.1109/ICCV.2015.123) 2016 | [대화형 음성 인식](https://arxiv.org/abs/1610.05256) 2018 | [자동 기계 번역](https://arxiv.org/abs/1803.05567) (중국어-영어) 2020 | [이미지 캡셔닝](https://arxiv.org/abs/2009.13682) -지난 몇 년 동안 우리는 BERT와 GPT-3와 같은 대형 언어 모델에서 엄청난 성공을 목격했습니다. 이는 모델이 텍스트의 구조와 의미를 포착할 수 있도록 훈련할 수 있는 많은 일반 텍스트 데이터가 존재하기 때문입니다. 일반 텍스트 컬렉션에서 사전 훈련을 한 후, 이러한 모델을 보다 구체적인 작업에 맞게 특화할 수 있습니다. 이 과정에서 [자연어 처리](../5-NLP/README.md)에 대해 더 배우게 될 것입니다. +최근 몇 년 동안 BERT와 GPT-3와 같은 대규모 언어 모델의 엄청난 성공을 목격했습니다. 이는 주로 일반 텍스트 데이터가 풍부하게 존재하여 모델이 텍스트의 구조와 의미를 학습할 수 있도록 하고, 일반 텍스트 컬렉션에서 사전 학습한 후 특정 작업에 맞게 모델을 전문화할 수 있었기 때문입니다. 이 과정에서 [자연어 처리(Natural Language Processing)](../5-NLP/README.md)에 대해 더 자세히 배울 것입니다. ## 🚀 도전 과제 -인터넷을 탐색하여 AI가 가장 효과적으로 사용되는 곳이 어디인지 여러분의 의견을 결정해 보세요. 지도 앱, 음성 인식 서비스, 아니면 비디오 게임일까요? 시스템이 어떻게 구축되었는지 조사해 보세요. +인터넷을 탐색하며 AI가 가장 효과적으로 사용되고 있다고 생각되는 분야를 찾아보세요. 지도 앱, 음성-텍스트 변환 서비스, 비디오 게임 중 어디일까요? 해당 시스템이 어떻게 구축되었는지 조사해보세요. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/201) ## 복습 및 자기 학습 -[이 수업](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/2-history-of-ML)을 읽어보며 AI와 ML의 역사를 복습해 보세요. 그 수업이나 이 수업의 스케치 노트에서 요소 하나를 선택하여 그 진화에 영향을 미친 문화적 맥락을 이해하기 위해 더 깊이 연구해 보세요. +[이 강의](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/2-history-of-ML)를 읽으며 AI와 ML의 역사를 복습하세요. 해당 강의나 이 강의 상단의 스케치노트에서 하나의 요소를 선택하여, 그것의 진화에 영향을 미친 문화적 맥락을 더 깊이 이해하기 위해 연구해보세요. **과제**: [게임 잼](assignment.md) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 있을 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/1-Intro/assignment.md b/translations/ko/lessons/1-Intro/assignment.md index 9f5efd41..e20ff8e9 100644 --- a/translations/ko/lessons/1-Intro/assignment.md +++ b/translations/ko/lessons/1-Intro/assignment.md @@ -1,6 +1,15 @@ + # 게임 잼 -게임은 AI와 ML의 발전에 큰 영향을 받은 분야입니다. 이번 과제에서는 AI의 진화에 영향을 받은 좋아하는 게임에 대한 짧은 논문을 작성하세요. 여러 종류의 컴퓨터 처리 시스템에 영향을 받을 만큼 충분히 오래된 게임이어야 합니다. 좋은 예로는 체스나 바둑이 있지만, 폰그(pong)나 팩맨(Pac-Man)과 같은 비디오 게임도 살펴보세요. 게임의 과거, 현재 및 AI의 미래에 대해 논의하는 에세이를 작성하세요. +게임은 AI와 ML의 발전에 큰 영향을 받은 분야입니다. 이번 과제에서는 AI의 발전에 영향을 받은 좋아하는 게임에 대해 짧은 글을 작성하세요. 이 게임은 여러 종류의 컴퓨터 처리 시스템의 영향을 받을 만큼 오래된 게임이어야 합니다. 체스나 바둑 같은 좋은 예시도 있지만, 또한 Pong이나 팩맨 같은 비디오 게임도 살펴보세요. 게임의 과거, 현재, 그리고 AI가 만들어갈 미래에 대해 논의하는 에세이를 작성하세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 저희가 책임지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/2-Symbolic/README.md b/translations/ko/lessons/2-Symbolic/README.md index d2df6a32..2783b5f5 100644 --- a/translations/ko/lessons/2-Symbolic/README.md +++ b/translations/ko/lessons/2-Symbolic/README.md @@ -1,107 +1,114 @@ -# 지식 표현 및 전문가 시스템 + +# 지식 표현과 전문가 시스템 -![상징적 AI 내용 요약](../../../../translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.ko.png) +![Symbolic AI 내용 요약](../../../../translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.ko.png) -> 스케치노트 by [Tomomi Imura](https://twitter.com/girlie_mac) +> 스케치노트: [Tomomi Imura](https://twitter.com/girlie_mac) -인공지능에 대한 탐구는 인간과 유사한 방식으로 세상을 이해하기 위한 지식을 찾는 데 기반하고 있습니다. 그런데 이를 어떻게 진행할 수 있을까요? +인공지능을 추구하는 과정은 인간처럼 세상을 이해하기 위한 지식을 탐구하는 데 기반을 둡니다. 하지만 이를 어떻게 구현할 수 있을까요? ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/102) -AI의 초기 단계에서는 지능형 시스템을 만드는 데 있어 위에서 아래로 접근하는 방식(이전 수업에서 논의됨)이 인기가 있었습니다. 이 아이디어는 사람들로부터 지식을 추출하여 기계가 읽을 수 있는 형태로 만든 다음, 이를 사용해 문제를 자동으로 해결하는 것이었습니다. 이 접근 방식은 두 가지 큰 아이디어에 기반하고 있습니다: +AI 초기에는 지능형 시스템을 만드는 데 있어 상향식 접근법(이전 강의에서 논의됨)이 인기가 있었습니다. 사람들로부터 지식을 추출하여 기계가 읽을 수 있는 형태로 변환한 뒤, 이를 사용해 자동으로 문제를 해결하는 방식이었습니다. 이 접근법은 두 가지 주요 아이디어에 기반을 두고 있습니다: * 지식 표현 * 추론 ## 지식 표현 -상징적 AI에서 중요한 개념 중 하나는 **지식**입니다. 지식은 *정보*나 *데이터*와 구별되는 것이 중요합니다. 예를 들어, 책은 지식을 포함하고 있다고 말할 수 있습니다. 왜냐하면 책을 연구하고 전문가가 될 수 있기 때문입니다. 그러나 책이 포함하고 있는 것은 실제로 *데이터*라고 하며, 책을 읽고 이 데이터를 우리의 세계 모델에 통합함으로써 이 데이터를 지식으로 변환합니다. +Symbolic AI에서 중요한 개념 중 하나는 **지식**입니다. 지식을 *정보*나 *데이터*와 구분하는 것이 중요합니다. 예를 들어, 책이 지식을 포함한다고 말할 수 있지만, 사실 책이 포함하는 것은 *데이터*입니다. 책을 읽고 이 데이터를 우리의 세계 모델에 통합함으로써 데이터를 지식으로 변환합니다. -> ✅ **지식**은 우리 머릿속에 담겨 있으며 세상에 대한 이해를 나타냅니다. 이는 우리가 받는 정보를 적극적으로 통합하는 **학습** 과정을 통해 얻어집니다. +> ✅ **지식**은 우리의 머릿속에 담겨 있으며 세상에 대한 우리의 이해를 나타냅니다. 이는 우리가 받은 정보를 능동적으로 **학습**하여 우리의 세계 모델에 통합하는 과정을 통해 얻어집니다. -대부분의 경우, 우리는 지식을 엄격히 정의하지 않지만, [DIKW 피라미드](https://en.wikipedia.org/wiki/DIKW_pyramid)를 사용하여 관련된 다른 개념과 맞추어 설명합니다. 이 피라미드는 다음과 같은 개념을 포함합니다: +대부분의 경우, 우리는 지식을 엄격히 정의하지 않고 [DIKW 피라미드](https://en.wikipedia.org/wiki/DIKW_pyramid)를 사용하여 관련 개념과 정렬합니다. 이 피라미드는 다음과 같은 개념을 포함합니다: -* **데이터**는 서면 텍스트나 구술어와 같은 물리적 매체로 표현되는 것입니다. 데이터는 인간과 독립적으로 존재하며 사람들 간에 전달될 수 있습니다. -* **정보**는 우리가 머릿속에서 데이터를 해석하는 방식입니다. 예를 들어, 우리가 *컴퓨터*라는 단어를 들으면, 우리는 그것이 무엇인지에 대한 어느 정도의 이해를 가지고 있습니다. -* **지식**은 우리의 세계 모델에 통합된 정보입니다. 예를 들어, 컴퓨터가 무엇인지 배우면, 우리는 그것이 어떻게 작동하는지, 얼마나 비용이 드는지, 무엇에 사용될 수 있는지에 대한 아이디어를 가지기 시작합니다. 이 상호 연관된 개념의 네트워크가 우리의 지식을 형성합니다. -* **지혜**는 세상에 대한 우리의 이해의 또 다른 수준이며, 이는 *메타 지식*을 나타냅니다. 즉, 지식이 어떻게 그리고 언제 사용되어야 하는지에 대한 어떤 개념입니다. +* **데이터**는 물리적 매체에 표현된 것으로, 예를 들어 쓰여진 텍스트나 말로 표현된 단어입니다. 데이터는 인간과 독립적으로 존재하며 사람들 간에 전달될 수 있습니다. +* **정보**는 우리가 머릿속에서 데이터를 해석하는 방식입니다. 예를 들어, 우리가 *컴퓨터*라는 단어를 들으면, 그것이 무엇인지에 대한 이해를 갖게 됩니다. +* **지식**은 정보가 우리의 세계 모델에 통합된 것입니다. 예를 들어, 컴퓨터가 무엇인지 배우면, 그것이 어떻게 작동하는지, 비용이 얼마나 되는지, 무엇에 사용할 수 있는지에 대한 아이디어를 갖게 됩니다. 이러한 상호 연결된 개념의 네트워크가 우리의 지식을 형성합니다. +* **지혜**는 세상에 대한 우리의 이해를 한 단계 더 발전시킨 것으로, *메타 지식*을 나타냅니다. 즉, 지식을 어떻게 그리고 언제 사용해야 하는지에 대한 개념입니다. - +*이미지 [출처: Wikipedia](https://commons.wikimedia.org/w/index.php?curid=37705247), By Longlivetheux - Own work, CC BY-SA 4.0* -*이미지 [위키백과](https://commons.wikimedia.org/w/index.php?curid=37705247)에서, Longlivetheux - 본인 작업, CC BY-SA 4.0* - -따라서 **지식 표현**의 문제는 데이터를 통해 컴퓨터 내에서 지식을 효과적으로 표현할 수 있는 방법을 찾는 것입니다. 이는 스펙트럼으로 볼 수 있습니다: +따라서 **지식 표현**의 문제는 컴퓨터 내부에서 데이터를 통해 지식을 효과적으로 표현하여 자동으로 사용할 수 있도록 하는 방법을 찾는 것입니다. 이는 다음과 같은 스펙트럼으로 볼 수 있습니다: ![지식 표현 스펙트럼](../../../../translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.ko.png) -> 이미지 by [Dmitry Soshnikov](http://soshnikov.com) +> 이미지: [Dmitry Soshnikov](http://soshnikov.com) -* 왼쪽에는 컴퓨터가 효과적으로 사용할 수 있는 매우 간단한 유형의 지식 표현이 있습니다. 가장 간단한 것은 알고리즘적 표현으로, 지식이 컴퓨터 프로그램으로 표현됩니다. 그러나 이는 지식을 표현하는 최선의 방법이 아닙니다. 왜냐하면 유연하지 않기 때문입니다. 우리의 머릿속 지식은 종종 비알고리즘적입니다. -* 오른쪽에는 자연어와 같은 표현이 있습니다. 이는 가장 강력하지만 자동 추론에 사용될 수 없습니다. +* 왼쪽에는 컴퓨터가 효과적으로 사용할 수 있는 매우 간단한 유형의 지식 표현이 있습니다. 가장 간단한 것은 알고리즘으로, 지식이 컴퓨터 프로그램으로 표현됩니다. 그러나 이는 지식을 표현하는 최선의 방법은 아닙니다. 왜냐하면 유연성이 부족하기 때문입니다. 우리의 머릿속 지식은 종종 알고리즘적이지 않습니다. +* 오른쪽에는 자연어 텍스트와 같은 표현이 있습니다. 이는 가장 강력하지만 자동 추론에는 사용할 수 없습니다. -> ✅ 당신이 머릿속에서 지식을 어떻게 표현하고 이를 노트로 변환하는지 한 번 생각해 보세요. 기억 유지에 도움이 되는 특정 형식이 있나요? +> ✅ 잠시 시간을 내어 머릿속 지식을 어떻게 노트로 변환하는지 생각해보세요. 기억을 돕는 데 특정 형식이 효과적인가요? ## 컴퓨터 지식 표현 분류 -우리는 다양한 컴퓨터 지식 표현 방법을 다음과 같은 범주로 분류할 수 있습니다: +컴퓨터 지식 표현 방법을 다음과 같은 범주로 분류할 수 있습니다: -* **네트워크 표현**은 우리가 머릿속에 상호 연관된 개념의 네트워크를 가지고 있다는 사실에 기반합니다. 우리는 컴퓨터 내에서 그래프 형태로 동일한 네트워크를 재현하려고 할 수 있습니다 - 이를 **의미 네트워크**라고 합니다. +* **네트워크 표현**은 우리의 머릿속에 상호 연결된 개념의 네트워크가 있다는 사실에 기반을 둡니다. 컴퓨터 내부에서 이러한 네트워크를 그래프로 재현할 수 있습니다. 이를 **의미 네트워크**라고 합니다. -1. **객체-속성-값 삼중항** 또는 **속성-값 쌍**. 그래프는 컴퓨터 내에서 노드와 엣지의 목록으로 표현될 수 있으므로, 객체, 속성 및 값을 포함하는 삼중항 목록으로 의미 네트워크를 표현할 수 있습니다. 예를 들어, 우리는 프로그래밍 언어에 대한 다음과 같은 삼중항을 구축합니다: +1. **객체-속성-값 삼중항** 또는 **속성-값 쌍**. 그래프는 컴퓨터 내부에서 노드와 엣지의 리스트로 표현될 수 있으므로, 의미 네트워크를 객체, 속성, 값으로 구성된 삼중항 리스트로 표현할 수 있습니다. 예를 들어, 프로그래밍 언어에 대한 다음 삼중항을 만들 수 있습니다: 객체 | 속성 | 값 --------|-----------|------ +-----|------|----- Python | is | Untyped-Language Python | invented-by | Guido van Rossum Python | block-syntax | indentation Untyped-Language | doesn't have | type definitions -> ✅ 삼중항이 다른 유형의 지식을 표현하는 데 어떻게 사용될 수 있는지 생각해 보세요. +> ✅ 삼중항이 다른 유형의 지식을 표현하는 데 어떻게 사용될 수 있을지 생각해보세요. -2. **계층적 표현**은 우리가 종종 머릿속에서 객체의 계층을 만든다는 사실을 강조합니다. 예를 들어, 우리는 카나리아가 새라는 것을 알고 있으며, 모든 새는 날개가 있습니다. 우리는 카나리아의 일반적인 색상과 비행 속도에 대한 아이디어도 가지고 있습니다. +2. **계층적 표현**은 우리가 머릿속에서 객체의 계층을 자주 만든다는 사실을 강조합니다. 예를 들어, 카나리아는 새이고, 모든 새는 날개를 가지고 있다는 것을 알고 있습니다. 또한 카나리아의 일반적인 색상과 비행 속도에 대한 아이디어도 가지고 있습니다. - - **프레임 표현**은 각 객체 또는 객체 클래스가 **프레임**으로 표현되며, 이 프레임은 **슬롯**을 포함합니다. 슬롯은 가능한 기본값, 값 제한 또는 슬롯의 값을 얻기 위해 호출될 수 있는 저장 프로시저를 가질 수 있습니다. 모든 프레임은 객체 지향 프로그래밍 언어의 객체 계층과 유사한 계층을 형성합니다. + - **프레임 표현**은 각 객체 또는 객체 클래스가 **프레임**으로 표현되며, **슬롯**을 포함합니다. 슬롯은 가능한 기본값, 값 제한, 또는 슬롯 값을 얻기 위해 호출할 수 있는 저장된 절차를 가질 수 있습니다. 모든 프레임은 객체 지향 프로그래밍 언어의 객체 계층과 유사한 계층을 형성합니다. - **시나리오**는 시간에 따라 전개될 수 있는 복잡한 상황을 나타내는 특별한 종류의 프레임입니다. **Python** -슬롯 | 값 | 기본값 | 간격 | ------|-------|---------------|----------| +슬롯 | 값 | 기본값 | 범위 +-----|----|--------|----- 이름 | Python | | | Is-A | Untyped-Language | | | -변수 형식 | | CamelCase | | -프로그램 길이 | | | 5-5000 lines | +변수 케이스 | | CamelCase | | +프로그램 길이 | | | 5-5000 줄 | 블록 구문 | Indent | | | -3. **절차적 표현**은 특정 조건이 발생할 때 실행할 수 있는 행동 목록으로 지식을 표현하는 것입니다. - - 생산 규칙은 결론을 도출할 수 있게 해주는 if-then 문입니다. 예를 들어, 의사는 환자가 고열이 있거나 혈액 검사에서 C-반응성 단백질 수치가 높으면 염증이 있다고 말하는 규칙을 가질 수 있습니다. 조건 중 하나에 직면하면 우리는 염증에 대한 결론을 내릴 수 있고, 이를 추가적인 추론에 사용할 수 있습니다. - - 알고리즘은 절차적 표현의 또 다른 형태로 간주될 수 있지만, 지식 기반 시스템에서 거의 직접 사용되지 않습니다. +3. **절차적 표현**은 특정 조건이 발생할 때 실행할 수 있는 행동 목록으로 지식을 표현하는 데 기반을 둡니다. + - 생산 규칙은 결론을 도출할 수 있는 if-then 문입니다. 예를 들어, 의사는 **만약** 환자가 고열이 있거나 혈액 검사에서 C-반응성 단백질 수치가 높다면 **그는 염증이 있다**는 규칙을 가질 수 있습니다. 조건 중 하나를 만나면 염증에 대한 결론을 내릴 수 있으며, 이를 추가 추론에 사용할 수 있습니다. + - 알고리즘은 또 다른 형태의 절차적 표현으로 간주될 수 있지만, 지식 기반 시스템에서는 거의 직접적으로 사용되지 않습니다. -4. **논리**는 원래 아리스토텔레스에 의해 보편적인 인간 지식을 표현하는 방법으로 제안되었습니다. - - 수학 이론으로서의 술어 논리는 너무 풍부하여 계산할 수 없으므로, 일반적으로 Horn 절차와 같은 일부 하위 집합이 사용됩니다. - - 기술적 논리는 계층적 객체 분산 지식 표현을 나타내고 추론하는 데 사용되는 논리 시스템의 가족입니다. 예를 들어, *시맨틱 웹*과 같은 것입니다. +4. **논리**는 원래 아리스토텔레스가 인간의 보편적 지식을 표현하는 방법으로 제안했습니다. + - 술어 논리는 수학적 이론으로 너무 풍부하여 계산 가능하지 않으므로, Prolog에서 사용되는 Horn 절과 같은 일부 하위 집합이 일반적으로 사용됩니다. + - 기술 논리는 *의미 웹*과 같은 객체 계층 및 분산 지식 표현을 나타내고 추론하는 데 사용되는 논리 시스템의 가족입니다. ## 전문가 시스템 -상징적 AI의 초기 성공 중 하나는 소위 **전문가 시스템**이었습니다. 이는 특정 제한된 문제 영역에서 전문가처럼 행동하도록 설계된 컴퓨터 시스템입니다. 이들은 하나 이상의 인간 전문가로부터 추출된 **지식 베이스**를 기반으로 하며, 그 위에서 일부 추론을 수행하는 **추론 엔진**을 포함하고 있습니다. +Symbolic AI의 초기 성공 사례 중 하나는 **전문가 시스템**이었습니다. 이는 제한된 문제 영역에서 전문가로 작동하도록 설계된 컴퓨터 시스템입니다. 이 시스템은 한 명 이상의 인간 전문가로부터 추출된 **지식 기반**을 바탕으로 하며, 이를 기반으로 **추론 엔진**이 작동합니다. -![인간 아키텍처](../../../../translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.ko.png) | ![지식 기반 시스템](../../../../translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.ko.png) ----------------------------------------------|------------------------------------------------ -인간 신경 시스템의 단순화된 구조 | 지식 기반 시스템의 아키텍처 +![인간 구조](../../../../translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.ko.png) | ![지식 기반 시스템](../../../../translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.ko.png) +----------------------------------|---------------------------------------- +인간 신경 시스템의 단순화된 구조 | 지식 기반 시스템의 구조 -전문가 시스템은 **단기 기억**과 **장기 기억**을 포함하는 인간의 추론 시스템처럼 구성됩니다. 유사하게, 지식 기반 시스템에서는 다음과 같은 구성 요소를 구별합니다: +전문가 시스템은 인간의 추론 시스템과 유사하게 구축됩니다. 인간의 추론 시스템은 **단기 기억**과 **장기 기억**을 포함합니다. 마찬가지로, 지식 기반 시스템에서는 다음 구성 요소를 구분합니다: -* **문제 기억**: 현재 해결되고 있는 문제에 대한 지식을 포함합니다. 즉, 환자의 체온이나 혈압, 염증 여부 등의 정보입니다. 이 지식은 **정적 지식**이라고도 불리며, 문제에 대한 현재 우리가 알고 있는 내용을 스냅샷처럼 담고 있습니다 - 즉, *문제 상태*입니다. -* **지식 베이스**: 문제 영역에 대한 장기 지식을 나타냅니다. 이는 인간 전문가로부터 수동으로 추출되며, 상담마다 변하지 않습니다. 문제 상태에서 다른 상태로 이동할 수 있게 해주기 때문에 **동적 지식**이라고도 불립니다. -* **추론 엔진**: 문제 상태 공간에서 검색 프로세스를 조정하며, 필요할 때 사용자에게 질문을 합니다. 또한 각 상태에 적용할 올바른 규칙을 찾는 역할도 합니다. +* **문제 기억**: 현재 해결 중인 문제에 대한 지식을 포함합니다. 예를 들어, 환자의 체온이나 혈압, 염증 여부 등이 포함됩니다. 이 지식은 **정적 지식**이라고도 하며, 현재 문제에 대해 알고 있는 내용을 스냅샷으로 포함합니다. 이를 *문제 상태*라고 합니다. +* **지식 기반**: 문제 영역에 대한 장기적인 지식을 나타냅니다. 이는 인간 전문가로부터 수동으로 추출되며, 상담마다 변경되지 않습니다. 이는 한 문제 상태에서 다른 상태로 이동할 수 있도록 하므로 **동적 지식**이라고도 합니다. +* **추론 엔진**: 문제 상태 공간에서 검색 과정을 조율하며, 필요할 때 사용자에게 질문을 합니다. 또한 각 상태에 적용할 적절한 규칙을 찾는 역할을 합니다. -예를 들어, 동물의 신체적 특성에 따라 동물을 결정하는 다음의 전문가 시스템을 고려해 보겠습니다: +예를 들어, 동물의 신체적 특성을 기반으로 동물을 결정하는 전문가 시스템을 고려해봅시다: ![AND-OR 트리](../../../../translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.ko.png) -> 이미지 by [Dmitry Soshnikov](http://soshnikov.com) +> 이미지: [Dmitry Soshnikov](http://soshnikov.com) -이 다이어그램은 **AND-OR 트리**라고 불리며, 생산 규칙 집합의 그래픽 표현입니다. 트리를 그리는 것은 전문가로부터 지식을 추출하는 초기 단계에서 유용합니다. 컴퓨터 내에서 지식을 표현하기 위해 규칙을 사용하는 것이 더 편리합니다: +이 다이어그램은 **AND-OR 트리**라고 하며, 생산 규칙 집합의 그래픽 표현입니다. 전문가로부터 지식을 추출하는 초기 단계에서 트리를 그리는 것이 유용합니다. 컴퓨터 내부에서 지식을 표현하기 위해 규칙을 사용하는 것이 더 편리합니다: ``` IF the animal eats meat @@ -112,59 +119,57 @@ OR (animal has sharp teeth THEN the animal is a carnivore ``` -각 조건의 왼쪽과 규칙의 행동은 본질적으로 객체-속성-값(OAV) 삼중항입니다. **작동 기억**은 현재 해결되고 있는 문제에 해당하는 OAV 삼중항의 집합을 포함합니다. **규칙 엔진**은 조건이 만족되는 규칙을 찾아 적용하며, 작업 기억에 또 다른 삼중항을 추가합니다. +각 규칙의 왼쪽 조건과 행동이 본질적으로 객체-속성-값(OAV) 삼중항이라는 점을 알 수 있습니다. **작업 메모리**는 현재 해결 중인 문제에 해당하는 OAV 삼중항 집합을 포함합니다. **규칙 엔진**은 조건이 만족된 규칙을 찾아 이를 적용하여 작업 메모리에 새로운 삼중항을 추가합니다. -> ✅ 당신이 좋아하는 주제에 대한 자신의 AND-OR 트리를 작성해 보세요! +> ✅ 관심 있는 주제로 AND-OR 트리를 직접 작성해보세요! -### 순방향 추론 대 역방향 추론 +### 순방향 추론 vs. 역방향 추론 -위에서 설명한 과정은 **순방향 추론**이라고 불립니다. 이는 작업 기억에 있는 문제에 대한 초기 데이터를 시작으로 하여 다음의 추론 루프를 실행합니다: +위에서 설명한 과정은 **순방향 추론**이라고 합니다. 이는 작업 메모리에 문제에 대한 초기 데이터로 시작하여 다음 추론 루프를 실행합니다: -1. 목표 속성이 작업 기억에 존재하면 - 멈추고 결과를 제공합니다. -2. 현재 조건이 만족되는 모든 규칙을 찾습니다 - **충돌 집합** 규칙을 얻습니다. -3. **충돌 해결**을 수행합니다 - 이번 단계에서 실행될 규칙 하나를 선택합니다. 충돌 해결 전략은 다음과 같을 수 있습니다: - - 지식 베이스에서 첫 번째 적용 가능한 규칙 선택 - - 무작위 규칙 선택 - - *더 구체적인* 규칙 선택, 즉 "왼쪽" (LHS)에서 가장 많은 조건을 충족하는 규칙 선택 -4. 선택한 규칙을 적용하고 문제 상태에 새로운 지식을 삽입합니다. -5. 1단계로 돌아가 반복합니다. +1. 목표 속성이 작업 메모리에 있으면 중지하고 결과를 제공합니다. +2. 현재 조건이 만족된 모든 규칙을 찾아 **충돌 집합**을 얻습니다. +3. **충돌 해결**을 수행하여 이 단계에서 실행할 규칙 하나를 선택합니다. 충돌 해결 전략은 다음과 같을 수 있습니다: + - 지식 기반에서 적용 가능한 첫 번째 규칙 선택 + - 임의의 규칙 선택 + - *더 구체적인* 규칙 선택, 즉 "왼쪽 조건(LHS)"에서 가장 많은 조건을 충족하는 규칙 +4. 선택된 규칙을 적용하고 문제 상태에 새로운 지식을 삽입합니다. +5. 1단계부터 반복합니다. -그러나 경우에 따라 우리는 문제에 대한 빈 지식에서 시작하고 결론에 도달하는 데 도움이 되는 질문을 하고 싶을 수 있습니다. 예를 들어, 의료 진단을 수행할 때, 우리는 환자를 진단하기 시작하기 전에 모든 의료 분석을 미리 수행하지 않습니다. 우리는 결정을 내려야 할 때 분석을 수행하고 싶어합니다. +하지만 경우에 따라 문제에 대한 초기 지식이 없는 상태에서 질문을 통해 결론에 도달하고자 할 수 있습니다. 예를 들어, 의료 진단을 할 때, 환자를 진단하기 전에 모든 의료 분석을 미리 수행하지 않습니다. 대신, 결정을 내려야 할 때 분석을 수행하고자 합니다. -이 과정은 **역방향 추론**을 사용하여 모델링할 수 있습니다. 이는 **목표** - 우리가 찾고자 하는 속성 값에 의해 주도됩니다: +이 과정은 **역방향 추론**을 사용하여 모델링할 수 있습니다. 이는 우리가 찾고자 하는 속성 값인 **목표**에 의해 구동됩니다: -1. 목표의 값을 제공할 수 있는 모든 규칙을 선택합니다 (즉, 목표가 RHS ("오른쪽")에 있는 경우) - 충돌 집합 -1. 이 속성에 대한 규칙이 없거나 사용자가 값을 요청해야 한다는 규칙이 있다면 - 요청하고, 그렇지 않으면: -1. 충돌 해결 전략을 사용하여 *가설*로 사용할 하나의 규칙을 선택합니다 - 우리는 이를 증명하려고 합니다. -1. 규칙의 LHS에 있는 모든 속성에 대해 이 과정을 반복하며, 이를 목표로 증명하려고 합니다. -1. 어느 시점에서 과정이 실패하면 - 3단계에서 다른 규칙을 사용합니다. +1. 목표 값을 제공할 수 있는 모든 규칙을 선택합니다(즉, 목표가 오른쪽 조건(RHS)에 있는 규칙) - 충돌 집합 +1. 이 속성에 대한 규칙이 없거나 사용자에게 값을 묻는 규칙이 있으면 값을 묻습니다. 그렇지 않으면: +1. 충돌 해결 전략을 사용하여 *가설*로 사용할 규칙 하나를 선택합니다 - 이를 증명하려고 시도합니다. +1. 규칙의 왼쪽 조건(LHS)에 있는 모든 속성에 대해 반복적으로 과정을 수행하여 이를 목표로 증명하려고 시도합니다. +1. 어느 시점에서든 과정이 실패하면 3단계에서 다른 규칙을 사용합니다. -> ✅ 어떤 상황에서 순방향 추론이 더 적합합니까? 역방향 추론은 어떻습니까? +> ✅ 순방향 추론이 더 적합한 상황은 어떤 경우인가요? 역방향 추론은 어떤 경우에 적합할까요? ### 전문가 시스템 구현 전문가 시스템은 다양한 도구를 사용하여 구현할 수 있습니다: -* 어떤 고급 프로그래밍 언어로 직접 프로그래밍하는 것. 이는 최선의 아이디어가 아닙니다. 왜냐하면 지식 기반 시스템의 주요 장점은 지식이 추론과 분리되어 있으며, 문제 영역의 전문가가 추론 과정의 세부 사항을 이해하지 않고도 규칙을 작성할 수 있어야 하기 때문입니다. -* **전문가 시스템 셸**을 사용하는 것, 즉 어떤 지식 표현 언어를 사용하여 지식으로 채워지도록 특별히 설계된 시스템입니다. +* 고급 프로그래밍 언어로 직접 프로그래밍하기. 이는 최선의 방법은 아닙니다. 왜냐하면 지식 기반 시스템의 주요 장점은 지식이 추론과 분리되어 있으며, 문제 영역 전문가가 추론 과정의 세부 사항을 이해하지 않고도 규칙을 작성할 수 있어야 하기 때문입니다. +* **전문가 시스템 셸** 사용, 즉 지식 표현 언어를 사용하여 지식을 채우도록 설계된 시스템. ## ✍️ 연습: 동물 추론 -[Animals.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb)를 참조하여 순방향 및 역방향 추론 전문가 시스템 구현의 예를 확인하세요. +[Animals.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb)를 참조하여 순방향 및 역방향 추론 전문가 시스템 구현 예제를 확인하세요. +> **참고**: 이 예시는 비교적 간단하며, 전문가 시스템이 어떻게 보이는지에 대한 아이디어를 제공합니다. 이러한 시스템을 실제로 만들기 시작하면, 규칙이 약 200개 이상에 도달했을 때 비로소 *지능적인* 행동을 일부 관찰할 수 있습니다. 어느 순간 규칙이 너무 복잡해져서 모든 것을 기억하기 어려워질 수 있으며, 이 시점에서 시스템이 왜 특정 결정을 내리는지 궁금해질 수 있습니다. 하지만 지식 기반 시스템의 중요한 특징은 어떤 결정이 내려졌는지 항상 *정확히 설명*할 수 있다는 점입니다. +## 온톨로지와 시맨틱 웹 -> **참고**: 이 예시는 다소 간단하며, 전문가 시스템이 어떻게 생겼는지를 보여줍니다. 이러한 시스템을 만들기 시작하면 약 200개 이상의 규칙에 도달할 때까지는 시스템에서 *지능적인* 행동을 인지할 수 없습니다. 규칙이 너무 복잡해져서 모든 것을 기억하기 어려워지며, 이 시점에서 시스템이 특정 결정을 내리는 이유에 대해 궁금해질 수 있습니다. 그러나 지식 기반 시스템의 중요한 특성은 모든 결정이 어떻게 이루어졌는지를 항상 *설명*할 수 있다는 것입니다. +20세기 말, 인터넷 자원을 지식 표현을 통해 주석 처리하여 매우 특정한 쿼리에 부합하는 자원을 찾을 수 있도록 하는 이니셔티브가 시작되었습니다. 이 움직임은 **시맨틱 웹**이라 불렸으며, 다음과 같은 여러 개념에 의존했습니다: -## 온톨로지 및 시맨틱 웹 +- **[설명 논리](https://en.wikipedia.org/wiki/Description_logic)**(DL)을 기반으로 한 특별한 지식 표현. 이는 프레임 지식 표현과 유사하며, 객체와 속성의 계층 구조를 구축하지만, 형식적 논리 의미론과 추론을 포함합니다. DL은 표현력과 추론의 알고리즘적 복잡성 사이에서 균형을 이루는 여러 종류가 있습니다. +- 모든 개념이 글로벌 URI 식별자로 표현되는 분산 지식 표현. 이를 통해 인터넷 전반에 걸친 지식 계층 구조를 생성할 수 있습니다. +- 지식 설명을 위한 XML 기반 언어의 집합: RDF(Resource Description Framework), RDFS(RDF Schema), OWL(Ontology Web Language). -20세기 말, 지식 표현을 사용하여 인터넷 자원을 주석 처리하여 매우 특정한 쿼리에 해당하는 자원을 찾을 수 있도록 하는 이니셔티브가 있었습니다. 이 움직임은 **시맨틱 웹**이라고 불리며, 여러 개념에 의존했습니다: +시맨틱 웹의 핵심 개념은 **온톨로지**입니다. 이는 문제 영역을 형식적 지식 표현을 사용하여 명시적으로 지정하는 것을 의미합니다. 가장 간단한 온톨로지는 문제 영역의 객체 계층 구조일 수 있지만, 더 복잡한 온톨로지는 추론에 사용할 수 있는 규칙을 포함합니다. -- **[설명 논리](https://en.wikipedia.org/wiki/Description_logic)** (DL)에 기반한 특별한 지식 표현. 이는 속성을 가진 객체의 계층을 구축하는 점에서 프레임 지식 표현과 유사하지만, 공식적인 논리적 의미와 추론을 가집니다. 표현력과 추론의 알고리즘적 복잡성 간의 균형을 이루는 DL의 전체 가족이 있습니다. -- 모든 개념이 전역 URI 식별자로 표현되는 분산 지식 표현, 이는 인터넷을 가로지르는 지식 계층을 생성할 수 있게 합니다. -- 지식 설명을 위한 XML 기반 언어의 가족: RDF (자원 설명 프레임워크), RDFS (RDF 스키마), OWL (온톨로지 웹 언어). - -시맨틱 웹의 핵심 개념은 **온톨로지**입니다. 이는 공식적인 지식 표현을 사용하여 문제 영역에 대한 명시적인 사양을 의미합니다. 가장 간단한 온톨로지는 문제 영역의 객체 계층일 수 있지만, 더 복잡한 온톨로지는 추론에 사용할 수 있는 규칙을 포함할 것입니다. - -시맨틱 웹에서는 모든 표현이 삼중항을 기반으로 합니다. 각 객체와 각 관계는 URI로 고유하게 식별됩니다. 예를 들어, 이 AI 커리큘럼이 2022년 1월 1일에 Dmitry Soshnikov에 의해 개발되었다는 사실을 진술하고자 할 때, 사용할 수 있는 삼중항은 다음과 같습니다: +시맨틱 웹에서는 모든 표현이 삼중항(triplet)을 기반으로 합니다. 각 객체와 각 관계는 URI로 고유하게 식별됩니다. 예를 들어, 이 AI 커리큘럼이 Dmitry Soshnikov에 의해 2022년 1월 1일에 개발되었다는 사실을 기술하려면 다음과 같은 삼중항을 사용할 수 있습니다: @@ -173,17 +178,17 @@ http://github.com/microsoft/ai-for-beginners http://www.example.com/terms/creati http://github.com/microsoft/ai-for-beginners http://purl.org/dc/elements/1.1/creator http://soshnikov.com ``` -> ✅ 여기서 `http://www.example.com/terms/creation-date` and `http://purl.org/dc/elements/1.1/creator`는 *창조자*와 *창조 날짜*의 개념을 표현하기 위해 잘 알려져 있고 보편적으로 수용된 URI입니다. +> ✅ 여기서 `http://www.example.com/terms/creation-date`와 `http://purl.org/dc/elements/1.1/creator`는 *창작자*와 *창작 날짜* 개념을 표현하기 위해 널리 인정받는 URI입니다. -더 복잡한 경우, 창조자 목록을 정의하고자 할 경우, 우리는 RDF에 정의된 일부 데이터 구조를 사용할 수 있습니다. +더 복잡한 경우, 창작자 목록을 정의하려면 RDF에서 정의된 데이터 구조를 사용할 수 있습니다. -> 위의 다이어그램은 [Dmitry Soshnikov](http://soshnikov.com)에 의해 제작되었습니다. +> 위 다이어그램은 [Dmitry Soshnikov](http://soshnikov.com)가 제작한 것입니다. -시맨틱 웹 구축의 진행은 검색 엔진과 자연어 처리 기술의 성공으로 다소 지연되었습니다. 이러한 기술들은 텍스트에서 구조화된 데이터를 추출할 수 있게 해줍니다. 그러나 일부 분야에서는 여전히 온톨로지와 지식 기반을 유지하기 위한 상당한 노력이 있습니다. 주목할 만한 몇 가지 프로젝트는 다음과 같습니다: +시맨틱 웹 구축의 진전은 검색 엔진과 자연어 처리 기술의 성공으로 인해 다소 지연되었습니다. 이러한 기술은 텍스트에서 구조화된 데이터를 추출할 수 있게 합니다. 그러나 일부 영역에서는 여전히 온톨로지와 지식 기반을 유지하려는 상당한 노력이 이루어지고 있습니다. 주목할 만한 몇 가지 프로젝트는 다음과 같습니다: -* [WikiData](https://wikidata.org/)는 위키피디아와 관련된 기계 읽기 가능한 지식 기반의 모음입니다. 대부분의 데이터는 위키피디아의 *정보 상자*에서 채굴된 구조화된 콘텐츠입니다. 당신은 [SPARQL](https://query.wikidata.org/)이라는 시맨틱 웹을 위한 특별한 쿼리 언어로 위키데이터를 쿼리할 수 있습니다. 여기 인간 사이에서 가장 인기 있는 눈 색깔을 표시하는 샘플 쿼리가 있습니다: +* [WikiData](https://wikidata.org/)는 Wikipedia와 연계된 기계 가독성 지식 기반의 모음입니다. 대부분의 데이터는 Wikipedia 페이지 내부의 구조화된 콘텐츠인 *InfoBoxes*에서 추출됩니다. SPARQL이라는 시맨틱 웹을 위한 특별한 쿼리 언어를 사용하여 [WikiData를 쿼리](https://query.wikidata.org/)할 수 있습니다. 다음은 인간의 가장 인기 있는 눈 색깔을 표시하는 샘플 쿼리입니다: ```sparql #defaultView:BubbleChart @@ -199,7 +204,45 @@ GROUP BY ?eyeColorLabel * [DBpedia](https://www.dbpedia.org/)는 WikiData와 유사한 또 다른 노력입니다. -> ✅ 자신의 온톨로지를 구축하거나 기존 온톨로지를 열어 +> ✅ 온톨로지를 직접 구축하거나 기존 온톨로지를 열어보고 싶다면 [Protégé](https://protege.stanford.edu/)라는 훌륭한 시각적 온톨로지 편집기가 있습니다. 다운로드하거나 온라인으로 사용해 보세요. + + + +*Web Protégé 편집기가 Romanov Family 온톨로지로 열려 있음. Dmitry Soshnikov 제공 스크린샷* + +## ✍️ 연습: 가족 온톨로지 + +[FamilyOntology.ipynb](https://github.com/Ezana135/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb)를 참조하여 시맨틱 웹 기술을 사용해 가족 관계를 추론하는 예제를 확인하세요. 일반적인 GEDCOM 형식으로 표현된 가족 트리와 가족 관계의 온톨로지를 사용하여 주어진 개인 집합에 대한 모든 가족 관계의 그래프를 구축합니다. + +## Microsoft Concept Graph + +대부분의 경우, 온톨로지는 신중하게 수작업으로 작성됩니다. 그러나 자연어 텍스트와 같은 비구조화된 데이터에서 온톨로지를 **추출**하는 것도 가능합니다. + +Microsoft Research에서 시도한 한 사례는 [Microsoft Concept Graph](https://blogs.microsoft.com/ai/microsoft-researchers-release-graph-that-helps-machines-conceptualize/?WT.mc_id=academic-77998-cacaste)를 결과물로 남겼습니다. + +이는 `is-a` 상속 관계를 사용하여 그룹화된 대규모 엔티티 모음입니다. 이를 통해 "Microsoft는 무엇인가?"와 같은 질문에 답할 수 있습니다. 예를 들어 "확률 0.87로 회사이며, 확률 0.75로 브랜드"라는 답변을 제공합니다. + +이 그래프는 REST API로 사용하거나 모든 엔티티 쌍을 나열한 대규모 다운로드 가능한 텍스트 파일로 제공됩니다. + +## ✍️ 연습: 개념 그래프 + +[MSConceptGraph.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) 노트북을 사용하여 Microsoft Concept Graph를 활용해 뉴스 기사를 여러 카테고리로 그룹화하는 방법을 확인해 보세요. + +## 결론 + +오늘날 AI는 종종 *머신 러닝* 또는 *신경망*의 동의어로 간주됩니다. 그러나 인간은 명시적 추론을 수행하기도 하며, 이는 현재 신경망이 처리하지 못하는 영역입니다. 실제 프로젝트에서는 설명이 필요하거나 시스템의 동작을 제어된 방식으로 수정해야 하는 작업을 수행하기 위해 여전히 명시적 추론이 사용됩니다. + +## 🚀 도전 과제 + +이 강의와 관련된 Family Ontology 노트북에서 다른 가족 관계를 실험할 기회가 있습니다. 가족 트리에서 사람들 간의 새로운 연결을 발견해 보세요. + +## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/202) + +## 복습 및 자기 학습 + +인터넷에서 인간이 지식을 정량화하고 코드화하려고 시도한 영역을 조사해 보세요. Bloom의 Taxonomy를 살펴보고, 인간이 세상을 이해하려고 노력했던 역사를 되짚어 보세요. Linnaeus가 생물의 분류 체계를 만든 작업과 Dmitri Mendeleev가 화학 원소를 설명하고 그룹화하는 방법을 만든 작업을 탐구해 보세요. 어떤 흥미로운 사례를 발견할 수 있나요? + +**과제**: [온톨로지 구축하기](assignment.md) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 저희는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/2-Symbolic/assignment.md b/translations/ko/lessons/2-Symbolic/assignment.md index eb495446..ce55e4a2 100644 --- a/translations/ko/lessons/2-Symbolic/assignment.md +++ b/translations/ko/lessons/2-Symbolic/assignment.md @@ -1,6 +1,15 @@ + # 온톨로지 구축하기 -지식 기반을 구축하는 것은 특정 주제에 대한 사실을 나타내는 모델을 분류하는 것입니다. 사람, 장소 또는 사물과 같은 주제를 선택한 후 해당 주제의 모델을 구축하세요. 이 수업에서 설명하는 몇 가지 기법과 모델 구축 전략을 활용하세요. 예를 들어, 가구, 조명 등을 포함한 거실의 온톨로지를 만드는 것이 될 수 있습니다. 거실은 주방과 어떻게 다를까요? 욕실은요? 어떻게 거실이 식당이 아닌지 알 수 있을까요? [Protégé](https://protege.stanford.edu/)를 사용하여 온톨로지를 구축하세요. +지식 기반을 구축하는 것은 특정 주제에 대한 사실을 나타내는 모델을 분류하는 작업입니다. 사람, 장소, 사물과 같은 주제를 선택한 후 해당 주제의 모델을 만들어 보세요. 이 강의에서 설명된 기술과 모델 구축 전략을 활용해 보세요. 예를 들어, 거실에 있는 가구, 조명 등을 포함한 온톨로지를 만드는 것이 하나의 사례가 될 수 있습니다. 거실은 주방이나 욕실과 어떻게 다를까요? 어떻게 거실인지, 식당이 아닌지 알 수 있을까요? 온톨로지를 구축하기 위해 [Protégé](https://protege.stanford.edu/)를 사용해 보세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/3-NeuralNetworks/03-Perceptron/README.md b/translations/ko/lessons/3-NeuralNetworks/03-Perceptron/README.md index d576302c..360c7a8a 100644 --- a/translations/ko/lessons/3-NeuralNetworks/03-Perceptron/README.md +++ b/translations/ko/lessons/3-NeuralNetworks/03-Perceptron/README.md @@ -1,52 +1,61 @@ + # 신경망 소개: 퍼셉트론 ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/103) -현대 신경망과 유사한 것을 구현하려는 첫 번째 시도 중 하나는 1957년 코넬 항공 연구소의 프랭크 로젠블라트에 의해 이루어졌습니다. 이는 삼각형, 사각형 및 원과 같은 원시 기하학적 도형을 인식하도록 설계된 "Mark-1"이라는 하드웨어 구현이었습니다. +현대 신경망과 유사한 것을 구현하려는 최초의 시도 중 하나는 1957년 Cornell Aeronautical Laboratory의 Frank Rosenblatt에 의해 이루어졌습니다. 이는 "Mark-1"이라는 하드웨어 구현으로, 삼각형, 사각형, 원과 같은 기본적인 기하학적 도형을 인식하도록 설계되었습니다. | | | |--------------|-----------| -|프랭크 로젠블라트 | Mark 1 퍼셉트론| +|Frank Rosenblatt | The Mark 1 Perceptron| -> 이미지 [출처: 위키백과](https://en.wikipedia.org/wiki/Perceptron) +> 이미지 출처: [위키백과](https://en.wikipedia.org/wiki/Perceptron) -입력 이미지는 20x20 포토셀 배열로 표현되었으며, 따라서 신경망은 400개의 입력과 하나의 이진 출력을 가졌습니다. 간단한 네트워크는 하나의 뉴런, 즉 **임계값 논리 장치**로 구성되었습니다. 신경망의 가중치는 훈련 단계에서 수동 조정이 필요한 전위차계처럼 작용했습니다. +입력 이미지는 20x20 광전지 배열로 표현되었으며, 신경망은 400개의 입력과 하나의 이진 출력으로 구성되었습니다. 간단한 네트워크는 하나의 뉴런, 즉 **임계값 논리 유닛**으로 구성되었습니다. 신경망 가중치는 훈련 단계에서 수동으로 조정해야 하는 가변 저항기처럼 작동했습니다. -> ✅ 전위차계는 사용자가 회로의 저항을 조정할 수 있게 해주는 장치입니다. +> ✅ 가변 저항기는 회로의 저항을 사용자가 조정할 수 있도록 하는 장치입니다. -> 뉴욕 타임즈는 그 당시 퍼셉트론에 대해 다음과 같이 썼습니다: *[해군]이 기대하는 전자 컴퓨터의 배아로, 스스로 걷고, 말하고, 보고, 쓰고, 재생산하며, 자신의 존재를 인식할 수 있을 것으로 보인다.* +> 당시 뉴욕 타임즈는 퍼셉트론에 대해 이렇게 썼습니다: *[해군이] 걷고, 말하고, 보고, 쓰고, 스스로를 복제하며 자신의 존재를 인식할 수 있을 것으로 기대하는 전자 컴퓨터의 배아.* ## 퍼셉트론 모델 -모델에 N개의 특성이 있다고 가정할 경우, 입력 벡터는 크기 N의 벡터가 됩니다. 퍼셉트론은 **이진 분류** 모델로, 즉 두 클래스의 입력 데이터를 구분할 수 있습니다. 각 입력 벡터 x에 대해 퍼셉트론의 출력은 클래스에 따라 +1 또는 -1이 될 것이라고 가정합니다. 출력은 다음 공식을 사용하여 계산됩니다: +우리 모델에 N개의 특징이 있다고 가정해 봅시다. 이 경우 입력 벡터는 크기가 N인 벡터가 됩니다. 퍼셉트론은 **이진 분류** 모델로, 입력 데이터의 두 클래스를 구분할 수 있습니다. 각 입력 벡터 x에 대해 퍼셉트론의 출력이 클래스에 따라 +1 또는 -1이 될 것이라고 가정합니다. 출력은 다음 공식을 사용하여 계산됩니다: y(x) = f(wTx) -여기서 f는 단계 활성화 함수입니다. +여기서 f는 계단 활성화 함수입니다. ## 퍼셉트론 훈련 -퍼셉트론을 훈련시키기 위해서는 대부분의 값을 올바르게 분류하는 가중치 벡터 w를 찾아야 합니다. 즉, 가장 작은 **오류**를 결과로 만들어야 합니다. 이 오류 E는 다음과 같은 방식으로 **퍼셉트론 기준**에 의해 정의됩니다: +퍼셉트론을 훈련시키기 위해서는 대부분의 값을 올바르게 분류하는 가중치 벡터 w를 찾아야 합니다. 즉, **오류**를 최소화해야 합니다. 이 오류 E는 **퍼셉트론 기준**에 따라 다음과 같이 정의됩니다: E(w) = -∑wTxiti 여기서: -* 잘못된 분류를 초래하는 훈련 데이터 포인트 i에 대해 합산합니다. -* xi는 입력 데이터이고, ti는 각각 음성과 양성 예제에 대해 -1 또는 +1입니다. +* 합은 잘못된 분류를 초래하는 훈련 데이터 포인트 i에 대해 계산됩니다. +* xi는 입력 데이터이고, ti는 각각 음수와 양수 예제에 대해 -1 또는 +1입니다. -이 기준은 가중치 w의 함수로 간주되며, 이를 최소화해야 합니다. 종종 **경량 하강법**이라는 방법이 사용되며, 여기서 우리는 일부 초기 가중치 w(0)로 시작하고, 각 단계에서 다음 공식을 따라 가중치를 업데이트합니다: +이 기준은 가중치 w의 함수로 간주되며, 이를 최소화해야 합니다. 종종 **경사 하강법**이라는 방법이 사용되며, 초기 가중치 w(0)로 시작한 후 각 단계에서 다음 공식을 사용하여 가중치를 업데이트합니다: w(t+1) = w(t) - η∇E(w) -여기서 η는 이른바 **학습률**이며, ∇E(w)는 E의 **기울기**를 나타냅니다. 기울기를 계산한 후에는 다음과 같은 결과를 얻습니다: +여기서 η는 **학습률**이고, ∇E(w)는 E의 **기울기**를 나타냅니다. 기울기를 계산한 후에는 다음과 같은 결과를 얻습니다: w(t+1) = w(t) + ∑ηxiti -Python에서 알고리즘은 다음과 같습니다: +Python에서의 알고리즘은 다음과 같습니다: ```python def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): @@ -70,26 +79,26 @@ def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): ## 결론 -이번 수업에서는 이진 분류 모델인 퍼셉트론에 대해 배우고, 가중치 벡터를 사용하여 이를 훈련시키는 방법을 배웠습니다. +이번 강의에서는 이진 분류 모델인 퍼셉트론과 가중치 벡터를 사용하여 이를 훈련시키는 방법에 대해 배웠습니다. ## 🚀 도전 과제 -자신만의 퍼셉트론을 만들어 보고 싶다면, [Microsoft Learn의 이 실습](https://docs.microsoft.com/en-us/azure/machine-learning/component-reference/two-class-averaged-perceptron?WT.mc_id=academic-77998-cacaste)을 시도해 보세요. 이 실습은 [Azure ML 디자이너](https://docs.microsoft.com/en-us/azure/machine-learning/concept-designer?WT.mc_id=academic-77998-cacaste)를 사용합니다. +직접 퍼셉트론을 만들어 보고 싶다면 [Microsoft Learn의 실습](https://docs.microsoft.com/en-us/azure/machine-learning/component-reference/two-class-averaged-perceptron?WT.mc_id=academic-77998-cacaste)을 시도해 보세요. 이 실습에서는 [Azure ML 디자이너](https://docs.microsoft.com/en-us/azure/machine-learning/concept-designer?WT.mc_id=academic-77998-cacaste)를 사용합니다. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/203) ## 복습 및 자기 학습 -퍼셉트론을 사용하여 장난감 문제와 실제 문제를 해결하는 방법을 보려면, [퍼셉트론](../../../../../lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) 노트북으로 가서 계속 학습하세요. +퍼셉트론을 사용하여 간단한 문제와 실제 문제를 해결하는 방법을 확인하고 계속 학습하려면 [Perceptron](../../../../../lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) 노트북을 참조하세요. 퍼셉트론에 대한 흥미로운 [기사](https://towardsdatascience.com/what-is-a-perceptron-basics-of-neural-networks-c4cfea20c590)도 있습니다. ## [과제](lab/README.md) -이번 수업에서는 이진 분류 작업을 위한 퍼셉트론을 구현하고, 이를 사용하여 두 개의 손글씨 숫자를 분류했습니다. 이 실습에서는 주어진 이미지에 가장 적합한 숫자가 무엇인지 완전히 해결하는 문제를 해결해야 합니다. +이번 강의에서는 이진 분류 작업을 위한 퍼셉트론을 구현하고 이를 사용하여 두 개의 손글씨 숫자를 분류했습니다. 이번 실습에서는 숫자 분류 문제를 완전히 해결해야 합니다. 즉, 주어진 이미지에 가장 적합한 숫자를 결정해야 합니다. * [지침](lab/README.md) * [노트북](../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우, 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md b/translations/ko/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md index 4112c39c..2cae6677 100644 --- a/translations/ko/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md +++ b/translations/ko/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md @@ -1,22 +1,31 @@ -# 다중 클래스 분류와 퍼셉트론 + +# 퍼셉트론을 이용한 다중 클래스 분류 -[초보자를 위한 AI 커리큘럼](https://github.com/microsoft/ai-for-beginners)에서의 실습 과제입니다. +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서 제공하는 실습 과제입니다. ## 과제 -이번 수업에서 개발한 MNIST 손글씨 숫자의 이진 분류 코드를 사용하여, 모든 숫자를 인식할 수 있는 다중 클래스 분류기를 만드세요. 학습 및 테스트 데이터셋에서 분류 정확도를 계산하고, 혼동 행렬을 출력하세요. +이 강의에서 개발한 MNIST 손글씨 숫자의 이진 분류 코드를 사용하여 모든 숫자를 인식할 수 있는 다중 클래스 분류기를 만드세요. 학습 및 테스트 데이터셋에서 분류 정확도를 계산하고 혼동 행렬(confusion matrix)을 출력하세요. ## 힌트 -1. 각 숫자에 대해 "이 숫자 vs. 다른 모든 숫자"의 이진 분류기를 위한 데이터셋을 만드세요. -1. 이진 분류를 위해 10개의 서로 다른 퍼셉트론을 훈련하세요 (각 숫자마다 하나씩). -1. 입력 숫자를 분류할 함수를 정의하세요. +1. 각 숫자에 대해 "이 숫자 vs. 다른 모든 숫자"의 이진 분류 데이터셋을 만드세요. +1. 이진 분류를 위해 10개의 서로 다른 퍼셉트론을 학습시키세요 (각 숫자마다 하나씩). +1. 입력 숫자를 분류할 수 있는 함수를 정의하세요. -> **힌트**: 10개의 퍼셉트론의 가중치를 하나의 행렬로 결합하면, 하나의 행렬 곱셈으로 모든 10개의 퍼셉트론을 입력 숫자에 적용할 수 있습니다. 가장 가능성이 높은 숫자는 `argmax` 연산을 출력에 적용하여 찾을 수 있습니다. +> **힌트**: 10개의 퍼셉트론의 가중치를 하나의 행렬로 결합하면, 입력 숫자에 대해 한 번의 행렬 곱셈으로 모든 퍼셉트론을 적용할 수 있습니다. 가장 가능성이 높은 숫자는 출력값에 `argmax` 연산을 적용하여 찾을 수 있습니다. -## 노트북 시작하기 +## 시작 노트북 -[PerceptronMultiClass.ipynb](../../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) 파일을 열어 실습을 시작하세요. +[PerceptronMultiClass.ipynb](../../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb)를 열어 실습을 시작하세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/3-NeuralNetworks/04-OwnFramework/README.md b/translations/ko/lessons/3-NeuralNetworks/04-OwnFramework/README.md index db5c1cb8..b2c80dad 100644 --- a/translations/ko/lessons/3-NeuralNetworks/04-OwnFramework/README.md +++ b/translations/ko/lessons/3-NeuralNetworks/04-OwnFramework/README.md @@ -1,89 +1,98 @@ + # 신경망 소개: 다층 퍼셉트론 이전 섹션에서는 가장 간단한 신경망 모델인 단층 퍼셉트론, 즉 선형 이진 분류 모델에 대해 배웠습니다. -이번 섹션에서는 이 모델을 보다 유연한 프레임워크로 확장하여 다음과 같은 작업을 수행할 수 있도록 합니다: +이번 섹션에서는 이 모델을 확장하여 더 유연한 프레임워크를 구축할 것입니다. 이를 통해 다음을 수행할 수 있습니다: -* 이진 분류 외에 **다중 클래스 분류** 수행 -* 분류 외에 **회귀 문제** 해결 -* 선형적으로 분리할 수 없는 클래스 분리 +* **다중 클래스 분류**를 이진 분류 외에도 수행 +* 분류 외에도 **회귀 문제** 해결 +* 선형적으로 분리되지 않는 클래스 분리 -또한, 다양한 신경망 아키텍처를 구성할 수 있는 자체 모듈형 프레임워크를 Python으로 개발할 것입니다. +또한, 다양한 신경망 아키텍처를 구성할 수 있는 Python 기반의 모듈형 프레임워크를 개발할 것입니다. ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/104) -## 머신러닝의 정형화 +## 머신러닝의 공식화 -머신러닝 문제를 정형화하는 것부터 시작해 보겠습니다. 훈련 데이터셋 **X**와 레이블 **Y**가 있다고 가정하고, 가장 정확한 예측을 할 수 있는 모델 *f*를 구축해야 합니다. 예측의 품질은 **손실 함수** ℒ로 측정됩니다. 다음의 손실 함수들이 자주 사용됩니다: +먼저 머신러닝 문제를 공식화해 봅시다. 훈련 데이터셋 **X**와 레이블 **Y**가 주어졌다고 가정하고, 가장 정확한 예측을 수행할 모델 *f*를 구축해야 합니다. 예측의 품질은 **손실 함수** ℒ로 측정됩니다. 다음과 같은 손실 함수가 자주 사용됩니다: -* 회귀 문제의 경우, 숫자를 예측해야 할 때는 **절대 오차** ∑i|f(x(i))-y(i)| 또는 **제곱 오차** ∑i(f(x(i))-y(i))2를 사용할 수 있습니다. -* 분류의 경우, **0-1 손실** (모델의 **정확도**와 본질적으로 동일) 또는 **로지스틱 손실**을 사용합니다. +* 숫자를 예측해야 하는 회귀 문제에서는 **절대 오차** ∑i|f(x(i))-y(i)| 또는 **제곱 오차** ∑i(f(x(i))-y(i))2를 사용할 수 있습니다. +* 분류 문제에서는 **0-1 손실**(모델의 **정확도**와 사실상 동일) 또는 **로지스틱 손실**을 사용합니다. -단층 퍼셉트론의 경우, 함수 *f*는 선형 함수 *f(x)=wx+b*로 정의되었습니다 (여기서 *w*는 가중치 행렬, *x*는 입력 특성의 벡터, *b*는 바이어스 벡터입니다). 다양한 신경망 아키텍처의 경우, 이 함수는 더 복잡한 형태를 취할 수 있습니다. +단층 퍼셉트론의 경우, 함수 *f*는 선형 함수 *f(x)=wx+b*로 정의되었습니다(여기서 *w*는 가중치 행렬, *x*는 입력 특징 벡터, *b*는 바이어스 벡터). 다양한 신경망 아키텍처에서는 이 함수가 더 복잡한 형태를 가질 수 있습니다. -> 분류의 경우, 네트워크 출력으로 해당 클래스의 확률을 얻는 것이 종종 바람직합니다. 임의의 숫자를 확률로 변환하기 위해 (예: 출력을 정규화하기 위해) 우리는 종종 **소프트맥스** 함수 σ를 사용하며, 함수 *f*는 *f(x)=σ(wx+b)*로 변환됩니다. +> 분류의 경우, 네트워크 출력으로 해당 클래스의 확률을 얻는 것이 바람직할 때가 많습니다. 임의의 숫자를 확률로 변환하기 위해(예: 출력을 정규화하기 위해) **소프트맥스** 함수 σ를 자주 사용하며, 함수 *f*는 *f(x)=σ(wx+b)*가 됩니다. -위의 *f* 정의에서 *w*와 *b*는 **매개변수** θ=⟨*w,b*⟩라고 불립니다. 데이터셋 ⟨**X**,**Y**⟩가 주어지면, 우리는 매개변수 θ의 함수로 전체 데이터셋에 대한 전체 오류를 계산할 수 있습니다. +위의 *f* 정의에서, *w*와 *b*는 **파라미터** θ=⟨*w,b*⟩라고 불립니다. 데이터셋 ⟨**X**,**Y**⟩가 주어지면, 전체 데이터셋에 대한 전체 오류를 파라미터 θ의 함수로 계산할 수 있습니다. -> ✅ **신경망 훈련의 목표는 매개변수 θ를 변화시켜 오류를 최소화하는 것입니다.** +> ✅ **신경망 훈련의 목표는 파라미터 θ를 조정하여 오류를 최소화하는 것입니다** -## 경량 경량화 최적화 +## 경사 하강법 최적화 -함수 최적화에 대한 잘 알려진 방법이 **경량 경량화**입니다. 아이디어는 손실 함수에 대한 매개변수의 도함수(다차원 경우 **기울기**)를 계산하고, 오류가 감소하도록 매개변수를 변화시키는 것입니다. 이는 다음과 같이 정형화할 수 있습니다: +함수 최적화의 잘 알려진 방법 중 하나는 **경사 하강법**입니다. 이 방법은 손실 함수의 파라미터에 대한 미분(다차원 경우에는 **그래디언트**라고 함)을 계산하고, 오류가 감소하도록 파라미터를 조정하는 아이디어를 기반으로 합니다. 이를 다음과 같이 공식화할 수 있습니다: -* 매개변수를 무작위 값 w(0), b(0)로 초기화합니다. -* 다음 단계를 여러 번 반복합니다: +* 파라미터를 임의의 값으로 초기화 w(0), b(0) +* 다음 단계를 여러 번 반복: - w(i+1) = w(i)-η∂ℒ/∂w - b(i+1) = b(i)-η∂ℒ/∂b -훈련 중에 최적화 단계는 전체 데이터셋을 고려하여 계산되어야 합니다 (손실은 모든 훈련 샘플을 통해 합산하여 계산된다는 점을 기억하세요). 그러나 실제로 우리는 **미니배치**라고 불리는 데이터셋의 작은 부분을 가져와 데이터의 하위 집합을 기반으로 기울기를 계산합니다. 매번 하위 집합이 무작위로 선택되기 때문에, 이러한 방법을 **확률적 경량 경량화** (SGD)라고 부릅니다. +훈련 중에는 전체 데이터셋을 고려하여 최적화 단계를 계산해야 합니다(손실은 모든 훈련 샘플을 통해 합산하여 계산됨을 기억하세요). 하지만 실제로는 데이터셋의 작은 부분인 **미니배치**를 사용하여 데이터를 기반으로 그래디언트를 계산합니다. 매번 무작위로 부분 집합을 선택하기 때문에 이러한 방법을 **확률적 경사 하강법**(SGD)이라고 합니다. ## 다층 퍼셉트론과 역전파 -위에서 본 단층 네트워크는 선형적으로 분리 가능한 클래스를 분류할 수 있습니다. 보다 풍부한 모델을 구축하기 위해 네트워크의 여러 층을 결합할 수 있습니다. 수학적으로 이는 함수 *f*가 더 복잡한 형태를 가지며 여러 단계로 계산된다는 것을 의미합니다: +위에서 본 단층 네트워크는 선형적으로 분리 가능한 클래스를 분류할 수 있습니다. 더 풍부한 모델을 구축하기 위해 네트워크의 여러 층을 결합할 수 있습니다. 수학적으로 이는 함수 *f*가 더 복잡한 형태를 가지며 여러 단계로 계산된다는 것을 의미합니다: * z1=w1x+b1 * z2=w2α(z1)+b2 * f = σ(z2) -여기서, α는 **비선형 활성화 함수**, σ는 소프트맥스 함수이며, 매개변수 θ=<*w1,b1,w2,b2*>입니다. +여기서 α는 **비선형 활성화 함수**, σ는 소프트맥스 함수, 파라미터는 θ=<*w1,b1,w2,b2*>입니다. -경량 경량화 알고리즘은 동일하게 유지되지만, 기울기를 계산하는 것이 더 어려워질 것입니다. 연쇄 미분 법칙을 고려하면 다음과 같이 도함수를 계산할 수 있습니다: +경사 하강법 알고리즘은 동일하게 유지되지만, 그래디언트를 계산하는 것이 더 어려워집니다. 체인 미분 법칙을 사용하면 다음과 같이 미분을 계산할 수 있습니다: * ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2) * ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1) -> ✅ 연쇄 미분 법칙은 손실 함수의 도함수를 매개변수에 대해 계산하는 데 사용됩니다. +> ✅ 체인 미분 법칙은 손실 함수의 파라미터에 대한 미분을 계산하는 데 사용됩니다. -모든 표현의 가장 왼쪽 부분이 동일하므로, 우리는 손실 함수에서 시작하여 계산 그래프를 "역방향"으로 따라가며 도함수를 효과적으로 계산할 수 있습니다. 따라서 다층 퍼셉트론 훈련 방법을 **역전파** 또는 '백프롭'이라고 부릅니다. +위 표현에서 가장 왼쪽 부분은 동일하므로, 손실 함수에서 시작하여 계산 그래프를 "역방향"으로 따라가며 미분을 효과적으로 계산할 수 있습니다. 따라서 다층 퍼셉트론을 훈련하는 방법을 **역전파** 또는 '백프롭'이라고 합니다. compute graph > TODO: 이미지 출처 -> ✅ 우리는 노트북 예제에서 역전파를 훨씬 더 자세히 다룰 것입니다. +> ✅ 역전파는 노트북 예제에서 훨씬 더 자세히 다룰 것입니다. ## 결론 -이번 수업에서는 자체 신경망 라이브러리를 구축하고, 이를 사용하여 간단한 2차원 분류 작업을 수행했습니다. +이번 강의에서는 자체 신경망 라이브러리를 구축하고, 이를 사용하여 간단한 이차원 분류 작업을 수행했습니다. ## 🚀 도전 과제 -동봉된 노트북에서 다층 퍼셉트론을 구축하고 훈련하기 위한 자체 프레임워크를 구현할 것입니다. 현대 신경망이 어떻게 작동하는지 자세히 살펴볼 수 있습니다. +첨부된 노트북에서 다층 퍼셉트론을 구축하고 훈련하는 자체 프레임워크를 구현할 것입니다. 이를 통해 현대 신경망이 어떻게 작동하는지 자세히 확인할 수 있습니다. -[OwnFramework](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) 노트북으로 진행하여 작업을 수행하세요. +[OwnFramework](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) 노트북으로 이동하여 작업을 진행하세요. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/204) ## 복습 및 자기 학습 -역전파는 AI와 ML에서 사용되는 일반적인 알고리즘으로, [자세히 공부할 가치가 있습니다](https://wikipedia.org/wiki/Backpropagation). +역전파는 AI와 ML에서 자주 사용되는 알고리즘으로, [더 자세히](https://wikipedia.org/wiki/Backpropagation) 공부할 가치가 있습니다. ## [과제](lab/README.md) -이번 실습에서는 이번 수업에서 구축한 프레임워크를 사용하여 MNIST 손글씨 숫자 분류 문제를 해결해야 합니다. +이번 실습에서는 이번 강의에서 구축한 프레임워크를 사용하여 MNIST 손글씨 숫자 분류 문제를 해결해야 합니다. * [지침](lab/README.md) * [노트북](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md b/translations/ko/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md index e8fa899b..64ac5fb0 100644 --- a/translations/ko/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md +++ b/translations/ko/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md @@ -1,23 +1,32 @@ -# 우리 프레임워크를 이용한 MNIST 분류 + +# MNIST 분류: 우리만의 프레임워크 사용하기 -[초보자를 위한 AI 커리큘럼](https://github.com/microsoft/ai-for-beginners)에서의 실습 과제입니다. +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서 제공하는 실습 과제입니다. ## 과제 -1-, 2-, 3층 퍼셉트론을 사용하여 MNIST 손글씨 숫자 분류 문제를 해결하세요. 수업에서 개발한 신경망 프레임워크를 사용하십시오. +1-, 2-, 3-층 퍼셉트론을 사용하여 MNIST 손글씨 숫자 분류 문제를 해결하세요. 수업에서 개발한 신경망 프레임워크를 사용합니다. -## 노트북 시작하기 +## 시작 노트북 [MyFW_MNIST.ipynb](../../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb)를 열어 실습을 시작하세요. -## 질문들 +## 질문 -이번 실습의 결과로 다음 질문에 답해 보세요: +이 실습을 통해 다음 질문에 답해보세요: - 층 간 활성화 함수가 네트워크 성능에 영향을 미치나요? -- 이 작업을 위해 2층 또는 3층 네트워크가 필요한가요? -- 네트워크 훈련 중에 어떤 문제를 경험했나요? 특히 층 수가 증가할 때. -- 훈련 중 네트워크의 가중치는 어떻게 변하나요? 가중치의 최대 절대값과 에포크를 그래프로 그려 관계를 이해할 수 있습니다. +- 이 과제를 해결하기 위해 2층 또는 3층 네트워크가 필요한가요? +- 네트워크를 훈련시키는 동안 문제가 발생했나요? 특히 층 수가 증가했을 때. +- 훈련 중 네트워크의 가중치는 어떻게 변화하나요? 가중치의 최대 절대값을 에포크별로 그래프로 그려 관계를 이해해보세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 저희가 책임지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/3-NeuralNetworks/05-Frameworks/README.md b/translations/ko/lessons/3-NeuralNetworks/05-Frameworks/README.md index 10f1db5b..4a8b0b8b 100644 --- a/translations/ko/lessons/3-NeuralNetworks/05-Frameworks/README.md +++ b/translations/ko/lessons/3-NeuralNetworks/05-Frameworks/README.md @@ -1,53 +1,62 @@ + # 신경망 프레임워크 -우리가 이미 배운 바와 같이, 신경망을 효율적으로 학습시키기 위해서는 두 가지를 해야 합니다: +이미 배운 것처럼, 신경망을 효율적으로 학습시키기 위해서는 두 가지를 수행해야 합니다: -* 텐서에서 연산을 수행해야 합니다. 예를 들어, 곱셈, 덧셈, 그리고 시그모이드나 소프트맥스와 같은 함수 계산을 해야 합니다. -* 경량화 최적화를 수행하기 위해 모든 표현의 기울기를 계산해야 합니다. +* 텐서를 다루는 작업, 예를 들어 곱셈, 덧셈, 그리고 sigmoid나 softmax 같은 함수 계산 +* 모든 표현식의 기울기를 계산하여 경사 하강법 최적화를 수행 ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/105) -`numpy` 라이브러리는 첫 번째 작업을 수행할 수 있지만, 기울기를 계산하기 위한 메커니즘이 필요합니다. 우리가 이전 섹션에서 개발한 [우리의 프레임워크](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb)에서는 `backward` 메서드 내부에 모든 미분 함수를 수동으로 프로그래밍해야 했습니다. 이는 역전파를 수행합니다. 이상적으로는, 프레임워크가 우리가 정의할 수 있는 *모든 표현*의 기울기를 계산할 수 있는 기회를 제공해야 합니다. +`numpy` 라이브러리가 첫 번째 작업을 수행할 수 있지만, 기울기를 계산할 메커니즘이 필요합니다. 이전 섹션에서 개발한 [우리의 프레임워크](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb)에서는 `backward` 메서드 내부에서 모든 미분 함수를 수동으로 프로그래밍해야 했습니다. 이 메서드는 역전파를 수행합니다. 이상적으로는 프레임워크가 우리가 정의할 수 있는 *어떤 표현식*의 기울기를 계산할 수 있는 기능을 제공해야 합니다. -또한 중요한 것은 GPU나 [TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit)와 같은 다른 전문 계산 장치에서 계산을 수행할 수 있어야 한다는 것입니다. 심층 신경망 학습은 *많은* 계산을 요구하며, 이러한 계산을 GPU에서 병렬화할 수 있는 것이 매우 중요합니다. +또 다른 중요한 점은 GPU나 [TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit)와 같은 특수 계산 장치에서 계산을 수행할 수 있는 능력입니다. 딥 신경망 학습은 *매우 많은* 계산을 요구하며, 이러한 계산을 GPU에서 병렬화하는 것이 매우 중요합니다. -> ✅ '병렬화'라는 용어는 여러 장치에 계산을 분산하는 것을 의미합니다. +> ✅ '병렬화'라는 용어는 계산을 여러 장치에 분배하는 것을 의미합니다. -현재 가장 인기 있는 두 가지 신경망 프레임워크는 [TensorFlow](http://TensorFlow.org)와 [PyTorch](https://pytorch.org/)입니다. 두 프레임워크 모두 CPU와 GPU에서 텐서를 다루기 위한 저수준 API를 제공합니다. 저수준 API 위에는 각각 [Keras](https://keras.io/)와 [PyTorch Lightning](https://pytorchlightning.ai/)이라는 고수준 API도 있습니다. +현재 가장 인기 있는 신경망 프레임워크는 [TensorFlow](http://TensorFlow.org)와 [PyTorch](https://pytorch.org/)입니다. 두 프레임워크 모두 CPU와 GPU에서 텐서를 다룰 수 있는 저수준 API를 제공합니다. 저수준 API 외에도 [Keras](https://keras.io/)와 [PyTorch Lightning](https://pytorchlightning.ai/)라는 고수준 API도 있습니다. 저수준 API | [TensorFlow](http://TensorFlow.org) | [PyTorch](https://pytorch.org/) --------------|-------------------------------------|-------------------------------- 고수준 API | [Keras](https://keras.io/) | [PyTorch Lightning](https://pytorchlightning.ai/) -**두 프레임워크의 저수준 API**는 소위 **계산 그래프**를 구축할 수 있게 해줍니다. 이 그래프는 주어진 입력 매개변수로 출력(보통 손실 함수)을 계산하는 방법을 정의하며, GPU에서 계산할 수 있도록 푸시할 수 있습니다. 이 계산 그래프를 미분하고 기울기를 계산하는 함수가 있으며, 이는 모델 매개변수를 최적화하는 데 사용될 수 있습니다. +**저수준 API**는 **계산 그래프**를 구축할 수 있게 해줍니다. 이 그래프는 주어진 입력 매개변수로 출력(일반적으로 손실 함수)을 계산하는 방법을 정의하며, GPU가 사용 가능한 경우 GPU에서 계산을 수행할 수 있습니다. 이 계산 그래프를 미분하고 기울기를 계산하는 함수가 있으며, 이를 통해 모델 매개변수를 최적화할 수 있습니다. -**고수준 API**는 신경망을 **레이어의 시퀀스**로 간주하며, 대부분의 신경망을 훨씬 쉽게 구성할 수 있게 해줍니다. 모델 학습은 보통 데이터를 준비한 다음 `fit` 함수를 호출하여 작업을 수행하는 것을 요구합니다. +**고수준 API**는 신경망을 **레이어의 순서**로 간주하며, 대부분의 신경망을 쉽게 구성할 수 있게 해줍니다. 모델 학습은 일반적으로 데이터를 준비한 후 `fit` 함수를 호출하여 수행됩니다. -고수준 API를 사용하면 많은 세부사항에 대해 걱정하지 않고 전형적인 신경망을 매우 빠르게 구축할 수 있습니다. 동시에 저수준 API는 학습 과정에 대한 더 많은 제어를 제공하므로, 새로운 신경망 아키텍처를 다룰 때 연구에서 많이 사용됩니다. +고수준 API는 일반적인 신경망을 매우 빠르게 구성할 수 있도록 하며, 많은 세부 사항에 대해 걱정할 필요가 없습니다. 반면, 저수준 API는 학습 과정에 대한 더 많은 제어를 제공하므로 새로운 신경망 아키텍처를 다룰 때 연구에서 많이 사용됩니다. -두 API를 함께 사용할 수 있다는 점도 중요합니다. 예를 들어, 저수준 API를 사용하여 자신의 네트워크 레이어 아키텍처를 개발한 다음, 고수준 API로 구성하고 학습한 더 큰 네트워크 내에서 사용할 수 있습니다. 또는 고수준 API를 사용하여 레이어의 시퀀스로 네트워크를 정의한 후, 자신의 저수준 학습 루프를 사용하여 최적화를 수행할 수 있습니다. 두 API는 동일한 기본 개념을 사용하며, 잘 작동하도록 설계되었습니다. +또한 두 API를 함께 사용할 수 있다는 점을 이해하는 것이 중요합니다. 예를 들어, 저수준 API를 사용하여 자체 네트워크 레이어 아키텍처를 개발한 후, 이를 고수준 API로 구성된 더 큰 네트워크 내에서 사용할 수 있습니다. 또는 레이어의 순서로 고수준 API를 사용하여 네트워크를 정의한 후, 자체 저수준 학습 루프를 사용하여 최적화를 수행할 수 있습니다. 두 API는 동일한 기본 개념을 사용하며, 서로 잘 작동하도록 설계되었습니다. ## 학습 -이 과정에서는 PyTorch와 TensorFlow 모두에 대한 대부분의 내용을 제공합니다. 선호하는 프레임워크를 선택하고 해당 노트북만 진행할 수 있습니다. 어떤 프레임워크를 선택할지 확실하지 않은 경우, **PyTorch vs. TensorFlow**에 대한 인터넷의 논의를 읽어보세요. 두 프레임워크를 모두 살펴보면 더 나은 이해를 얻을 수 있습니다. +이 과정에서는 PyTorch와 TensorFlow 모두에 대한 콘텐츠를 제공합니다. 선호하는 프레임워크를 선택하고 해당 노트북만 학습하면 됩니다. 어떤 프레임워크를 선택해야 할지 모르겠다면, **PyTorch vs. TensorFlow**에 대한 인터넷 논의를 읽어보세요. 두 프레임워크를 살펴보며 더 나은 이해를 얻을 수도 있습니다. -가능한 경우 단순함을 위해 고수준 API를 사용할 것입니다. 그러나 신경망이 어떻게 작동하는지를 기초부터 이해하는 것이 중요하다고 생각하므로, 처음에는 저수준 API와 텐서를 사용하여 작업을 시작합니다. 하지만 빠르게 진행하고 싶고 이러한 세부 사항을 배우는 데 많은 시간을 소비하고 싶지 않다면, 해당 내용을 건너뛰고 고수준 API 노트북으로 바로 들어갈 수 있습니다. +가능한 경우, 간단함을 위해 고수준 API를 사용할 것입니다. 하지만 신경망이 기초부터 어떻게 작동하는지 이해하는 것이 중요하다고 믿기 때문에, 처음에는 저수준 API와 텐서를 다루는 작업부터 시작합니다. 그러나 빠르게 시작하고 이러한 세부 사항을 배우는 데 많은 시간을 들이고 싶지 않다면, 이를 건너뛰고 고수준 API 노트북으로 바로 넘어갈 수 있습니다. ## ✍️ 연습: 프레임워크 -다음 노트북에서 학습을 계속하세요: +다음 노트북에서 학습을 이어가세요: -저수준 API | [TensorFlow+Keras 노트북](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [PyTorch](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) +저수준 API | [TensorFlow+Keras Notebook](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [PyTorch](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) --------------|-------------------------------------|-------------------------------- 고수준 API | [Keras](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) | *PyTorch Lightning* -프레임워크를 마스터한 후, 과적합의 개념을 요약해 보겠습니다. +프레임워크를 숙달한 후, 과적합 개념을 다시 살펴보겠습니다. # 과적합 과적합은 머신러닝에서 매우 중요한 개념이며, 이를 올바르게 이해하는 것이 매우 중요합니다! -다음 문제를 고려해 보세요: 5개의 점(아래 그래프의 `x`로 표시)을 근사하는 문제입니다: +다음 문제를 고려해보세요. 5개의 점(`x`로 표시된 그래프)을 근사화하는 문제입니다: ![linear](../../../../../translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.ko.jpg) | ![overfit](../../../../../translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.ko.jpg) -------------------------|-------------------------- @@ -55,69 +64,69 @@ 훈련 오류 = 5.3 | 훈련 오류 = 0 검증 오류 = 5.1 | 검증 오류 = 20 -* 왼쪽에서는 좋은 직선 근사를 볼 수 있습니다. 매개변수의 수가 적절하기 때문에, 모델은 점 분포의 아이디어를 올바르게 이해합니다. -* 오른쪽에서는 모델이 너무 강력합니다. 점이 5개뿐인데 모델이 7개의 매개변수를 가지고 있어 모든 점을 통과하도록 조정할 수 있습니다. 이로 인해 훈련 오류는 0이 됩니다. 그러나 이는 모델이 데이터 뒤에 있는 올바른 패턴을 이해하지 못하게 하여 검증 오류가 매우 높아집니다. +* 왼쪽에서는 적절한 직선 근사가 보입니다. 매개변수의 수가 적절하기 때문에 모델이 점 분포의 패턴을 올바르게 이해합니다. +* 오른쪽에서는 모델이 너무 강력합니다. 점이 5개뿐이고 모델에 7개의 매개변수가 있기 때문에 모든 점을 통과하도록 조정할 수 있습니다. 이로 인해 훈련 오류는 0이 되지만, 데이터의 올바른 패턴을 이해하지 못하게 되어 검증 오류가 매우 높아집니다. -모델의 풍부함(매개변수의 수)과 훈련 샘플의 수 사이에서 올바른 균형을 찾는 것이 매우 중요합니다. +모델의 풍부함(매개변수 수)과 훈련 샘플 수 사이의 적절한 균형을 맞추는 것이 매우 중요합니다. ## 과적합이 발생하는 이유 -* 훈련 데이터가 충분하지 않음 -* 모델이 너무 강력함 -* 입력 데이터에 노이즈가 너무 많음 + * 훈련 데이터 부족 + * 너무 강력한 모델 + * 입력 데이터에 너무 많은 노이즈 ## 과적합을 감지하는 방법 -위 그래프에서 볼 수 있듯이, 과적합은 매우 낮은 훈련 오류와 높은 검증 오류로 감지할 수 있습니다. 일반적으로 훈련 중에는 훈련 오류와 검증 오류가 모두 감소하기 시작하며, 그 후 어느 시점에서 검증 오류가 더 이상 감소하지 않고 증가하기 시작할 수 있습니다. 이는 과적합의 신호이며, 이 시점에서 훈련을 중단해야 할지도 모른다는 지표입니다(또는 최소한 모델의 스냅샷을 만들어야 합니다). +위 그래프에서 볼 수 있듯이, 과적합은 매우 낮은 훈련 오류와 높은 검증 오류로 감지할 수 있습니다. 일반적으로 훈련 중에는 훈련 오류와 검증 오류가 모두 감소하다가, 어느 시점에서 검증 오류가 감소를 멈추고 증가하기 시작할 수 있습니다. 이는 과적합의 신호이며, 이 시점에서 훈련을 중단하거나 모델의 스냅샷을 저장해야 할 가능성이 있습니다. ![overfitting](../../../../../translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.ko.png) ## 과적합을 방지하는 방법 -과적합이 발생하는 것을 볼 수 있다면, 다음 중 하나를 수행할 수 있습니다: +과적합이 발생하는 것을 확인하면 다음 중 하나를 수행할 수 있습니다: -* 훈련 데이터의 양을 늘리기 -* 모델의 복잡성 줄이기 -* [정규화 기법](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md) 사용하기, 예를 들어 [드롭아웃](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md#Dropout)과 같은 기법을 나중에 고려할 것입니다. + * 훈련 데이터 양을 늘리기 + * 모델의 복잡성을 줄이기 + * [Dropout](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md#Dropout)과 같은 [정규화 기법](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md)을 사용하기 (이후에 다룰 예정) -## 과적합과 편향-분산 균형 +## 과적합과 편향-분산 트레이드오프 -과적합은 통계에서 더 일반적인 문제인 [편향-분산 균형](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff)의 경우입니다. 모델의 가능한 오류 원인을 고려하면 두 가지 유형의 오류를 볼 수 있습니다: +과적합은 통계에서 [편향-분산 트레이드오프](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff)라는 더 일반적인 문제의 사례입니다. 모델의 오류 원인을 고려하면 두 가지 유형의 오류를 볼 수 있습니다: -* **편향 오류**는 알고리즘이 훈련 데이터 간의 관계를 올바르게 포착하지 못해서 발생합니다. 이는 모델이 충분히 강력하지 않기 때문에 발생할 수 있습니다 (**과소적합**). -* **분산 오류**는 모델이 입력 데이터의 노이즈를 근사화하는 대신 의미 있는 관계를 포착하는 데서 발생합니다 (**과적합**). +* **편향 오류**는 알고리즘이 훈련 데이터 간의 관계를 올바르게 캡처하지 못해 발생합니다. 이는 모델이 충분히 강력하지 않은 경우(**과소적합**)에 발생할 수 있습니다. +* **분산 오류**는 모델이 입력 데이터의 노이즈를 의미 있는 관계 대신 근사화하려고 할 때 발생합니다(**과적합**). -훈련 중에는 편향 오류가 감소하고(모델이 데이터를 근사화하는 방법을 학습하면서), 분산 오류는 증가합니다. 과적합을 방지하기 위해 훈련을 중단하는 것이 중요합니다 - 수동으로(과적합을 감지할 때) 또는 자동으로(정규화를 도입하여) 중단할 수 있습니다. +훈련 중에는 편향 오류가 감소하고(모델이 데이터를 근사화하는 법을 배우면서), 분산 오류가 증가합니다. 과적합을 방지하기 위해 훈련을 중단해야 합니다 - 수동으로(과적합을 감지했을 때) 또는 자동으로(정규화를 도입하여). ## 결론 -이번 수업에서는 TensorFlow와 PyTorch라는 두 가지 가장 인기 있는 AI 프레임워크에 대한 다양한 API의 차이점에 대해 배웠습니다. 또한 매우 중요한 주제인 과적합에 대해서도 배웠습니다. +이 강의에서는 TensorFlow와 PyTorch라는 두 가지 인기 있는 AI 프레임워크의 다양한 API 차이점을 배웠습니다. 또한 과적합이라는 매우 중요한 주제에 대해 배웠습니다. -## 🚀 도전 +## 🚀 도전 과제 -동반 노트북에서 하단에 '작업'을 찾을 수 있습니다; 노트북을 통해 작업을 완료하세요. +첨부된 노트북에서 '작업' 섹션을 찾을 수 있습니다. 노트북을 학습하고 작업을 완료하세요. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/205) -## 복습 및 자가 학습 +## 복습 및 자기 학습 -다음 주제에 대해 연구해 보세요: +다음 주제에 대해 연구해보세요: - TensorFlow - PyTorch - 과적합 -다음 질문을 스스로에게 해보세요: +다음 질문을 스스로에게 던져보세요: - TensorFlow와 PyTorch의 차이점은 무엇인가요? - 과적합과 과소적합의 차이점은 무엇인가요? ## [과제](lab/README.md) -이번 실습에서는 PyTorch 또는 TensorFlow를 사용하여 단일 및 다층 완전 연결 네트워크를 이용한 두 가지 분류 문제를 해결해야 합니다. +이 실습에서는 PyTorch 또는 TensorFlow를 사용하여 단일 및 다층 완전 연결 네트워크를 통해 두 가지 분류 문제를 해결해야 합니다. * [지침](lab/README.md) * [노트북](../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 저희가 책임지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md b/translations/ko/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md index f32d0764..f01e5132 100644 --- a/translations/ko/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md +++ b/translations/ko/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md @@ -1,19 +1,28 @@ -# PyTorch/TensorFlow를 이용한 분류 + +# PyTorch/TensorFlow를 사용한 분류 -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서의 실습 과제입니다. +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서 제공하는 실습 과제입니다. ## 과제 -PyTorch 또는 TensorFlow를 사용하여 단일 및 다층 완전 연결 네트워크를 이용해 두 가지 분류 문제를 해결하세요: +PyTorch 또는 TensorFlow를 사용하여 단층 및 다층 완전 연결 네트워크를 활용해 두 가지 분류 문제를 해결하세요: -1. **[아이리스 분류](https://en.wikipedia.org/wiki/Iris_flower_data_set)** 문제 - 고전적인 기계 학습으로 처리할 수 있는 표 형식의 입력 데이터를 가진 문제의 예입니다. 목표는 4개의 수치 매개변수를 기반으로 아이리스를 3개의 클래스 중 하나로 분류하는 것입니다. -2. **MNIST** 손글씨 숫자 분류 문제로, 이전에 다룬 적이 있습니다. +1. **[아이리스 분류](https://en.wikipedia.org/wiki/Iris_flower_data_set)** 문제 - 표 형식의 입력 데이터를 사용하는 문제로, 전통적인 머신러닝으로도 처리할 수 있습니다. 목표는 4개의 숫자형 매개변수를 기반으로 아이리스를 3개의 클래스로 분류하는 것입니다. +1. **MNIST** 손글씨 숫자 분류 문제 - 이전에 다뤘던 문제입니다. 최고의 정확도를 달성하기 위해 다양한 네트워크 아키텍처를 시도해 보세요. -## 노트북 시작하기 +## 시작 노트북 [LabFrameworks.ipynb](../../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb)를 열어 실습을 시작하세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 원어로 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역을 사용하여 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/3-NeuralNetworks/README.md b/translations/ko/lessons/3-NeuralNetworks/README.md index 524653d1..97a89f8d 100644 --- a/translations/ko/lessons/3-NeuralNetworks/README.md +++ b/translations/ko/lessons/3-NeuralNetworks/README.md @@ -1,51 +1,60 @@ + # 신경망 소개 -![신경망 소개 내용 요약 그림](../../../../translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.ko.png) +![신경망 소개 내용을 요약한 그림](../../../../translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.ko.png) -우리가 소개에서 논의한 바와 같이, 지능을 달성하는 방법 중 하나는 **컴퓨터 모델** 또는 **인공 두뇌**를 훈련시키는 것입니다. 20세기 중반 이후로 연구자들은 다양한 수학적 모델을 시도했으며, 최근 몇 년 동안 이 방향이 크게 성공적임을 입증했습니다. 뇌의 이러한 수학적 모델을 **신경망**이라고 부릅니다. +서론에서 논의했듯이, 지능을 구현하는 방법 중 하나는 **컴퓨터 모델** 또는 **인공 두뇌**를 훈련시키는 것입니다. 20세기 중반부터 연구자들은 다양한 수학적 모델을 시도해 왔으며, 최근 몇 년 동안 이 방향이 매우 성공적임이 입증되었습니다. 이러한 두뇌의 수학적 모델을 **신경망**이라고 합니다. -> 때때로 신경망은 *인공 신경망*(Artificial Neural Networks), 즉 ANN이라고 불리며, 이는 우리가 실제 뉴런의 네트워크가 아닌 모델에 대해 이야기하고 있음을 나타냅니다. +> 때때로 신경망은 *인공 신경망* 또는 ANNs라고 불리며, 이는 우리가 실제 뉴런 네트워크가 아닌 모델에 대해 이야기하고 있음을 나타냅니다. -## 기계 학습 +## 머신러닝 -신경망은 **기계 학습**이라는 더 큰 분야의 일부로, 그 목표는 데이터를 사용하여 문제를 해결할 수 있는 컴퓨터 모델을 훈련시키는 것입니다. 기계 학습은 인공지능의 큰 부분을 구성하지만, 이 커리큘럼에서는 전통적인 기계 학습을 다루지 않습니다. +신경망은 **머신러닝**이라는 더 큰 학문 분야의 일부로, 이 분야의 목표는 데이터를 사용하여 문제를 해결할 수 있는 컴퓨터 모델을 훈련시키는 것입니다. 머신러닝은 인공지능의 큰 부분을 차지하지만, 이 커리큘럼에서는 고전적인 머신러닝에 대해 다루지 않습니다. -> 전통적인 기계 학습에 대해 더 배우고 싶다면 **[초보자를 위한 기계 학습](http://github.com/microsoft/ml-for-beginners)** 커리큘럼을 방문하세요. +> 고전적인 머신러닝에 대해 더 배우고 싶다면, 별도의 **[Machine Learning for Beginners](http://github.com/microsoft/ml-for-beginners)** 커리큘럼을 방문하세요. -기계 학습에서는 우리가 **X**라는 예제 데이터셋과 해당하는 출력 값 **Y**를 가지고 있다고 가정합니다. 예제는 종종 **특징**으로 구성된 N차원 벡터이며, 출력은 **레이블**이라고 불립니다. +머신러닝에서는 **X**라는 예제 데이터셋과 이에 대응하는 출력 값 **Y**가 있다고 가정합니다. 예제는 종종 **특징**으로 구성된 N차원 벡터이며, 출력은 **레이블**이라고 불립니다. -우리는 가장 일반적인 두 가지 기계 학습 문제를 고려할 것입니다: +우리는 머신러닝에서 가장 일반적인 두 가지 문제를 고려할 것입니다: -* **분류(Classification)**: 입력 객체를 두 개 이상의 클래스 중 하나로 분류해야 합니다. -* **회귀(Regression)**: 각 입력 샘플에 대해 숫자를 예측해야 합니다. +* **분류**: 입력 객체를 두 개 이상의 클래스 중 하나로 분류해야 하는 문제. +* **회귀**: 각 입력 샘플에 대해 숫자 값을 예측해야 하는 문제. -> 입력과 출력을 텐서로 표현할 때, 입력 데이터셋은 M×N 크기의 행렬이며, 여기서 M은 샘플 수, N은 특징 수입니다. 출력 레이블 Y는 M 크기의 벡터입니다. +> 입력과 출력을 텐서로 표현할 때, 입력 데이터셋은 M×N 크기의 행렬이며, 여기서 M은 샘플 수, N은 특징 수입니다. 출력 레이블 Y는 크기가 M인 벡터입니다. -이번 커리큘럼에서는 신경망 모델에만 집중할 것입니다. +이 커리큘럼에서는 신경망 모델에만 초점을 맞출 것입니다. -## 뉴런 모델 +## 뉴런의 모델 -생물학적으로 우리의 뇌는 여러 개의 "입력"(축삭)과 하나의 출력(수상돌기)을 가진 신경 세포로 구성되어 있습니다. 축삭과 수상돌기는 전기 신호를 전달할 수 있으며, 축삭과 수상돌기 사이의 연결은 다양한 전도도를 나타낼 수 있습니다(신경 매개체에 의해 조절됨). +생물학에서 우리는 뇌가 신경 세포로 구성되어 있으며, 각 세포는 여러 "입력"(축삭)과 하나의 출력(수상돌기)을 가지고 있음을 알고 있습니다. 축삭과 수상돌기는 전기 신호를 전달할 수 있으며, 축삭과 수상돌기 사이의 연결은 전도도의 정도가 다를 수 있습니다(신경전달물질에 의해 제어됨). -![뉴런 모델](../../../../translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.ko.jpg) | ![뉴런 모델](../../../../translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.ko.png) +![뉴런의 모델](../../../../translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.ko.jpg) | ![뉴런의 모델](../../../../translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.ko.png) ----|---- -실제 뉴런 *([이미지](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg) 출처: 위키백과)* | 인공 뉴런 *(작가의 이미지)* +실제 뉴런 *([이미지](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg) - 위키백과)* | 인공 뉴런 *(작성자 제공 이미지)* -따라서 가장 간단한 뉴런의 수학적 모델은 여러 개의 입력 X1, ..., XN과 출력 Y, 그리고 일련의 가중치 W1, ..., WN을 포함합니다. 출력은 다음과 같이 계산됩니다: +따라서 뉴런의 가장 간단한 수학적 모델은 여러 입력 X1, ..., XN과 출력 Y, 그리고 일련의 가중치 W1, ..., WN을 포함합니다. 출력은 다음과 같이 계산됩니다: Y = f\left(\sum_{i=1}^N X_iW_i\right) -여기서 f는 어떤 비선형 **활성화 함수**입니다. +여기서 f는 비선형 **활성화 함수**입니다. -> 뉴런의 초기 모델은 1943년 Warren McCullock과 Walter Pitts의 고전적인 논문 [신경 활동에 내재된 아이디어의 논리적 계산](https://www.cs.cmu.edu/~./epxing/Class/10715/reading/McCulloch.and.Pitts.pdf)에서 설명되었습니다. Donald Hebb는 그의 저서 "[행동의 조직: 신경심리학적 이론](https://books.google.com/books?id=VNetYrB8EBoC)"에서 이러한 네트워크가 훈련될 수 있는 방법을 제안했습니다. +> 초기 뉴런 모델은 Warren McCullock과 Walter Pitts가 1943년에 발표한 고전 논문 [A logical calculus of the ideas immanent in nervous activity](https://www.cs.cmu.edu/~./epxing/Class/10715/reading/McCulloch.and.Pitts.pdf)에서 설명되었습니다. Donald Hebb는 그의 책 "[The Organization of Behavior: A Neuropsychological Theory](https://books.google.com/books?id=VNetYrB8EBoC)"에서 이러한 네트워크를 훈련시키는 방법을 제안했습니다. -## 이 섹션에서 +## 이 섹션에서 다룰 내용 -이 섹션에서는 다음에 대해 배울 것입니다: -* [퍼셉트론](03-Perceptron/README.md), 두 클래스 분류를 위한 가장 초기의 신경망 모델 중 하나 -* [다층 네트워크](04-OwnFramework/README.md) 및 [자체 프레임워크 구축 방법](../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb)과 관련된 노트북 -* [신경망 프레임워크](05-Frameworks/README.md), 이 노트북들: [PyTorch](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb)와 [Keras/Tensorflow](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) +이 섹션에서는 다음 내용을 학습합니다: +* [퍼셉트론](03-Perceptron/README.md): 이진 분류를 위한 초기 신경망 모델 중 하나 +* [다층 네트워크](04-OwnFramework/README.md): [자체 프레임워크 구축](../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb)과 관련된 노트북 포함 +* [신경망 프레임워크](05-Frameworks/README.md): [PyTorch](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) 및 [Keras/Tensorflow](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) 관련 노트북 포함 * [과적합](../../../../lessons/3-NeuralNetworks/05-Frameworks) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어에서 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 저희가 책임지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/06-IntroCV/README.md b/translations/ko/lessons/4-ComputerVision/06-IntroCV/README.md index e53b1b0d..e3e178dd 100644 --- a/translations/ko/lessons/4-ComputerVision/06-IntroCV/README.md +++ b/translations/ko/lessons/4-ComputerVision/06-IntroCV/README.md @@ -1,31 +1,40 @@ + # 컴퓨터 비전 소개 -[컴퓨터 비전](https://wikipedia.org/wiki/Computer_vision)은 컴퓨터가 디지털 이미지를 높은 수준으로 이해할 수 있도록 하는 학문입니다. 이는 꽤 넓은 정의로, *이해*는 사진에서 물체 찾기(**물체 탐지**), 발생하는 사건 이해(**이벤트 탐지**), 사진을 텍스트로 설명하기, 또는 3D 장면 재구성 등 다양한 의미를 가질 수 있습니다. 사람의 이미지와 관련된 특별한 작업도 있으며, 여기에는 나이 및 감정 추정, 얼굴 탐지 및 식별, 3D 포즈 추정 등이 포함됩니다. +[컴퓨터 비전](https://wikipedia.org/wiki/Computer_vision)은 디지털 이미지를 통해 컴퓨터가 고수준의 이해를 할 수 있도록 하는 것을 목표로 하는 학문입니다. 이는 매우 광범위한 정의인데, *이해*라는 것이 사진에서 객체를 찾는 것(**객체 탐지**), 무슨 일이 일어나고 있는지 이해하는 것(**이벤트 탐지**), 사진을 텍스트로 설명하는 것, 또는 3D로 장면을 재구성하는 것 등 다양한 의미를 가질 수 있기 때문입니다. 또한 인간 이미지를 다루는 특별한 작업들도 있습니다: 나이와 감정 추정, 얼굴 탐지 및 식별, 3D 자세 추정 등이 그 예입니다. ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/106) 컴퓨터 비전의 가장 간단한 작업 중 하나는 **이미지 분류**입니다. -컴퓨터 비전은 종종 AI의 한 분야로 간주됩니다. 현재 대부분의 컴퓨터 비전 작업은 신경망을 사용하여 해결됩니다. 이 섹션에서는 컴퓨터 비전에서 사용되는 특별한 유형의 신경망인 [합성곱 신경망](../07-ConvNets/README.md)에 대해 더 배울 것입니다. +컴퓨터 비전은 종종 AI의 한 분야로 간주됩니다. 오늘날 대부분의 컴퓨터 비전 작업은 신경망을 사용하여 해결됩니다. 이 섹션에서는 컴퓨터 비전에 사용되는 특별한 유형의 신경망인 [합성곱 신경망](../07-ConvNets/README.md)에 대해 더 배울 것입니다. -그러나 이미지를 신경망에 전달하기 전에, 많은 경우 이미지를 향상시키기 위해 몇 가지 알고리즘 기술을 사용하는 것이 의미가 있습니다. +그러나 이미지를 신경망에 전달하기 전에, 많은 경우 알고리즘적 기법을 사용하여 이미지를 향상시키는 것이 유용합니다. -이미지 처리에 사용할 수 있는 여러 Python 라이브러리가 있습니다: +이미지 처리를 위한 여러 Python 라이브러리가 있습니다: -* **[imageio](https://imageio.readthedocs.io/en/stable/)**는 다양한 이미지 형식을 읽고 쓸 수 있습니다. 또한 비디오 프레임을 이미지로 변환하는 유용한 도구인 ffmpeg를 지원합니다. -* **[Pillow](https://pillow.readthedocs.io/en/stable/index.html)** (PIL로도 알려져 있음)은 좀 더 강력하며, 변형, 팔레트 조정 등과 같은 일부 이미지 조작도 지원합니다. -* **[OpenCV](https://opencv.org/)**는 C++로 작성된 강력한 이미지 처리 라이브러리로, 이미지 처리의 *de facto* 표준이 되었습니다. 편리한 Python 인터페이스를 제공합니다. -* **[dlib](http://dlib.net/)**는 많은 기계 학습 알고리즘을 구현한 C++ 라이브러리로, 컴퓨터 비전 알고리즘도 포함되어 있습니다. Python 인터페이스가 있으며, 얼굴 및 얼굴 랜드마크 탐지와 같은 도전적인 작업에 사용할 수 있습니다. +* **[imageio](https://imageio.readthedocs.io/en/stable/)**는 다양한 이미지 형식을 읽고/쓰는 데 사용할 수 있습니다. 또한 비디오 프레임을 이미지로 변환하는 데 유용한 도구인 ffmpeg도 지원합니다. +* **[Pillow](https://pillow.readthedocs.io/en/stable/index.html)** (PIL로도 알려짐)은 더 강력하며, 모핑, 팔레트 조정 등과 같은 이미지 조작도 지원합니다. +* **[OpenCV](https://opencv.org/)**는 C++로 작성된 강력한 이미지 처리 라이브러리로, 이미지 처리의 *사실상 표준*이 되었습니다. Python 인터페이스도 제공합니다. +* **[dlib](http://dlib.net/)**은 여러 머신러닝 알고리즘을 구현한 C++ 라이브러리로, 일부 컴퓨터 비전 알고리즘도 포함되어 있습니다. Python 인터페이스를 제공하며, 얼굴 및 얼굴 랜드마크 탐지와 같은 어려운 작업에 사용할 수 있습니다. ## OpenCV -[OpenCV](https://opencv.org/)는 이미지 처리의 *de facto* 표준으로 간주됩니다. C++로 구현된 많은 유용한 알고리즘을 포함하고 있으며, Python에서도 OpenCV를 호출할 수 있습니다. +[OpenCV](https://opencv.org/)는 이미지 처리의 *사실상 표준*으로 간주됩니다. C++로 구현된 많은 유용한 알고리즘을 포함하고 있습니다. Python에서도 OpenCV를 호출할 수 있습니다. -OpenCV를 배우기에 좋은 곳은 [이 Learn OpenCV 과정](https://learnopencv.com/getting-started-with-opencv/)입니다. 우리 커리큘럼의 목표는 OpenCV를 배우는 것이 아니라, OpenCV를 사용할 수 있는 몇 가지 예시를 보여주는 것입니다. +OpenCV를 배우기에 좋은 곳은 [이 Learn OpenCV 강좌](https://learnopencv.com/getting-started-with-opencv/)입니다. 우리의 커리큘럼에서는 OpenCV를 배우는 것이 목표가 아니라, OpenCV를 사용할 수 있는 예시와 그 방법을 보여주는 것이 목표입니다. -### 이미지 로딩 +### 이미지 로드 -Python에서 이미지는 NumPy 배열로 편리하게 표현할 수 있습니다. 예를 들어, 320x200 픽셀 크기의 그레이스케일 이미지는 200x320 배열에 저장되며, 동일한 차원의 컬러 이미지는 200x320x3의 형태를 가집니다(3개 색상 채널). 이미지를 로드하려면 다음 코드를 사용할 수 있습니다: +Python에서 이미지는 NumPy 배열로 편리하게 표현할 수 있습니다. 예를 들어, 320x200 픽셀 크기의 그레이스케일 이미지는 200x320 배열에 저장되며, 동일한 크기의 컬러 이미지는 200x320x3 (3개의 색상 채널) 형태를 가집니다. 이미지를 로드하려면 다음 코드를 사용할 수 있습니다: ```python import cv2 @@ -35,78 +44,78 @@ im = cv2.imread('image.jpeg') plt.imshow(im) ``` -전통적으로 OpenCV는 컬러 이미지에 대해 BGR(파랑-초록-빨강) 인코딩을 사용하고, 나머지 Python 도구들은 더 전통적인 RGB(빨강-초록-파랑)를 사용합니다. 이미지를 올바르게 보이게 하려면, NumPy 배열에서 차원을 교환하거나 OpenCV 함수를 호출하여 RGB 색상 공간으로 변환해야 합니다: +전통적으로 OpenCV는 컬러 이미지를 BGR(파랑-초록-빨강) 인코딩을 사용하지만, Python의 다른 도구들은 더 전통적인 RGB(빨강-초록-파랑)를 사용합니다. 이미지를 올바르게 보이게 하려면, NumPy 배열에서 차원을 교환하거나 OpenCV 함수를 호출하여 RGB 색상 공간으로 변환해야 합니다: ```python im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB) ``` -같은 `cvtColor` function can be used to perform other color space transformations such as converting an image to grayscale or to the HSV (Hue-Saturation-Value) color space. +같은 `cvtColor` 함수는 이미지를 그레이스케일로 변환하거나 HSV(색상-채도-명도) 색상 공간으로 변환하는 등 다른 색상 공간 변환에도 사용할 수 있습니다. -You can also use OpenCV to load video frame-by-frame - an example is given in the exercise [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb). +OpenCV를 사용하여 비디오를 프레임 단위로 로드할 수도 있습니다. 예시는 [OpenCV 노트북](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)에서 확인할 수 있습니다. -### Image Processing +### 이미지 처리 -Before feeding an image to a neural network, you may want to apply several pre-processing steps. OpenCV can do many things, including: +이미지를 신경망에 전달하기 전에 여러 전처리 단계를 적용하고 싶을 수 있습니다. OpenCV는 다음과 같은 작업을 수행할 수 있습니다: -* **Resizing** the image using `im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)` -* **Blurring** the image using `im = cv2.medianBlur(im,3)` or `im = cv2.GaussianBlur(im, (3,3), 0)` -* Changing the **brightness and contrast** of the image can be done by NumPy array manipulations, as described [in this Stackoverflow note](https://stackoverflow.com/questions/39308030/how-do-i-increase-the-contrast-of-an-image-in-python-opencv). -* Using [thresholding](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html) by calling `cv2.threshold`/`cv2.adaptiveThreshold` 함수는 종종 밝기나 대비를 조정하는 것보다 선호됩니다. -* 이미지를 [변환](https://docs.opencv.org/4.5.5/da/d6e/tutorial_py_geometric_transformations.html)하는 다양한 방법 적용: - - **[Affine 변환](https://docs.opencv.org/4.5.5/d4/d61/tutorial_warp_affine.html)**은 이미지에 회전, 크기 조정 및 왜곡을 결합해야 하고 이미지의 세 점의 원본 및 목적 위치를 알고 있는 경우 유용할 수 있습니다. Affine 변환은 평행선을 평행하게 유지합니다. - - **[Perspective 변환](https://medium.com/analytics-vidhya/opencv-perspective-transformation-9edffefb2143)**은 이미지의 4점의 원본 및 목적 위치를 알고 있을 때 유용합니다. 예를 들어, 스마트폰 카메라로 어떤 각도에서 직사각형 문서의 사진을 찍고, 문서 자체의 직사각형 이미지를 만들고자 할 때입니다. -* **[광학 흐름](https://docs.opencv.org/4.5.5/d4/dee/tutorial_optical_flow.html)**을 사용하여 이미지 내의 움직임 이해하기. +* `im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)`를 사용하여 이미지를 **크기 조정** +* `im = cv2.medianBlur(im,3)` 또는 `im = cv2.GaussianBlur(im, (3,3), 0)`를 사용하여 이미지를 **블러링** +* 이미지의 **밝기와 대비**를 변경하는 것은 [이 Stackoverflow 노트](https://stackoverflow.com/questions/39308030/how-do-i-increase-the-contrast-of-an-image-in-python-opencv)에 설명된 대로 NumPy 배열 조작으로 수행할 수 있습니다. +* `cv2.threshold`/`cv2.adaptiveThreshold` 함수를 호출하여 [임계값 처리](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html)를 사용하는 것이 밝기나 대비를 조정하는 것보다 선호될 수 있습니다. +* 이미지에 다양한 [변환](https://docs.opencv.org/4.5.5/da/d6e/tutorial_py_geometric_transformations.html)을 적용: + - **[아핀 변환](https://docs.opencv.org/4.5.5/d4/d61/tutorial_warp_affine.html)**은 이미지의 세 점의 원본 및 대상 위치를 알고 있을 때 회전, 크기 조정 및 왜곡을 결합해야 할 때 유용합니다. 아핀 변환은 평행선을 평행하게 유지합니다. + - **[투시 변환](https://medium.com/analytics-vidhya/opencv-perspective-transformation-9edffefb2143)**은 이미지의 네 점의 원본 및 대상 위치를 알고 있을 때 유용합니다. 예를 들어, 스마트폰 카메라로 직사각형 문서를 특정 각도에서 촬영한 경우, 문서 자체의 직사각형 이미지를 만들고 싶을 때 사용할 수 있습니다. +* **[광학 흐름](https://docs.opencv.org/4.5.5/d4/dee/tutorial_optical_flow.html)**을 사용하여 이미지 내부의 움직임을 이해. -## 컴퓨터 비전 사용 예 +## 컴퓨터 비전 사용 예시 -우리의 [OpenCV 노트북](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)에서는 컴퓨터 비전이 특정 작업을 수행하는 데 사용될 수 있는 몇 가지 예시를 제공합니다: +[OpenCV 노트북](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)에서 컴퓨터 비전을 사용하여 특정 작업을 수행하는 몇 가지 예를 제공합니다: -* **점자 책의 사진 전처리**. 우리는 점자 기호를 개별적으로 분리하여 신경망으로 추가 분류하기 위해 임계값 설정, 특징 탐지, 원근 변환 및 NumPy 조작을 어떻게 사용할 수 있는지에 중점을 둡니다. +* **점자책 사진 전처리**. 임계값 처리, 특징 탐지, 투시 변환 및 NumPy 조작을 사용하여 개별 점자 기호를 분리하고 신경망으로 추가 분류하는 방법에 중점을 둡니다. ![점자 이미지](../../../../../translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.ko.jpeg) | ![전처리된 점자 이미지](../../../../../translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.ko.png) | ![점자 기호](../../../../../translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.ko.png) ----|-----|----- > 이미지 출처: [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) -* **프레임 차이를 사용하여 비디오에서 움직임 감지**. 카메라가 고정되어 있다면, 카메라 피드의 프레임은 서로 비슷해야 합니다. 프레임은 배열로 표현되므로, 두 개의 연속된 프레임의 배열을 빼면 픽셀 차이를 얻을 수 있습니다. 정적 프레임에서는 이 차이가 낮고, 이미지에 상당한 움직임이 있을 경우 높아집니다. +* **프레임 차이를 사용한 비디오에서의 움직임 탐지**. 카메라가 고정되어 있다면, 카메라 피드의 프레임은 서로 매우 유사해야 합니다. 프레임이 배열로 표현되므로, 두 연속 프레임의 배열을 빼면 픽셀 차이를 얻을 수 있습니다. 이는 정적인 프레임에서는 낮고, 이미지에 상당한 움직임이 있을 때 높아집니다. ![비디오 프레임 및 프레임 차이 이미지](../../../../../translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.ko.png) > 이미지 출처: [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) -* **광학 흐름을 사용하여 움직임 감지**. [광학 흐름](https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html)은 비디오 프레임의 개별 픽셀이 어떻게 움직이는지를 이해할 수 있게 해줍니다. 광학 흐름에는 두 가지 유형이 있습니다: +* **광학 흐름을 사용한 움직임 탐지**. [광학 흐름](https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html)은 비디오 프레임의 개별 픽셀이 어떻게 움직이는지 이해할 수 있게 해줍니다. 광학 흐름에는 두 가지 유형이 있습니다: - - **밀집 광학 흐름**은 각 픽셀이 어디로 움직이는지를 보여주는 벡터 필드를 계산합니다. - - **희소 광학 흐름**은 이미지에서 일부 독특한 특징(예: 에지)을 선택하고, 프레임 간의 궤적을 구축하는 데 기반합니다. + - **밀집 광학 흐름**은 각 픽셀이 어디로 이동하는지 보여주는 벡터 필드를 계산합니다. + - **희소 광학 흐름**은 이미지에서 일부 독특한 특징(예: 가장자리)을 기반으로 하여 프레임 간의 궤적을 만듭니다. ![광학 흐름 이미지](../../../../../translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.ko.png) > 이미지 출처: [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) -## ✍️ 예제 노트북: OpenCV [OpenCV를 행동으로 시도하기](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) +## ✍️ 예제 노트북: OpenCV [OpenCV 실습](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) -[OpenCV 노트북](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)을 탐색하며 OpenCV로 실험해 봅시다. +[OpenCV 노트북](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb)을 탐색하며 OpenCV로 실험을 진행해 봅시다. ## 결론 -때때로, 움직임 감지나 손끝 감지와 같은 상대적으로 복잡한 작업은 순수하게 컴퓨터 비전만으로 해결할 수 있습니다. 따라서 컴퓨터 비전의 기본 기술과 OpenCV와 같은 라이브러리가 할 수 있는 일을 아는 것이 매우 유용합니다. +움직임 탐지나 손끝 탐지와 같은 비교적 복잡한 작업도 순수하게 컴퓨터 비전만으로 해결할 수 있는 경우가 있습니다. 따라서 컴퓨터 비전의 기본 기술과 OpenCV와 같은 라이브러리가 할 수 있는 일을 아는 것이 매우 유용합니다. -## 🚀 도전 +## 🚀 도전 과제 -AI 쇼에서 [이 비디오](https://docs.microsoft.com/shows/ai-show/ai-show--2021-opencv-ai-competition--grand-prize-winners--cortic-tigers--episode-32?WT.mc_id=academic-77998-cacaste)를 시청하여 Cortic Tigers 프로젝트에 대해 배우고, 그들이 로봇을 통해 컴퓨터 비전 작업을 민주화하기 위해 블록 기반 솔루션을 어떻게 구축했는지 알아보세요. 이 분야에 새로운 학습자를 onboarding하는 데 도움이 되는 다른 프로젝트에 대해 조사해 보세요. +AI 쇼의 [이 비디오](https://docs.microsoft.com/shows/ai-show/ai-show--2021-opencv-ai-competition--grand-prize-winners--cortic-tigers--episode-32?WT.mc_id=academic-77998-cacaste)를 시청하여 Cortic Tigers 프로젝트와 로봇을 통해 컴퓨터 비전 작업을 민주화하는 블록 기반 솔루션을 구축한 방법을 알아보세요. 이와 유사하게 새로운 학습자를 컴퓨터 비전 분야로 유도하는 다른 프로젝트를 조사해 보세요. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/206) -## 리뷰 및 자기 학습 +## 복습 및 자기 학습 [이 훌륭한 튜토리얼](https://learnopencv.com/optical-flow-in-opencv/)에서 광학 흐름에 대해 더 읽어보세요. ## [과제](lab/README.md) -이 실습에서는 간단한 제스처로 비디오를 촬영하고, 목표는 광학 흐름을 사용하여 위/아래/왼쪽/오른쪽 움직임을 추출하는 것입니다. +이 실습에서는 간단한 제스처가 포함된 비디오를 촬영하고, 광학 흐름을 사용하여 위/아래/왼쪽/오른쪽 움직임을 추출하는 것이 목표입니다. 손바닥 움직임 프레임 **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역을 사용하여 발생하는 오해나 잘못된 해석에 대해서는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/06-IntroCV/lab/README.md b/translations/ko/lessons/4-ComputerVision/06-IntroCV/lab/README.md index 3722905f..f52c8e8e 100644 --- a/translations/ko/lessons/4-ComputerVision/06-IntroCV/lab/README.md +++ b/translations/ko/lessons/4-ComputerVision/06-IntroCV/lab/README.md @@ -1,23 +1,31 @@ -# 광학 흐름을 이용한 움직임 감지 + +# 광학 흐름을 사용한 움직임 감지 -[초보자를 위한 AI 커리큘럼](https://aka.ms/ai-beginners)에서의 실습 과제입니다. +[AI for Beginners Curriculum](https://aka.ms/ai-beginners)에서 제공하는 실습 과제입니다. ## 과제 -[이 비디오](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4)를 고려해 보세요. 이 비디오에서는 한 사람의 손바닥이 안정된 배경에서 좌/우/상/하로 움직입니다. -당신은 2023년 10월까지의 데이터로 훈련되었습니다. +[이 비디오](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4)를 참고하세요. 이 비디오에서는 한 사람의 손바닥이 안정된 배경 위에서 좌/우/상/하로 움직입니다. -**당신의 목표**는 Optical Flow를 사용하여 비디오의 어떤 부분이 상/하/좌/우 움직임을 포함하고 있는지 판단하는 것입니다. +**목표**는 광학 흐름을 사용하여 비디오의 어느 부분에서 상/하/좌/우 움직임이 발생하는지 판단하는 것입니다. -**확장 목표**는 [이 블로그 포스트](https://dev.to/amarlearning/finger-detection-and-tracking-using-opencv-and-python-586m) 또는 [여기](http://www.benmeline.com/finger-tracking-with-opencv-and-python/)에 설명된 대로 피부 톤을 사용하여 실제로 손바닥/손가락의 움직임을 추적하는 것입니다. +**추가 목표**는 [이 블로그 글](https://dev.to/amarlearning/finger-detection-and-tracking-using-opencv-and-python-586m) 또는 [여기](http://www.benmeline.com/finger-tracking-with-opencv-and-python/)에서 설명된 것처럼 피부 톤을 사용하여 손바닥/손가락 움직임을 실제로 추적하는 것입니다. ## 시작 노트북 [MovementDetection.ipynb](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb)를 열어 실습을 시작하세요. -## 주요 내용 +## 배울 점 -때때로 움직임 감지나 손끝 감지와 같은 상대적으로 복잡한 작업은 순수하게 컴퓨터 비전으로 해결할 수 있습니다. 따라서 OpenCV와 같은 라이브러리가 할 수 있는 일을 아는 것이 매우 유용합니다. +움직임 감지나 손가락 끝 감지와 같은 비교적 복잡한 작업도 순수하게 컴퓨터 비전만으로 해결할 수 있는 경우가 있습니다. 따라서 OpenCV와 같은 라이브러리가 할 수 있는 일을 아는 것이 매우 유용합니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 원어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역을 사용함으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md b/translations/ko/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md index 17f0fcd4..7cf10003 100644 --- a/translations/ko/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md +++ b/translations/ko/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md @@ -1,12 +1,21 @@ + # 잘 알려진 CNN 아키텍처 ### VGG-16 -VGG-16은 2014년 ImageNet top-5 분류에서 92.7%의 정확도를 달성한 네트워크입니다. 다음과 같은 레이어 구조를 가지고 있습니다: +VGG-16은 2014년 ImageNet 상위 5개 분류에서 92.7%의 정확도를 달성한 네트워크입니다. 다음과 같은 계층 구조를 가지고 있습니다: ![ImageNet Layers](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.ko.jpg) -보시다시피, VGG는 전통적인 피라미드 아키텍처를 따르며, 이는 일련의 합성곱-풀링 레이어로 구성되어 있습니다. +보시다시피, VGG는 전통적인 피라미드 아키텍처를 따르며, 이는 컨볼루션-풀링 계층의 연속입니다. ![ImageNet Pyramid](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.ko.jpg) @@ -14,51 +23,51 @@ VGG-16은 2014년 ImageNet top-5 분류에서 92.7%의 정확도를 달성한 ### ResNet -ResNet은 2015년 Microsoft Research에서 제안한 모델 패밀리입니다. ResNet의 주요 아이디어는 **잔차 블록**을 사용하는 것입니다: +ResNet은 2015년 Microsoft Research에서 제안한 모델 계열입니다. ResNet의 주요 아이디어는 **잔차 블록(residual blocks)**을 사용하는 것입니다: > 이미지 출처: [이 논문](https://arxiv.org/pdf/1512.03385.pdf) -아이덴티티 패스스루를 사용하는 이유는 이전 레이어의 결과와 잔차 블록의 출력을 비교하여 **차이**를 예측하도록 레이어를 구성하기 위함입니다 - 그래서 *잔차*라는 이름이 붙었습니다. 이러한 블록은 훈련하기가 훨씬 쉬우며, 수백 개의 블록으로 구성된 네트워크를 구축할 수 있습니다 (가장 일반적인 변형은 ResNet-52, ResNet-101 및 ResNet-152입니다). +Identity pass-through를 사용하는 이유는 이전 계층의 결과와 잔차 블록의 출력을 비교하여 **차이**를 예측하도록 하기 위함입니다. 그래서 이름이 *잔차(Residual)*입니다. 이러한 블록은 훈련이 훨씬 쉬우며, 수백 개의 블록으로 구성된 네트워크를 구축할 수 있습니다(가장 일반적인 변형은 ResNet-52, ResNet-101, ResNet-152입니다). -이 네트워크는 데이터셋에 따라 복잡성을 조정할 수 있는 것으로 생각할 수도 있습니다. 네트워크 훈련을 시작할 때는 가중치 값이 작고 대부분의 신호가 패스스루 아이덴티티 레이어를 통해 전달됩니다. 훈련이 진행되면서 가중치가 커지면 네트워크 매개변수의 중요성이 커지고, 네트워크는 훈련 이미지를 올바르게 분류하기 위해 필요한 표현력을 조정합니다. +이 네트워크는 데이터셋에 따라 복잡성을 조정할 수 있는 것으로 생각할 수도 있습니다. 초기에는 네트워크를 훈련시키기 시작할 때 가중치 값이 작아 대부분의 신호가 identity 계층을 통해 전달됩니다. 훈련이 진행되고 가중치가 커지면서 네트워크 매개변수의 중요성이 증가하고, 네트워크는 훈련 이미지의 정확한 분류를 위해 필요한 표현력을 수용하도록 조정됩니다. ### Google Inception -Google Inception 아키텍처는 이 아이디어를 한 단계 더 발전시켜, 각 네트워크 레이어를 여러 다른 경로의 조합으로 구성합니다: +Google Inception 아키텍처는 이 아이디어를 한 단계 더 발전시켜, 각 네트워크 계층을 여러 경로의 조합으로 구성합니다: > 이미지 출처: [Researchgate](https://www.researchgate.net/figure/Inception-module-with-dimension-reductions-left-and-schema-for-Inception-ResNet-v1_fig2_355547454) -여기서 1x1 합성곱의 역할을 강조할 필요가 있습니다. 처음에는 그 의미가 잘 이해되지 않을 수 있습니다. 왜 1x1 필터로 이미지를 통과해야 할까요? 그러나 합성곱 필터는 여러 깊이 채널(원래는 RGB 색상, 후속 레이어에서는 서로 다른 필터를 위한 채널)과 함께 작동한다는 것을 기억해야 합니다. 1x1 합성곱은 이러한 입력 채널을 서로 다른 학습 가능한 가중치를 사용하여 혼합하는 데 사용됩니다. 이는 채널 차원에서 다운샘플링(풀링)으로도 볼 수 있습니다. +여기서 1x1 컨볼루션의 역할을 강조할 필요가 있습니다. 처음에는 1x1 필터로 이미지를 처리하는 것이 이해되지 않을 수 있습니다. 하지만 컨볼루션 필터는 여러 깊이 채널(RGB 색상, 이후 계층에서는 다양한 필터의 채널)에서도 작동하며, 1x1 컨볼루션은 서로 다른 학습 가능한 가중치를 사용하여 이러한 입력 채널을 혼합하는 데 사용됩니다. 이는 채널 차원에서 다운샘플링(풀링)으로도 볼 수 있습니다. -이 주제에 대한 [좋은 블로그 포스트](https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578)와 [원본 논문](https://arxiv.org/pdf/1312.4400.pdf)을 참고하세요. +[1x1 컨볼루션에 대한 좋은 블로그 글](https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578)과 [원본 논문](https://arxiv.org/pdf/1312.4400.pdf)을 참고하세요. ### MobileNet -MobileNet은 크기가 줄어든 모델 패밀리로, 모바일 장치에 적합합니다. 자원이 부족하고 정확도를 조금 희생할 수 있다면 이 모델들을 사용하세요. 이 모델의 주요 아이디어는 **깊이별 분리 합성곱**으로, 공간 합성곱과 깊이 채널에 대한 1x1 합성곱의 조합으로 합성곱 필터를 표현할 수 있게 해줍니다. 이는 매개변수의 수를 크게 줄여 네트워크의 크기를 작게 만들고, 데이터가 적어도 훈련하기 쉽게 만듭니다. +MobileNet은 크기가 작아 모바일 기기에 적합한 모델 계열입니다. 자원이 부족하고 약간의 정확도를 희생할 수 있다면 사용하세요. MobileNet의 주요 아이디어는 **깊이별 분리 컨볼루션(depthwise separable convolution)**으로, 공간 컨볼루션과 깊이 채널에 대한 1x1 컨볼루션의 조합으로 컨볼루션 필터를 표현할 수 있습니다. 이는 매개변수 수를 크게 줄여 네트워크 크기를 작게 만들고, 적은 데이터로도 훈련하기 쉽게 만듭니다. -MobileNet에 대한 [좋은 블로그 포스트](https://medium.com/analytics-vidhya/image-classification-with-mobilenet-cc6fbb2cd470)를 참고하세요. +[MobileNet에 대한 좋은 블로그 글](https://medium.com/analytics-vidhya/image-classification-with-mobilenet-cc6fbb2cd470)을 참고하세요. ## 결론 -이 단원에서는 컴퓨터 비전 신경망의 주요 개념인 합성곱 신경망(CNN)에 대해 배웠습니다. 이미지 분류, 객체 탐지 및 이미지 생성 네트워크를 지원하는 실제 아키텍처는 모두 CNN을 기반으로 하며, 레이어 수가 더 많고 몇 가지 추가 훈련 기법이 포함되어 있습니다. +이 단원에서는 컴퓨터 비전 신경망의 주요 개념인 컨볼루션 네트워크에 대해 배웠습니다. 이미지 분류, 객체 탐지, 심지어 이미지 생성 네트워크를 지원하는 실제 아키텍처는 모두 CNN을 기반으로 하며, 더 많은 계층과 추가적인 훈련 기법이 포함되어 있습니다. ## 🚀 도전 과제 -동반된 노트북에는 더 높은 정확도를 얻는 방법에 대한 메모가 있습니다. 실험을 통해 더 높은 정확도를 달성할 수 있는지 확인해 보세요. +첨부된 노트북의 하단에는 더 높은 정확도를 얻는 방법에 대한 메모가 있습니다. 실험을 통해 더 높은 정확도를 달성할 수 있는지 확인해 보세요. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/207) -## 리뷰 및 자기 학습 +## 복습 및 자기 학습 -CNN은 일반적으로 컴퓨터 비전 작업에 가장 많이 사용되지만, 고정 크기 패턴을 추출하는 데도 일반적으로 유용합니다. 예를 들어, 소리를 다룰 때도 오디오 신호에서 특정 패턴을 찾기 위해 CNN을 사용할 수 있습니다. 이 경우 필터는 1차원(이 CNN은 1D-CNN이라고 불림)으로 구성됩니다. 또한, 때때로 3D-CNN이 다차원 공간에서 특징을 추출하는 데 사용되며, 비디오에서 발생하는 특정 이벤트를 캡처할 수 있습니다. CNN으로 수행할 수 있는 다른 작업에 대해 리뷰하고 자기 학습을 해보세요. +CNN은 주로 컴퓨터 비전 작업에 사용되지만, 고정 크기 패턴을 추출하는 데 일반적으로 유용합니다. 예를 들어, 소리를 다룰 때도 CNN을 사용하여 오디오 신호에서 특정 패턴을 찾을 수 있습니다. 이 경우 필터는 1차원(1D-CNN)일 것입니다. 또한, 비디오에서 특정 이벤트가 발생하는 것과 같은 다차원 공간에서 특징을 추출하기 위해 3D-CNN이 사용되기도 합니다. CNN으로 수행할 수 있는 다른 작업에 대해 복습하고 자기 학습을 해보세요. ## [과제](lab/README.md) -이 실습에서는 다양한 고양이와 개 품종을 분류하는 작업을 맡게 됩니다. 이 이미지는 MNIST 데이터셋보다 더 복잡하고 차원이 더 높으며, 10개 이상의 클래스가 있습니다. +이 실습에서는 다양한 고양이와 개 품종을 분류하는 작업을 수행합니다. 이 이미지는 MNIST 데이터셋보다 더 복잡하고 차원이 더 크며, 클래스도 10개 이상입니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역을 사용하여 발생하는 오해나 잘못된 해석에 대해서는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/07-ConvNets/README.md b/translations/ko/lessons/4-ComputerVision/07-ConvNets/README.md index 6fba2f12..f4a9cefe 100644 --- a/translations/ko/lessons/4-ComputerVision/07-ConvNets/README.md +++ b/translations/ko/lessons/4-ComputerVision/07-ConvNets/README.md @@ -1,58 +1,67 @@ -# 합성곱 신경망 + +# 합성곱 신경망 (Convolutional Neural Networks) -우리는 이전에 신경망이 이미지 처리에 매우 능숙하다는 것을 보았으며, 단일 층 퍼셉트론조차도 MNIST 데이터셋에서 손으로 쓴 숫자를 합리적인 정확도로 인식할 수 있습니다. 그러나 MNIST 데이터셋은 매우 특별하며, 모든 숫자가 이미지 안에 중앙에 위치해 있어 작업이 더 간단해집니다. +이전에 신경망이 이미지를 처리하는 데 매우 효과적이라는 것을 살펴보았습니다. 심지어 단일 계층 퍼셉트론도 MNIST 데이터셋의 손글씨 숫자를 상당히 높은 정확도로 인식할 수 있습니다. 하지만 MNIST 데이터셋은 매우 특별하며, 모든 숫자가 이미지 중앙에 위치해 있어 작업이 더 간단해집니다. ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/107) -실제 상황에서는 이미지 내에서 객체의 정확한 위치에 관계없이 객체를 인식할 수 있어야 합니다. 컴퓨터 비전은 일반적인 분류와는 다릅니다. 왜냐하면 우리가 사진에서 특정 객체를 찾으려고 할 때, 우리는 이미지에서 특정 **패턴**과 그 조합을 찾기 위해 스캔하고 있기 때문입니다. 예를 들어, 고양이를 찾을 때 우리는 먼저 수염을 형성할 수 있는 수평선을 찾을 수 있으며, 그런 다음 특정 수염의 조합이 실제로 고양이의 사진임을 알려줄 수 있습니다. 특정 패턴의 상대적 위치와 존재는 중요하며, 이미지에서의 정확한 위치는 중요하지 않습니다. +실제 상황에서는 이미지 내에서 객체의 정확한 위치와 상관없이 객체를 인식할 수 있어야 합니다. 컴퓨터 비전은 일반적인 분류와는 다릅니다. 특정 객체를 이미지에서 찾으려 할 때, 우리는 특정 **패턴**과 그 조합을 찾기 위해 이미지를 스캔합니다. 예를 들어, 고양이를 찾으려 할 때, 먼저 수평선을 찾아 수염을 형성할 수 있고, 그런 다음 특정 수염 조합이 실제로 고양이 사진임을 알려줄 수 있습니다. 특정 패턴의 상대적 위치와 존재는 중요하지만, 이미지 내에서의 정확한 위치는 중요하지 않습니다. -패턴을 추출하기 위해 우리는 **합성곱 필터**의 개념을 사용할 것입니다. 아시다시피, 이미지는 2D 매트릭스 또는 색 깊이를 가진 3D 텐서로 표현됩니다. 필터를 적용한다는 것은 상대적으로 작은 **필터 커널** 매트릭스를 사용하여 원본 이미지의 각 픽셀에 대해 이웃 점들과의 가중 평균을 계산하는 것을 의미합니다. 우리는 이것을 전체 이미지 위를 슬라이딩하는 작은 창으로 보고, 필터 커널 매트릭스의 가중치에 따라 모든 픽셀을 평균화할 수 있습니다. +패턴을 추출하기 위해 **합성곱 필터**라는 개념을 사용합니다. 이미지는 2D 행렬 또는 색상 깊이를 가진 3D 텐서로 표현됩니다. 필터를 적용한다는 것은 비교적 작은 **필터 커널** 행렬을 가져와 원본 이미지의 각 픽셀에 대해 이웃 픽셀과 가중 평균을 계산하는 것을 의미합니다. 이를 작은 창이 전체 이미지를 슬라이딩하며 필터 커널 행렬의 가중치에 따라 모든 픽셀을 평균화하는 것으로 볼 수 있습니다. ![수직 엣지 필터](../../../../../translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.ko.png) | ![수평 엣지 필터](../../../../../translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.ko.png) ----|---- > 이미지 제공: Dmitry Soshnikov -예를 들어, MNIST 숫자에 3x3 수직 엣지 및 수평 엣지 필터를 적용하면 원본 이미지에서 수직 및 수평 엣지가 있는 곳에서 하이라이트(예: 높은 값)를 얻을 수 있습니다. 따라서 이 두 필터는 엣지를 "찾기 위해" 사용될 수 있습니다. 마찬가지로, 우리는 다른 저수준 패턴을 찾기 위해 다양한 필터를 설계할 수 있습니다. +예를 들어, MNIST 숫자에 3x3 수직 엣지 필터와 수평 엣지 필터를 적용하면 원본 이미지에서 수직 및 수평 엣지가 있는 부분을 강조 표시(예: 높은 값)할 수 있습니다. 따라서 이 두 필터는 엣지를 "찾는" 데 사용할 수 있습니다. 마찬가지로, 다른 저수준 패턴을 찾기 위해 다양한 필터를 설계할 수 있습니다: > [Leung-Malik 필터 뱅크](https://www.robots.ox.ac.uk/~vgg/research/texclass/filters.html) 이미지 -하지만 패턴을 수동으로 추출하기 위해 필터를 설계할 수 있는 것 외에도, 네트워크가 자동으로 패턴을 학습하도록 설계할 수도 있습니다. 이것이 CNN의 주요 아이디어 중 하나입니다. +하지만 패턴을 추출하기 위해 필터를 수동으로 설계할 수도 있지만, 네트워크를 설계하여 패턴을 자동으로 학습하도록 만들 수도 있습니다. 이것이 CNN의 주요 아이디어 중 하나입니다. ## CNN의 주요 아이디어 -CNN이 작동하는 방식은 다음과 같은 중요한 아이디어에 기반합니다: +CNN이 작동하는 방식은 다음과 같은 중요한 아이디어를 기반으로 합니다: -* 합성곱 필터는 패턴을 추출할 수 있습니다. -* 필터가 자동으로 학습되도록 네트워크를 설계할 수 있습니다. -* 우리는 원본 이미지뿐만 아니라 고수준 특징에서도 패턴을 찾기 위해 동일한 접근 방식을 사용할 수 있습니다. 따라서 CNN의 특징 추출은 저수준 픽셀 조합에서 시작하여 이미지 부분의 고수준 조합에 이르는 특징의 계층 구조에서 작동합니다. +* 합성곱 필터는 패턴을 추출할 수 있다. +* 필터가 자동으로 학습되도록 네트워크를 설계할 수 있다. +* 원본 이미지뿐만 아니라 고수준 특징에서도 패턴을 찾는 데 동일한 접근 방식을 사용할 수 있다. 따라서 CNN 특징 추출은 저수준 픽셀 조합에서 시작하여 이미지 부분의 고수준 조합에 이르기까지 특징의 계층 구조에서 작동한다. ![계층적 특징 추출](../../../../../translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.ko.png) -> [Hislop-Lynch의 논문](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d)에서 제공된 이미지, [그들의 연구](https://dl.acm.org/doi/abs/10.1145/1553374.1553453)를 기반으로 합니다. +> 이미지 출처: [Hislop-Lynch의 논문](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d), [그들의 연구](https://dl.acm.org/doi/abs/10.1145/1553374.1553453)를 기반으로 함 ## ✍️ 연습: 합성곱 신경망 -합성곱 신경망이 어떻게 작동하는지, 그리고 어떻게 학습 가능한 필터를 얻을 수 있는지 탐구를 계속해 봅시다. 해당 노트북을 통해 진행해 보세요: +합성곱 신경망이 어떻게 작동하는지, 그리고 학습 가능한 필터를 어떻게 구현할 수 있는지 알아보기 위해 관련 노트북을 통해 계속 탐구해 봅시다: * [합성곱 신경망 - PyTorch](../../../../../lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) * [합성곱 신경망 - TensorFlow](../../../../../lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) ## 피라미드 아키텍처 -이미지 처리를 위해 사용되는 대부분의 CNN은 이른바 피라미드 아키텍처를 따릅니다. 원본 이미지에 적용되는 첫 번째 합성곱 층은 일반적으로 상대적으로 낮은 수의 필터(8-16)를 가지며, 이는 수평/수직 선과 같은 다양한 픽셀 조합에 해당합니다. 다음 단계에서는 네트워크의 공간 차원을 줄이고 필터의 수를 늘리며, 이는 더 많은 간단한 특징 조합에 해당합니다. 각 레이어마다 최종 분류기로 이동할수록 이미지의 공간 차원은 줄어들고 필터의 수는 증가합니다. +이미지 처리를 위해 사용되는 대부분의 CNN은 소위 피라미드 아키텍처를 따릅니다. 원본 이미지에 적용되는 첫 번째 합성곱 계층은 일반적으로 상대적으로 적은 수의 필터(8-16)를 가지며, 이는 수평/수직 선과 같은 픽셀 조합에 해당합니다. 다음 단계에서는 네트워크의 공간적 차원을 줄이고 필터 수를 늘리며, 이는 간단한 특징의 더 많은 조합에 해당합니다. 각 계층에서 최종 분류기로 이동할수록 이미지의 공간적 차원은 감소하고 필터 수는 증가합니다. -예를 들어, 2014년 ImageNet의 top-5 분류에서 92.7% 정확도를 달성한 VGG-16 아키텍처를 살펴보겠습니다: +예를 들어, 2014년 ImageNet의 상위 5개 분류에서 92.7%의 정확도를 달성한 VGG-16 네트워크의 아키텍처를 살펴봅시다: -![ImageNet 레이어](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.ko.jpg) +![ImageNet 계층](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.ko.jpg) ![ImageNet 피라미드](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.ko.jpg) -> [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493)에서 제공된 이미지 +> 이미지 출처: [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) ## 잘 알려진 CNN 아키텍처 -[잘 알려진 CNN 아키텍처에 대한 학습을 계속하세요](CNN_Architectures.md) +[잘 알려진 CNN 아키텍처에 대해 계속 학습하세요](CNN_Architectures.md) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역을 사용하여 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/ko/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 45b829ec..ed94e4d8 100644 --- a/translations/ko/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/ko/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,20 +1,29 @@ -# 애완동물 얼굴 분류 + +# 반려동물 얼굴 분류 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서 제공하는 실습 과제입니다. -## 작업 +## 과제 -애완동물 보육원용 애플리케이션을 개발해야 한다고 상상해 보세요. 이 애플리케이션의 훌륭한 기능 중 하나는 사진에서 품종을 자동으로 발견하는 것입니다. 이는 신경망을 사용하여 성공적으로 수행할 수 있습니다. +반려동물 보육원을 위한 애플리케이션을 개발해야 한다고 상상해보세요. 이 애플리케이션의 훌륭한 기능 중 하나는 사진을 통해 자동으로 품종을 식별하는 것입니다. 이는 신경망을 사용하여 성공적으로 구현할 수 있습니다. -**Pet Faces** 데이터셋을 사용하여 고양이와 개의 다양한 품종을 분류하기 위해 컨볼루션 신경망을 훈련해야 합니다. +**Pet Faces** 데이터셋을 사용하여 고양이와 개의 다양한 품종을 분류하는 컨볼루션 신경망을 훈련해야 합니다. ## 데이터셋 -우리는 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 애완동물 데이터셋에서 파생된 **Pet Faces** 데이터셋을 사용할 것입니다. 이 데이터셋에는 35가지의 서로 다른 개와 고양이 품종이 포함되어 있습니다. +우리는 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 반려동물 데이터셋에서 파생된 **Pet Faces** 데이터셋을 사용할 것입니다. 이 데이터셋은 35가지의 서로 다른 개와 고양이 품종을 포함하고 있습니다. ![우리가 다룰 데이터셋](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.ko.png) -데이터셋을 다운로드하려면 다음 코드 스니펫을 사용하세요: +데이터셋을 다운로드하려면 아래 코드 스니펫을 사용하세요: ```python !wget https://mslearntensorflowlp.blob.core.windows.net/data/petfaces.tar.gz @@ -22,13 +31,13 @@ !rm petfaces.tar.gz ``` -## 노트북 시작하기 +## 시작 노트북 [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb)를 열어 실습을 시작하세요. -## 주요 내용 +## 주요 성과 -당신은 처음부터 이미지 분류라는 비교적 복잡한 문제를 해결했습니다! 클래스가 상당히 많았음에도 불구하고 합리적인 정확도를 얻을 수 있었습니다! 또한, 일부 클래스는 인간에게도 명확히 구분되지 않기 때문에 top-k 정확도를 측정하는 것이 의미가 있습니다. +여러분은 이미지를 분류하는 비교적 복잡한 문제를 처음부터 해결했습니다! 클래스가 꽤 많았음에도 불구하고 합리적인 정확도를 얻을 수 있었습니다. 또한, top-k 정확도를 측정하는 것도 의미가 있습니다. 왜냐하면 인간조차도 명확히 구분하기 어려운 클래스들이 있기 때문입니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전이 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/08-TransferLearning/README.md b/translations/ko/lessons/4-ComputerVision/08-TransferLearning/README.md index a3b201ee..70a623b5 100644 --- a/translations/ko/lessons/4-ComputerVision/08-TransferLearning/README.md +++ b/translations/ko/lessons/4-ComputerVision/08-TransferLearning/README.md @@ -1,81 +1,90 @@ -# 사전 훈련된 네트워크와 전이 학습 + +# 사전 학습된 네트워크와 전이 학습 -CNN을 훈련하는 데는 많은 시간과 데이터가 필요합니다. 그러나 많은 시간은 네트워크가 이미지에서 패턴을 추출하기 위해 사용할 수 있는 최적의 저수준 필터를 배우는 데 소요됩니다. 자연스러운 질문이 생깁니다 - 하나의 데이터셋에서 훈련된 신경망을 사용하여 전체 훈련 과정 없이 다른 이미지를 분류하는 데 적응할 수 있을까요? +CNN을 훈련시키는 데는 많은 시간이 걸리며, 이를 위해 많은 데이터가 필요합니다. 하지만 대부분의 시간은 네트워크가 이미지를 통해 패턴을 추출할 수 있는 최적의 저수준 필터를 학습하는 데 소비됩니다. 여기서 자연스럽게 이런 질문이 떠오릅니다. 한 데이터셋에서 훈련된 신경망을 사용하여 완전한 훈련 과정 없이 다른 이미지를 분류하도록 적응시킬 수 있을까요? -## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/108) +## [사전 강의 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/108) -이 접근 방식을 **전이 학습**이라고 합니다. 이는 하나의 신경망 모델에서 다른 모델로 지식을 전이하기 때문입니다. 전이 학습에서는 일반적으로 **ImageNet**과 같은 대규모 이미지 데이터셋에서 훈련된 사전 훈련된 모델로 시작합니다. 이러한 모델은 일반적인 이미지에서 다양한 특징을 추출하는 데 이미 좋은 성능을 보이며, 경우에 따라 이러한 추출된 특징 위에 분류기를 구축하는 것만으로도 좋은 결과를 얻을 수 있습니다. +이 접근법은 **전이 학습**이라고 불리며, 한 신경망 모델에서 다른 모델로 지식을 전이하는 것을 의미합니다. 전이 학습에서는 일반적으로 **ImageNet**과 같은 대규모 이미지 데이터셋에서 훈련된 사전 학습 모델을 시작점으로 사용합니다. 이러한 모델은 이미 일반적인 이미지에서 다양한 특징을 추출하는 데 능숙하며, 많은 경우 이러한 추출된 특징 위에 분류기를 구축하는 것만으로도 좋은 결과를 얻을 수 있습니다. -> ✅ 전이 학습은 교육과 같은 다른 학문 분야에서 발견되는 용어입니다. 이는 한 도메인에서 지식을 가져와 다른 도메인에 적용하는 과정을 의미합니다. +> ✅ 전이 학습은 교육과 같은 다른 학문 분야에서도 발견되는 용어입니다. 이는 한 영역에서 얻은 지식을 다른 영역에 적용하는 과정을 의미합니다. -## 특징 추출기로서의 사전 훈련된 모델 +## 사전 학습된 모델을 특징 추출기로 사용하기 -이전 섹션에서 이야기한 컨볼루션 네트워크는 여러 층으로 구성되어 있으며, 각 층은 이미지에서 저수준의 픽셀 조합(예: 수평/수직 선 또는 스트로크)부터 시작하여 불꽃의 눈과 같은 더 높은 수준의 특징 조합을 추출하는 역할을 합니다. CNN을 충분히 큰 일반적이고 다양한 이미지 데이터셋에서 훈련하면 네트워크는 이러한 공통 특징을 추출하는 방법을 배워야 합니다. +이전 섹션에서 다룬 컨볼루션 네트워크는 여러 층으로 구성되어 있으며, 각 층은 이미지에서 특징을 추출하도록 설계되었습니다. 저수준 픽셀 조합(예: 수평/수직 선 또는 획)에서 시작하여, 더 높은 수준의 특징 조합(예: 불꽃의 눈과 같은 것)에 이르기까지 말입니다. 충분히 크고 다양한 이미지 데이터셋에서 CNN을 훈련시키면 네트워크는 이러한 공통된 특징을 추출하는 방법을 학습할 수 있습니다. -Keras와 PyTorch 모두 일반적인 아키텍처에 대해 사전 훈련된 신경망 가중치를 쉽게 로드하는 기능을 포함하고 있으며, 대부분은 ImageNet 이미지에서 훈련되었습니다. 가장 많이 사용되는 것들은 이전 수업의 [CNN 아키텍처](../07-ConvNets/CNN_Architectures.md) 페이지에 설명되어 있습니다. 특히 다음 중 하나를 고려할 수 있습니다: +Keras와 PyTorch는 대부분 ImageNet 이미지로 훈련된 일반적인 아키텍처에 대해 사전 학습된 신경망 가중치를 쉽게 로드할 수 있는 기능을 제공합니다. 가장 자주 사용되는 모델은 이전 강의의 [CNN 아키텍처](../07-ConvNets/CNN_Architectures.md) 페이지에서 설명되어 있습니다. 특히 다음 모델 중 하나를 고려해볼 수 있습니다: -* **VGG-16/VGG-19**: 상대적으로 간단한 모델이지만 여전히 좋은 정확도를 제공합니다. VGG를 첫 번째 시도로 사용하는 것은 전이 학습이 어떻게 작동하는지 확인하는 좋은 선택입니다. -* **ResNet**: 2015년 Microsoft Research에서 제안한 모델 패밀리입니다. 더 많은 층을 가지고 있어 자원이 더 많이 필요합니다. -* **MobileNet**: 모바일 장치에 적합한 크기가 줄어든 모델 패밀리입니다. 자원이 부족하고 약간의 정확도를 희생할 수 있는 경우 사용하세요. +* **VGG-16/VGG-19**: 비교적 간단한 모델로 여전히 좋은 정확도를 제공합니다. 전이 학습이 어떻게 작동하는지 확인하기 위해 VGG를 첫 시도로 사용하는 것이 좋은 선택일 수 있습니다. +* **ResNet**: Microsoft Research에서 2015년에 제안한 모델 계열로, 더 많은 층을 가지고 있어 더 많은 자원이 필요합니다. +* **MobileNet**: 크기가 줄어든 모델 계열로, 모바일 장치에 적합합니다. 자원이 부족하고 약간의 정확도를 희생할 수 있다면 사용해보세요. -다음은 VGG-16 네트워크가 고양이 사진에서 추출한 샘플 특징입니다: +다음은 VGG-16 네트워크가 고양이 사진에서 추출한 특징의 예입니다: -![VGG-16으로 추출한 특징](../../../../../translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.ko.png) +![VGG-16이 추출한 특징](../../../../../translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.ko.png) ## 고양이와 개 데이터셋 -이번 예제에서는 실제 이미지 분류 시나리오와 매우 유사한 [고양이와 개](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste) 데이터셋을 사용할 것입니다. +이 예제에서는 [고양이와 개](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste) 데이터셋을 사용합니다. 이는 실제 이미지 분류 시나리오와 매우 유사합니다. ## ✍️ 연습: 전이 학습 -해당 노트북에서 전이 학습이 작동하는 모습을 살펴보겠습니다: +다음 노트북에서 전이 학습이 실제로 어떻게 작동하는지 확인해보세요: * [전이 학습 - PyTorch](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) * [전이 학습 - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb) -## 적대적 고양이 시각화 +## 이상적인 고양이 시각화하기 -사전 훈련된 신경망은 *브레인* 내부에 다양한 패턴을 포함하고 있으며, **이상적인 고양이**(뿐만 아니라 이상적인 개, 이상적인 얼룩말 등)의 개념도 포함되어 있습니다. 이 이미지를 어떻게든 **시각화하는 것이 흥미로울 것입니다**. 그러나 이는 간단하지 않습니다. 패턴이 네트워크 가중치 전반에 퍼져 있고, 또한 계층 구조로 조직되어 있기 때문입니다. +사전 학습된 신경망은 **이상적인 고양이**(이상적인 개, 이상적인 얼룩말 등)에 대한 개념을 포함하여 다양한 패턴을 *뇌* 안에 가지고 있습니다. 이러한 이미지를 **시각화**하는 것은 흥미로울 것입니다. 하지만 이는 간단하지 않습니다. 패턴이 네트워크 가중치 전체에 퍼져 있고 계층적 구조로 조직되어 있기 때문입니다. -우리가 취할 수 있는 한 가지 접근 방식은 임의의 이미지로 시작한 다음, **경량 경량 최적화** 기술을 사용하여 네트워크가 그것을 고양이라고 생각하도록 이미지를 조정하는 것입니다. +우리가 취할 수 있는 한 가지 접근법은 무작위 이미지를 시작점으로 사용한 다음 **경사 하강 최적화** 기법을 사용하여 네트워크가 해당 이미지를 고양이라고 생각하도록 이미지를 조정하는 것입니다. ![이미지 최적화 루프](../../../../../translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.ko.png) -하지만 이렇게 하면 무작위 잡음과 매우 유사한 결과를 얻게 됩니다. 이는 *입력 이미지가 고양이라고 생각하게 만드는 여러 방법이 있기 때문*이며, 시각적으로 의미가 없는 방법도 포함됩니다. 이러한 이미지에는 고양이에 전형적인 많은 패턴이 포함되어 있지만, 시각적으로 구별되는 것을 제한하는 요소는 없습니다. +하지만 이렇게 하면 무작위 노이즈와 매우 유사한 결과를 얻게 됩니다. 이는 *네트워크가 입력 이미지를 고양이라고 생각하도록 만드는 방법이 많기 때문*이며, 그중에는 시각적으로 의미가 없는 방법도 포함됩니다. 이러한 이미지는 고양이에 일반적인 많은 패턴을 포함하고 있지만, 시각적으로 뚜렷하게 보이도록 제한하는 요소가 없습니다. -결과를 개선하기 위해 우리는 **변화 손실**이라고 하는 또 다른 항목을 손실 함수에 추가할 수 있습니다. 이는 이미지의 이웃 픽셀이 얼마나 유사한지를 나타내는 메트릭입니다. 변화 손실을 최소화하면 이미지를 더 부드럽게 만들고 잡음을 제거하여 시각적으로 더 매력적인 패턴을 드러냅니다. 다음은 고양이와 얼룩말로 높은 확률로 분류된 "이상적인" 이미지의 예입니다: +결과를 개선하기 위해 **변동 손실**이라는 또 다른 항목을 손실 함수에 추가할 수 있습니다. 이는 이미지의 인접 픽셀이 얼마나 유사한지를 보여주는 메트릭입니다. 변동 손실을 최소화하면 이미지가 더 부드러워지고 노이즈가 제거되어 더 시각적으로 매력적인 패턴이 드러납니다. 다음은 고양이와 얼룩말로 높은 확률로 분류된 "이상적인" 이미지의 예입니다: ![이상적인 고양이](../../../../../translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.ko.png) | ![이상적인 얼룩말](../../../../../translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.ko.png) -----|----- *이상적인 고양이* | *이상적인 얼룩말* -유사한 접근 방식을 사용하여 신경망에 대한 **적대적 공격**을 수행할 수 있습니다. 신경망을 속여 개를 고양이처럼 보이게 하려고 한다고 가정해 보겠습니다. 네트워크가 개로 인식하는 개의 이미지를 가져오면, 경량 경량 최적화를 사용하여 약간 조정한 후 네트워크가 이를 고양이로 분류하기 시작할 때까지 진행할 수 있습니다: +유사한 접근법은 신경망에 대한 **적대적 공격**을 수행하는 데도 사용할 수 있습니다. 예를 들어, 개를 고양이처럼 보이게 만들어 신경망을 속이고 싶다고 가정해봅시다. 네트워크가 개로 인식하는 개의 이미지를 가져와 경사 하강 최적화를 사용하여 네트워크가 이를 고양이로 분류할 때까지 약간 조정할 수 있습니다: ![개 사진](../../../../../translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.ko.png) | ![고양이로 분류된 개 사진](../../../../../translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.ko.png) -----|----- *원래 개 사진* | *고양이로 분류된 개 사진* -위 결과를 재현하기 위한 코드는 다음 노트북에서 확인할 수 있습니다: +위 결과를 재현하는 코드는 다음 노트북에서 확인할 수 있습니다: * [이상적인 고양이와 적대적 고양이 - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/AdversarialCat_TF.ipynb) ## 결론 -전이 학습을 사용하면 사용자 정의 객체 분류 작업을 위한 분류기를 빠르게 구성하고 높은 정확도를 달성할 수 있습니다. 현재 우리가 해결하고 있는 더 복잡한 작업은 더 높은 계산 능력을 요구하며 CPU에서 쉽게 해결할 수 없습니다. 다음 단원에서는 더 낮은 계산 자원을 사용하여 동일한 모델을 훈련하기 위해 더 가벼운 구현을 사용해 볼 것이며, 이는 정확도가 약간 낮아지는 결과를 가져올 것입니다. +전이 학습을 사용하면 사용자 정의 객체 분류 작업을 위한 분류기를 빠르게 구성하고 높은 정확도를 달성할 수 있습니다. 이제 우리가 해결하려는 더 복잡한 작업은 더 높은 계산 능력을 요구하며 CPU에서 쉽게 해결할 수 없습니다. 다음 단원에서는 동일한 모델을 더 낮은 계산 자원을 사용하여 훈련하는 경량 구현을 시도해볼 것이며, 이는 약간 낮은 정확도를 초래합니다. ## 🚀 도전 과제 -동반된 노트북에는 전이 지식이 유사한 훈련 데이터(아마도 새로운 동물 유형)와 가장 잘 작동하는 방법에 대한 노트가 있습니다. 완전히 새로운 유형의 이미지로 실험을 해보아 전이 지식 모델이 얼마나 잘 작동하는지 확인해 보세요. +동반 노트북의 하단에는 전이 학습이 어느 정도 유사한 훈련 데이터(예: 새로운 종류의 동물)와 가장 잘 작동한다는 내용이 있습니다. 완전히 새로운 유형의 이미지를 사용하여 실험을 진행하며 전이 학습 모델이 얼마나 잘 또는 못 작동하는지 확인해보세요. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) ## 복습 및 자기 학습 -모델 훈련의 다른 방법에 대한 지식을 심화하기 위해 [TrainingTricks.md](TrainingTricks.md)를 읽어보세요. +[TrainingTricks.md](TrainingTricks.md)를 읽고 모델을 훈련시키는 다른 방법에 대한 지식을 심화하세요. ## [과제](lab/README.md) -이번 실습에서는 35종의 고양이와 개가 포함된 실제 [옥스포드-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 애완동물 데이터셋을 사용하여 전이 학습 분류기를 구축할 것입니다. +이 실습에서는 35종의 고양이와 개 품종이 포함된 실제 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 애완동물 데이터셋을 사용하여 전이 학습 분류기를 구축할 것입니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md b/translations/ko/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md index 5704bcb5..bbb93a45 100644 --- a/translations/ko/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md +++ b/translations/ko/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md @@ -1,108 +1,117 @@ -# 딥러닝 훈련 팁 + +# 딥러닝 학습 팁 -신경망이 깊어짐에 따라 훈련 과정은 점점 더 어려워집니다. 주요 문제 중 하나는 이른바 [소실 기울기](https://en.wikipedia.org/wiki/Vanishing_gradient_problem) 또는 [폭발 기울기](https://deepai.org/machine-learning-glossary-and-terms/exploding-gradient-problem#:~:text=Exploding%20gradients%20are%20a%20problem,updates%20are%20small%20and%20controlled.)입니다. [이 글](https://towardsdatascience.com/the-vanishing-exploding-gradient-problem-in-deep-neural-networks-191358470c11)은 이러한 문제에 대한 좋은 소개를 제공합니다. +신경망이 깊어질수록 학습 과정이 점점 더 어려워집니다. 주요 문제 중 하나는 [소실 기울기](https://en.wikipedia.org/wiki/Vanishing_gradient_problem) 또는 [폭발 기울기](https://deepai.org/machine-learning-glossary-and-terms/exploding-gradient-problem#:~:text=Exploding%20gradients%20are%20a%20problem,updates%20are%20small%20and%20controlled.)입니다. [이 글](https://towardsdatascience.com/the-vanishing-exploding-gradient-problem-in-deep-neural-networks-191358470c11)은 이러한 문제에 대한 좋은 소개를 제공합니다. -딥 네트워크의 훈련을 더 효율적으로 만들기 위해 사용할 수 있는 몇 가지 기술이 있습니다. +깊은 네트워크의 학습을 더 효율적으로 만들기 위해 사용할 수 있는 몇 가지 기술이 있습니다. -## 값 유지하기 +## 값을 적절한 범위로 유지하기 -수치 계산을 더 안정적으로 만들기 위해, 신경망 내의 모든 값이 일반적으로 [-1..1] 또는 [0..1] 범위 내에 있도록 하는 것이 중요합니다. 이는 엄격한 요구 사항은 아니지만, 부동 소수점 계산의 특성상 서로 다른 크기의 값들은 함께 정확하게 조작될 수 없습니다. 예를 들어, 10-10과 1010을 더하면 1010이 나올 가능성이 높습니다. 작은 값이 큰 값과 같은 차원으로 "변환"되기 때문에, 가수 부분이 손실됩니다. +수치 계산을 더 안정적으로 만들기 위해, 신경망 내 모든 값이 적절한 범위, 일반적으로 [-1..1] 또는 [0..1]에 있도록 해야 합니다. 이는 엄격한 요구 사항은 아니지만, 부동소수점 계산의 특성상 서로 다른 크기의 값을 정확히 조작하기 어렵습니다. 예를 들어, 10-10과 1010을 더하면, 작은 값이 큰 값과 동일한 차수로 "변환"되어 가수부가 손실되기 때문에 1010이 될 가능성이 높습니다. -대부분의 활성화 함수는 [-1..1] 주변에서 비선형성을 가지므로, 모든 입력 데이터를 [-1..1] 또는 [0..1] 범위로 스케일링하는 것이 합리적입니다. +대부분의 활성화 함수는 [-1..1] 범위에서 비선형성을 가지므로, 모든 입력 데이터를 [-1..1] 또는 [0..1] 범위로 스케일링하는 것이 합리적입니다. ## 초기 가중치 초기화 -이상적으로, 네트워크 레이어를 통과한 후 값들이 동일한 범위에 있도록 하고자 합니다. 따라서 가중치를 초기화할 때 값의 분포를 유지하는 것이 중요합니다. +이상적으로는 네트워크 계층을 통과한 후에도 값이 동일한 범위에 있도록 하고 싶습니다. 따라서 가중치를 초기화할 때 값의 분포를 유지하도록 설정하는 것이 중요합니다. -정규 분포 **N(0,1)**는 좋은 아이디어가 아닙니다. 왜냐하면 *n* 개의 입력이 있을 경우, 출력의 표준 편차는 *n*이 되고, 값들이 [0..1] 범위를 벗어날 가능성이 높기 때문입니다. +정규 분포 **N(0,1)**는 좋은 선택이 아닙니다. 입력이 *n*개라면 출력의 표준 편차는 *n*이 되고, 값이 [0..1] 범위를 벗어날 가능성이 높기 때문입니다. 다음과 같은 초기화 방법이 자주 사용됩니다: - * 균등 분포 -- `uniform` - * **N(0,1/n)** -- `gaussian` - * **N(0,1/√n_in)**는 평균이 0이고 표준 편차가 1인 입력에 대해 같은 평균/표준 편차가 유지되도록 보장합니다. - * **N(0,√2/(n_in+n_out))** -- 이른바 **자비에 초기화** (`glorot`)로, 전방 및 후방 전파 동안 신호를 범위 내에 유지하는 데 도움이 됩니다. +- 균등 분포 -- `uniform` +- **N(0,1/n)** -- `gaussian` +- **N(0,1/√n_in)**: 평균이 0이고 표준 편차가 1인 입력에 대해 동일한 평균/표준 편차를 유지 +- **N(0,√2/(n_in+n_out))**: **Xavier 초기화** (`glorot`)라고 불리며, 순전파와 역전파 동안 신호를 범위 내에 유지하는 데 도움을 줌 ## 배치 정규화 -적절한 가중치 초기화가 이루어지더라도, 훈련 중에 가중치가 임의로 커지거나 작아질 수 있으며, 이로 인해 신호가 적절한 범위를 벗어날 수 있습니다. 우리는 **정규화** 기술 중 하나를 사용하여 신호를 다시 가져올 수 있습니다. 여러 가지 방법이 있지만 (가중치 정규화, 레이어 정규화 등), 가장 많이 사용되는 것은 배치 정규화입니다. +적절한 가중치 초기화에도 불구하고, 학습 중 가중치가 임의로 커지거나 작아질 수 있으며, 이로 인해 신호가 적절한 범위를 벗어날 수 있습니다. **정규화** 기술을 사용하여 신호를 다시 적절한 범위로 되돌릴 수 있습니다. 여러 정규화 기법(가중치 정규화, 계층 정규화 등)이 있지만, 가장 자주 사용되는 것은 배치 정규화입니다. -**배치 정규화**의 아이디어는 미니배치 전반의 모든 값을 고려하고, 이러한 값에 기반하여 정규화를 수행하는 것입니다 (즉, 평균을 빼고 표준 편차로 나누기). 이는 가중치를 적용한 후 활성화 함수 이전에 이 정규화를 수행하는 네트워크 레이어로 구현됩니다. 결과적으로 우리는 더 높은 최종 정확도와 더 빠른 훈련을 경험할 가능성이 높습니다. +**배치 정규화**의 아이디어는 미니배치의 모든 값을 고려하여 평균을 빼고 표준 편차로 나누는 방식으로 정규화를 수행하는 것입니다. 이는 가중치를 적용한 후, 활성화 함수 전에 수행되는 네트워크 계층으로 구현됩니다. 결과적으로 더 높은 최종 정확도와 더 빠른 학습을 기대할 수 있습니다. -여기 배치 정규화에 대한 [원본 논문](https://arxiv.org/pdf/1502.03167.pdf), [위키피디아의 설명](https://en.wikipedia.org/wiki/Batch_normalization), 그리고 [좋은 소개 블로그 포스트](https://towardsdatascience.com/batch-normalization-in-3-levels-of-understanding-14c2da90a338) (그리고 [러시아어로 된 글](https://habrahabr.ru/post/309302/))이 있습니다. +여기 배치 정규화에 대한 [원본 논문](https://arxiv.org/pdf/1502.03167.pdf), [위키백과 설명](https://en.wikipedia.org/wiki/Batch_normalization), 그리고 [좋은 입문 블로그 글](https://towardsdatascience.com/batch-normalization-in-3-levels-of-understanding-14c2da90a338) (그리고 [러시아어 버전](https://habrahabr.ru/post/309302/))이 있습니다. ## 드롭아웃 -**드롭아웃**은 훈련 중에 일정 비율의 임의의 뉴런을 제거하는 흥미로운 기술입니다. 이는 제거할 뉴런의 비율(일반적으로 10%-50%)이라는 하나의 매개변수를 가진 레이어로 구현되며, 훈련 중에는 입력 벡터의 임의의 요소를 0으로 만들고 다음 레이어로 전달합니다. +**드롭아웃**은 학습 중 무작위로 일정 비율의 뉴런을 제거하는 흥미로운 기술입니다. 이는 하나의 매개변수(제거할 뉴런의 비율, 일반적으로 10%-50%)를 가진 계층으로 구현되며, 학습 중 입력 벡터의 무작위 요소를 0으로 설정한 후 다음 계층으로 전달합니다. -이것이 이상한 아이디어처럼 들릴 수 있지만, [`Dropout.ipynb`](../../../../../lessons/4-ComputerVision/08-TransferLearning/Dropout.ipynb) 노트북에서 MNIST 숫자 분류기 훈련에 대한 드롭아웃의 효과를 확인할 수 있습니다. 이는 훈련을 가속화하고 더 적은 훈련 에포크로 더 높은 정확도를 달성할 수 있게 해줍니다. +이것이 이상하게 들릴 수 있지만, [`Dropout.ipynb`](../../../../../lessons/4-ComputerVision/08-TransferLearning/Dropout.ipynb) 노트북에서 MNIST 숫자 분류기를 학습할 때 드롭아웃의 효과를 확인할 수 있습니다. 이는 학습 속도를 높이고 더 적은 학습 에포크로 더 높은 정확도를 달성할 수 있게 합니다. -이 효과는 여러 가지 방법으로 설명될 수 있습니다: +이 효과는 여러 가지로 설명될 수 있습니다: - * 모델에 대한 임의의 충격 요인으로 간주될 수 있으며, 이는 최적화를 지역 최소값에서 벗어나게 합니다. - * *암묵적인 모델 평균화*로 간주될 수 있습니다. 드롭아웃 동안 약간 다른 모델을 훈련하고 있다고 볼 수 있습니다. +- 모델에 무작위 충격 요인을 제공하여 최적화가 국소 최소값에서 벗어나도록 할 수 있습니다. +- *암묵적 모델 평균화*로 간주될 수 있습니다. 드롭아웃 동안 약간 다른 모델을 학습한다고 볼 수 있기 때문입니다. -> *어떤 사람들은 술에 취한 사람이 무언가를 배우려고 할 때, 다음 날 아침에 더 잘 기억한다고 말합니다. 이는 일부 기능이 제대로 작동하지 않는 뉴런이 의미를 이해하기 위해 더 잘 적응하려고 하기 때문이라고 합니다. 우리는 이것이 사실인지 실험해본 적이 없습니다.* +> *어떤 사람들은 술에 취한 사람이 무언가를 배우려고 할 때, 술에 취하지 않은 사람보다 다음 날 더 잘 기억한다고 말합니다. 이는 일부 오작동하는 뉴런을 가진 뇌가 의미를 더 잘 파악하려고 적응하기 때문이라고 합니다. 우리가 이 말이 사실인지 아닌지는 테스트해본 적이 없습니다.* ## 과적합 방지 -딥러닝에서 매우 중요한 측면 중 하나는 [과적합](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)을 방지할 수 있는 능력입니다. 매우 강력한 신경망 모델을 사용하는 것이 매력적일 수 있지만, 항상 모델 매개변수의 수와 훈련 샘플의 수를 균형 있게 맞춰야 합니다. +딥러닝에서 매우 중요한 측면 중 하나는 [과적합](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)을 방지하는 것입니다. 매우 강력한 신경망 모델을 사용하는 것이 유혹적일 수 있지만, 항상 모델 매개변수의 수와 학습 샘플 수의 균형을 맞춰야 합니다. -> 우리가 이전에 소개한 [과적합](../../3-NeuralNetworks/05-Frameworks/Overfitting.md) 개념을 이해하고 있는지 확인하세요! +> 이전에 소개한 [과적합](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)의 개념을 반드시 이해하세요! -과적합을 방지하는 방법에는 여러 가지가 있습니다: +과적합을 방지하는 몇 가지 방법이 있습니다: - * 조기 중단 -- 검증 세트에서 오류를 지속적으로 모니터링하고, 검증 오류가 증가하기 시작하면 훈련을 중단합니다. - * 명시적 가중치 감소 / 정규화 -- 높은 절대값의 가중치에 대해 손실 함수에 추가적인 패널티를 추가하여 모델이 매우 불안정한 결과를 얻지 못하도록 합니다. - * 모델 평균화 -- 여러 모델을 훈련하고 결과를 평균화합니다. 이는 분산을 최소화하는 데 도움이 됩니다. - * 드롭아웃 (암묵적 모델 평균화) +- 조기 종료(Early stopping): 검증 세트의 오류를 지속적으로 모니터링하고, 검증 오류가 증가하기 시작하면 학습을 중단 +- 명시적 가중치 감소 / 정규화: 손실 함수에 가중치의 절대값이 큰 경우 추가 페널티를 부여하여 모델이 매우 불안정한 결과를 내는 것을 방지 +- 모델 평균화: 여러 모델을 학습한 후 결과를 평균화. 이는 분산을 최소화하는 데 도움을 줌 +- 드롭아웃 (암묵적 모델 평균화) -## 옵티마이저 / 훈련 알고리즘 +## 최적화 알고리즘 / 학습 알고리즘 -훈련의 또 다른 중요한 측면은 좋은 훈련 알고리즘을 선택하는 것입니다. 고전적인 **경량 경사 하강법**은 합리적인 선택이지만, 때때로 너무 느리거나 다른 문제를 일으킬 수 있습니다. +학습에서 또 다른 중요한 측면은 좋은 학습 알고리즘을 선택하는 것입니다. 고전적인 **경사 하강법**은 합리적인 선택이지만, 때로는 너무 느리거나 다른 문제를 초래할 수 있습니다. -딥러닝에서는 **확률적 경량 경사 하강법**(SGD)을 사용합니다. 이는 훈련 세트에서 임의로 선택된 미니배치에 적용된 경량 경사 하강법입니다. 가중치는 다음 공식을 사용하여 조정됩니다: +딥러닝에서는 **확률적 경사 하강법**(SGD)을 사용합니다. 이는 학습 세트에서 무작위로 선택된 미니배치에 대해 경사 하강법을 적용하는 방식입니다. 가중치는 다음 공식을 사용하여 조정됩니다: wt+1 = wt - η∇ℒ ### 모멘텀 -**모멘텀 SGD**에서는 이전 단계의 기울기 일부를 유지합니다. 이는 우리가 관성으로 어딘가 이동할 때, 다른 방향으로 주먹을 맞으면 우리의 궤적이 즉시 바뀌지 않고 원래 움직임의 일부를 유지하는 것과 유사합니다. 여기서 우리는 *속도*를 나타내기 위해 또 다른 벡터 v를 도입합니다: +**모멘텀 SGD**에서는 이전 단계의 기울기의 일부를 유지합니다. 이는 우리가 관성으로 어딘가로 이동하고 있을 때, 다른 방향에서 충격을 받으면 즉시 궤적이 바뀌지 않고 원래 움직임의 일부를 유지하는 것과 유사합니다. 여기서 *속도*를 나타내는 또 다른 벡터 v를 도입합니다: -* vt+1 = γ vt - η∇ℒ -* wt+1 = wt + vt+1 +- vt+1 = γ vt - η∇ℒ +- wt+1 = wt + vt+1 -여기서 매개변수 γ는 우리가 관성을 얼마나 고려하는지를 나타냅니다: γ=0은 고전적인 SGD에 해당하고, γ=1은 순수한 운동 방정식입니다. +여기서 매개변수 γ는 관성을 얼마나 고려할지를 나타냅니다: γ=0은 고전적인 SGD에 해당하며, γ=1은 순수한 운동 방정식입니다. ### Adam, Adagrad 등 -각 레이어에서 신호를 어떤 행렬 Wi로 곱하기 때문에 ||Wi||에 따라 기울기가 감소하거나 0에 가까워지거나 무한히 증가할 수 있습니다. 이것이 바로 폭발/소실 기울기 문제의 본질입니다. +각 계층에서 신호를 어떤 행렬 Wi로 곱하기 때문에, ||Wi||에 따라 기울기가 0에 가까워지거나 무한히 커질 수 있습니다. 이것이 소실/폭발 기울기 문제의 본질입니다. -이 문제에 대한 해결책 중 하나는 방정식에서 기울기의 방향만 사용하고 절대값은 무시하는 것입니다. 즉, +이 문제를 해결하는 방법 중 하나는 방정식에서 기울기의 방향만 사용하고 절대값은 무시하는 것입니다. 즉, wt+1 = wt - η(∇ℒ/||∇ℒ||), 여기서 ||∇ℒ|| = √∑(∇ℒ)2 -이 알고리즘은 **Adagrad**라고 불립니다. 같은 아이디어를 사용하는 다른 알고리즘으로는 **RMSProp**, **Adam**이 있습니다. +이 알고리즘은 **Adagrad**라고 불립니다. 동일한 아이디어를 사용하는 다른 알고리즘으로는 **RMSProp**, **Adam**이 있습니다. -> **Adam**은 많은 응용 프로그램에 대해 매우 효율적인 알고리즘으로 간주되므로, 어떤 것을 사용할지 확신이 없다면 Adam을 사용하세요. +> **Adam**은 많은 응용 분야에서 매우 효율적인 알고리즘으로 간주되므로, 어떤 것을 사용할지 확신이 없다면 Adam을 사용하세요. ### 기울기 클리핑 -기울기 클리핑은 위의 아이디어를 확장한 것입니다. ||∇ℒ|| ≤ θ인 경우, 우리는 가중치 최적화에서 원래 기울기를 고려하고, ||∇ℒ|| > θ인 경우에는 기울기를 그 노름으로 나눕니다. 여기서 θ는 매개변수이며, 대부분의 경우 θ=1 또는 θ=10을 사용할 수 있습니다. +기울기 클리핑은 위 아이디어의 확장입니다. ||∇ℒ|| ≤ θ일 때는 가중치 최적화에서 원래 기울기를 고려하고, ||∇ℒ|| > θ일 때는 기울기를 그 노름으로 나눕니다. 여기서 θ는 매개변수이며, 대부분의 경우 θ=1 또는 θ=10을 사용할 수 있습니다. ### 학습률 감소 -훈련의 성공은 종종 학습률 매개변수 η에 달려 있습니다. η의 큰 값이 더 빠른 훈련을 초래한다고 가정하는 것이 합리적입니다. 이는 일반적으로 훈련 초기에 원하는 것이며, 이후에는 더 작은 η 값이 네트워크를 미세 조정하는 데 도움이 됩니다. 따라서 대부분의 경우 훈련 과정에서 η를 감소시키고자 합니다. +학습 성공은 종종 학습률 매개변수 η에 달려 있습니다. 학습 초반에는 η 값이 클수록 학습 속도가 빨라지고, 이후에는 η 값을 작게 하여 네트워크를 미세 조정하는 것이 논리적입니다. 따라서 대부분의 경우 학습 과정에서 η를 점진적으로 줄이고자 합니다. -이는 각 훈련 에포크 후 η에 어떤 수(예: 0.98)를 곱하거나 더 복잡한 **학습률 스케줄**을 사용하여 수행할 수 있습니다. +이는 학습 에포크마다 η에 어떤 숫자(예: 0.98)를 곱하거나, 더 복잡한 **학습률 스케줄**을 사용하는 방식으로 수행할 수 있습니다. ## 다양한 네트워크 아키텍처 -문제에 적합한 네트워크 아키텍처를 선택하는 것은 까다로울 수 있습니다. 일반적으로 우리는 특정 작업(또는 유사한 작업)에 대해 효과가 입증된 아키텍처를 선택합니다. 여기 [컴퓨터 비전을 위한 신경망 아키텍처에 대한 좋은 개요](https://www.topbots.com/a-brief-history-of-neural-network-architectures/)가 있습니다. +문제에 적합한 네트워크 아키텍처를 선택하는 것은 까다로울 수 있습니다. 일반적으로는 특정 작업(또는 유사한 작업)에 대해 효과가 입증된 아키텍처를 선택합니다. 여기 [컴퓨터 비전용 신경망 아키텍처에 대한 좋은 개요](https://www.topbots.com/a-brief-history-of-neural-network-architectures/)가 있습니다. -> 우리가 가진 훈련 샘플의 수에 대해 충분히 강력한 아키텍처를 선택하는 것이 중요합니다. 너무 강력한 모델을 선택하면 [과적합](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)으로 이어질 수 있습니다. +> 우리가 가진 학습 샘플 수에 대해 충분히 강력한 아키텍처를 선택하는 것이 중요합니다. 너무 강력한 모델을 선택하면 [과적합](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)이 발생할 수 있습니다. -또한, 필요한 복잡성에 자동으로 조정되는 아키텍처를 사용하는 것도 좋은 방법입니다. 어느 정도까지는 **ResNet** 아키텍처와 **Inception**이 자가 조정됩니다. [컴퓨터 비전 아키텍처에 대한 더 많은 정보](../07-ConvNets/CNN_Architectures.md)도 참고하세요. +또 다른 좋은 방법은 필요한 복잡성에 자동으로 조정되는 아키텍처를 사용하는 것입니다. 어느 정도까지는 **ResNet** 아키텍처와 **Inception**이 자동 조정됩니다. [컴퓨터 비전 아키텍처에 대한 추가 정보](../07-ConvNets/CNN_Architectures.md) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/08-TransferLearning/lab/README.md b/translations/ko/lessons/4-ComputerVision/08-TransferLearning/lab/README.md index 3e7f7ffd..4c0cc233 100644 --- a/translations/ko/lessons/4-ComputerVision/08-TransferLearning/lab/README.md +++ b/translations/ko/lessons/4-ComputerVision/08-TransferLearning/lab/README.md @@ -1,16 +1,25 @@ -# 전이 학습을 이용한 옥스포드 반려동물 분류 + +# 전이 학습을 활용한 Oxford Pets 분류 -[초보자를 위한 AI 커리큘럼](https://github.com/microsoft/ai-for-beginners)에서의 실습 과제입니다. +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서 제공하는 실습 과제입니다. ## 과제 -반려동물 보육원을 위한 애플리케이션을 개발해야 한다고 상상해 보세요. 이러한 애플리케이션의 훌륭한 기능 중 하나는 사진에서 품종을 자동으로 발견하는 것입니다. 이번 과제에서는 전이 학습을 사용하여 [옥스포드-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 반려동물 데이터셋의 실제 반려동물 이미지를 분류할 것입니다. +애완동물 보육원을 위한 애플리케이션을 개발해야 한다고 상상해보세요. 이러한 애플리케이션의 훌륭한 기능 중 하나는 사진을 통해 자동으로 품종을 식별하는 것입니다. 이번 과제에서는 전이 학습을 사용하여 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 애완동물 데이터셋의 실제 애완동물 이미지를 분류할 것입니다. ## 데이터셋 -우리는 35가지의 서로 다른 품종의 개와 고양이를 포함한 원본 [옥스포드-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 반려동물 데이터셋을 사용할 것입니다. +우리는 원본 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 애완동물 데이터셋을 사용할 것입니다. 이 데이터셋은 35가지 다른 품종의 개와 고양이를 포함하고 있습니다. -데이터셋을 다운로드하려면 다음 코드 스니펫을 사용하세요: +데이터셋을 다운로드하려면 아래 코드 스니펫을 사용하세요: ```python !wget https://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz @@ -18,13 +27,13 @@ !rm images.tar.gz ``` -## 노트북 시작하기 +## 시작 노트북 -[OxfordPets.ipynb](../../../../../../lessons/4-ComputerVision/08-TransferLearning/lab/OxfordPets.ipynb) 파일을 열어 실습을 시작하세요. +실습을 시작하려면 [OxfordPets.ipynb](../../../../../../lessons/4-ComputerVision/08-TransferLearning/lab/OxfordPets.ipynb)를 열어보세요. ## 주요 내용 -전이 학습과 사전 훈련된 네트워크는 실제 이미지 분류 문제를 상대적으로 쉽게 해결할 수 있게 해줍니다. 그러나 사전 훈련된 네트워크는 유사한 종류의 이미지에서 잘 작동하며, 만약 우리가 매우 다른 이미지(예: 의료 이미지)를 분류하기 시작하면, 훨씬 더 나쁜 결과를 얻을 가능성이 높습니다. +전이 학습과 사전 학습된 네트워크를 활용하면 실제 이미지 분류 문제를 비교적 쉽게 해결할 수 있습니다. 하지만 사전 학습된 네트워크는 유사한 종류의 이미지에서 잘 작동하며, 만약 매우 다른 이미지를 분류하려고 한다면(예: 의료 이미지), 결과가 훨씬 나빠질 가능성이 높습니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 것이 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/09-Autoencoders/README.md b/translations/ko/lessons/4-ComputerVision/09-Autoencoders/README.md index b0fdf528..74b6705f 100644 --- a/translations/ko/lessons/4-ComputerVision/09-Autoencoders/README.md +++ b/translations/ko/lessons/4-ComputerVision/09-Autoencoders/README.md @@ -1,14 +1,23 @@ + # 오토인코더 -CNN을 훈련할 때의 문제 중 하나는 많은 레이블이 있는 데이터가 필요하다는 것입니다. 이미지 분류의 경우, 이미지를 서로 다른 클래스로 분리해야 하며, 이는 수동적인 작업입니다. +CNN(합성곱 신경망)을 훈련할 때, 문제 중 하나는 많은 양의 라벨링된 데이터가 필요하다는 점입니다. 이미지 분류의 경우, 이미지를 서로 다른 클래스에 나누는 작업이 필요하며, 이는 수작업으로 이루어집니다. ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/109) -하지만 CNN 특징 추출기를 훈련하기 위해 원시(레이블이 없는) 데이터를 사용하고 싶을 수도 있습니다. 이를 **자기 지도 학습**이라고 합니다. 레이블 대신, 우리는 훈련 이미지를 네트워크의 입력과 출력으로 사용합니다. **오토인코더**의 주요 아이디어는 입력 이미지를 어떤 **잠재 공간**(보통은 더 작은 크기의 벡터)으로 변환하는 **인코더 네트워크**가 있고, 원래 이미지를 재구성하는 것을 목표로 하는 **디코더 네트워크**가 있다는 것입니다. +하지만, CNN 특징 추출기를 훈련하기 위해 라벨이 없는 원시 데이터(비라벨링 데이터)를 사용하고 싶을 수도 있습니다. 이를 **자기 지도 학습(self-supervised learning)**이라고 합니다. 라벨 대신, 훈련 이미지를 네트워크의 입력과 출력으로 사용합니다. **오토인코더(autoencoder)**의 주요 아이디어는 입력 이미지를 **잠재 공간(latent space)**으로 변환하는 **인코더 네트워크**와, 원본 이미지를 재구성하는 것을 목표로 하는 **디코더 네트워크**를 사용하는 것입니다. -> ✅ [오토인코더](https://wikipedia.org/wiki/Autoencoder)는 "레이블이 없는 데이터의 효율적인 코딩을 학습하기 위해 사용되는 인공 신경망의 일종입니다." +> ✅ [오토인코더](https://wikipedia.org/wiki/Autoencoder)는 "라벨이 없는 데이터의 효율적인 코딩을 학습하기 위해 사용되는 인공 신경망의 한 유형"입니다. -우리는 원래 이미지에서 가능한 한 많은 정보를 캡처하기 위해 오토인코더를 훈련하고 있으므로, 네트워크는 의미를 포착하기 위해 입력 이미지의 최상의 **임베딩**을 찾으려고 합니다. +오토인코더를 훈련할 때, 네트워크는 원본 이미지를 가능한 한 정확하게 재구성하기 위해 입력 이미지의 최적의 **임베딩(embedding)**을 찾으려고 합니다. ![AutoEncoder Diagram](../../../../../translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.ko.jpg) @@ -16,43 +25,43 @@ CNN을 훈련할 때의 문제 중 하나는 많은 레이블이 있는 데이 ## 오토인코더 사용 시나리오 -원래 이미지를 재구성하는 것이 그 자체로는 유용해 보이지 않지만, 오토인코더가 특히 유용한 몇 가지 시나리오가 있습니다: +원본 이미지를 재구성하는 것이 그 자체로는 유용하지 않아 보일 수 있지만, 오토인코더가 특히 유용한 몇 가지 시나리오가 있습니다: -* **시각화를 위한 이미지 차원 축소** 또는 **이미지 임베딩 훈련**. 일반적으로 오토인코더는 PCA보다 더 나은 결과를 제공합니다. 왜냐하면 이미지의 공간적 특성과 계층적 특징을 고려하기 때문입니다. -* **노이즈 제거**, 즉 이미지에서 노이즈를 제거하는 것입니다. 노이즈는 많은 쓸모없는 정보를 담고 있기 때문에, 오토인코더는 이를 상대적으로 작은 잠재 공간에 모두 맞출 수 없으며, 따라서 이미지의 중요한 부분만 캡처합니다. 노이즈 제거기를 훈련할 때, 우리는 원래 이미지를 시작으로 하고, 인위적으로 추가된 노이즈가 있는 이미지를 오토인코더의 입력으로 사용합니다. -* **슈퍼 해상도**, 이미지 해상도 증가. 우리는 고해상도 이미지를 시작으로 하고, 낮은 해상도의 이미지를 오토인코더 입력으로 사용합니다. -* **생성 모델**. 오토인코더를 훈련한 후, 디코더 부분을 사용하여 임의의 잠재 벡터에서 새로운 객체를 생성할 수 있습니다. +* **이미지 차원 축소를 통한 시각화** 또는 **이미지 임베딩 훈련**. 오토인코더는 이미지의 공간적 특성과 계층적 특징을 고려하기 때문에, 일반적으로 PCA보다 더 나은 결과를 제공합니다. +* **노이즈 제거(denoising)**, 즉 이미지에서 노이즈를 제거하는 작업. 노이즈는 쓸모없는 정보를 많이 포함하고 있기 때문에, 오토인코더는 상대적으로 작은 잠재 공간에 이를 모두 담을 수 없으며, 따라서 이미지의 중요한 부분만 캡처합니다. 노이즈 제거기를 훈련할 때는 원본 이미지를 사용하고, 인위적으로 노이즈를 추가한 이미지를 오토인코더의 입력으로 사용합니다. +* **초해상도(super-resolution)**, 즉 이미지 해상도를 높이는 작업. 고해상도 이미지를 시작점으로 사용하고, 저해상도 이미지를 오토인코더 입력으로 사용합니다. +* **생성 모델(generative models)**. 오토인코더를 훈련한 후, 디코더 부분을 사용하여 무작위 잠재 벡터에서 새로운 객체를 생성할 수 있습니다. -## 변분 오토인코더 (VAE) +## 변분 오토인코더(VAE) -전통적인 오토인코더는 입력 데이터의 차원을 줄이면서 입력 이미지의 중요한 특징을 파악합니다. 그러나 잠재 벡터는 종종 그다지 의미가 없습니다. 예를 들어, MNIST 데이터셋을 예로 들면, 서로 다른 잠재 벡터에 해당하는 숫자를 파악하는 것은 쉬운 일이 아닙니다. 왜냐하면 가까운 잠재 벡터가 반드시 같은 숫자에 해당하지는 않기 때문입니다. +전통적인 오토인코더는 입력 데이터를 어떤 방식으로든 차원을 축소하여 입력 이미지의 중요한 특징을 파악합니다. 하지만, 잠재 벡터는 종종 직관적으로 이해하기 어렵습니다. 예를 들어, MNIST 데이터셋을 사용한다고 가정했을 때, 서로 다른 잠재 벡터가 어떤 숫자에 해당하는지 파악하는 것은 쉽지 않습니다. 이는 가까운 잠재 벡터가 반드시 동일한 숫자에 해당하지 않기 때문입니다. -반면에 *생성적* 모델을 훈련하기 위해서는 잠재 공간에 대한 어느 정도의 이해가 필요합니다. 이 아이디어는 **변분 오토인코더**(VAE)로 이어집니다. +반면, *생성* 모델을 훈련하려면 잠재 공간에 대한 이해가 있는 것이 더 좋습니다. 이러한 아이디어는 **변분 오토인코더(Variational Auto-Encoder, VAE)**로 이어집니다. -VAE는 잠재 매개변수의 *통계적 분포*를 예측하는 방법을 배우는 오토인코더로, 이를 **잠재 분포**라고 합니다. 예를 들어, 우리는 잠재 벡터가 평균 zmean과 표준 편차 zsigma를 가지며 정규 분포를 이루기를 원할 수 있습니다(평균과 표준 편차 모두 어떤 차원 d의 벡터입니다). VAE의 인코더는 이러한 매개변수를 예측하는 방법을 배우고, 그런 다음 디코더는 이 분포에서 임의의 벡터를 가져와 객체를 재구성합니다. +VAE는 잠재 매개변수의 *통계적 분포*를 예측하도록 학습하는 오토인코더입니다. 이를 **잠재 분포(latent distribution)**라고 합니다. 예를 들어, 잠재 벡터가 평균 zmean과 표준편차 zsigma를 가진 정규 분포를 따르도록 하고 싶을 수 있습니다(평균과 표준편차는 모두 특정 차원의 벡터입니다). VAE의 인코더는 이러한 매개변수를 예측하도록 학습하며, 디코더는 이 분포에서 무작위 벡터를 가져와 객체를 재구성합니다. 요약하자면: - * 입력 벡터에서 `z_mean` 및 `z_log_sigma`를 예측합니다(표준 편차 자체를 예측하는 대신, 그 로그를 예측합니다). - * 분포 N(zmean,exp(zlog\_sigma))에서 벡터 `sample`를 샘플링합니다. - * 디코더는 `sample`를 입력 벡터로 사용하여 원래 이미지를 디코딩하려고 합니다. +* 입력 벡터에서 `z_mean`과 `z_log_sigma`를 예측합니다(표준편차 자체 대신, 표준편차의 로그를 예측합니다). +* 분포 N(zmean,exp(zlog_sigma))에서 `sample` 벡터를 샘플링합니다. +* 디코더는 `sample`을 입력 벡터로 사용하여 원본 이미지를 디코딩하려고 시도합니다. - + -> 이미지 출처: [이 블로그 포스트](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) by Isaak Dykeman +> 이미지 출처: [Isaak Dykeman의 블로그 글](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) -변분 오토인코더는 두 부분으로 구성된 복잡한 손실 함수를 사용합니다: +변분 오토인코더는 두 가지 부분으로 구성된 복잡한 손실 함수를 사용합니다: -* **재구성 손실**은 재구성된 이미지가 목표와 얼마나 가까운지를 나타내는 손실 함수입니다(평균 제곱 오차(MSE)일 수 있습니다). 이것은 일반 오토인코더와 동일한 손실 함수입니다. -* **KL 손실**은 잠재 변수 분포가 정규 분포에 가깝도록 보장합니다. 이는 두 통계적 분포가 얼마나 유사한지를 추정하는 메트릭인 [쿨백-라이블러 발산](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained)에 기반합니다. +* **재구성 손실(Reconstruction loss)**: 재구성된 이미지가 목표 이미지와 얼마나 가까운지를 나타내는 손실 함수입니다(평균 제곱 오차, MSE 등을 사용할 수 있습니다). 이는 일반 오토인코더에서 사용하는 손실 함수와 동일합니다. +* **KL 손실(KL loss)**: 잠재 변수 분포가 정규 분포에 가깝게 유지되도록 보장합니다. 이는 [쿨백-라이블러 발산(Kullback-Leibler divergence)](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained)이라는 개념에 기반하며, 두 통계적 분포가 얼마나 유사한지를 측정하는 지표입니다. -VAE의 중요한 장점 중 하나는 잠재 벡터를 샘플링할 분포를 알기 때문에 상대적으로 쉽게 새로운 이미지를 생성할 수 있다는 것입니다. 예를 들어, MNIST에서 2D 잠재 벡터로 VAE를 훈련시키면, 잠재 벡터의 구성 요소를 변화시켜 다양한 숫자를 얻을 수 있습니다: +VAE의 중요한 장점 중 하나는 잠재 벡터를 샘플링할 분포를 알고 있기 때문에 새로운 이미지를 비교적 쉽게 생성할 수 있다는 점입니다. 예를 들어, MNIST 데이터셋에서 2D 잠재 벡터를 사용하여 VAE를 훈련하면, 잠재 벡터의 구성 요소를 변화시켜 서로 다른 숫자를 생성할 수 있습니다: vaemnist > 이미지 출처: [Dmitry Soshnikov](http://soshnikov.com) -이미지가 서로 섞여 들어가는 모습을 관찰하세요. 잠재 매개변수 공간의 서로 다른 부분에서 잠재 벡터를 가져오기 시작할 때입니다. 우리는 또한 이 공간을 2D로 시각화할 수 있습니다: +잠재 매개변수 공간의 다른 부분에서 잠재 벡터를 가져오면서 이미지가 서로 어떻게 섞이는지 관찰할 수 있습니다. 또한, 이 공간을 2D로 시각화할 수도 있습니다: vaemnist cluster @@ -60,26 +69,26 @@ VAE의 중요한 장점 중 하나는 잠재 벡터를 샘플링할 분포를 ## ✍️ 연습: 오토인코더 -오토인코더에 대해 더 알아보려면 다음의 관련 노트북을 참조하세요: +다음 노트북에서 오토인코더에 대해 더 알아보세요: -* [TensorFlow에서의 오토인코더](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) -* [PyTorch에서의 오토인코더](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) +* [TensorFlow를 사용한 오토인코더](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) +* [PyTorch를 사용한 오토인코더](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) ## 오토인코더의 특성 -* **데이터 특정** - 훈련한 이미지 유형에서만 잘 작동합니다. 예를 들어, 꽃에 대한 슈퍼 해상도 네트워크를 훈련하면 초상화에는 잘 작동하지 않습니다. 이는 네트워크가 훈련 데이터셋에서 학습한 특징의 세부 정보를 사용하여 고해상도 이미지를 생성하기 때문입니다. -* **손실** - 재구성된 이미지는 원래 이미지와 동일하지 않습니다. 손실의 성격은 훈련 중에 사용된 *손실 함수*에 의해 정의됩니다. -* **레이블이 없는 데이터**에서 작동합니다. +* **데이터 특화** - 훈련된 이미지 유형에만 잘 작동합니다. 예를 들어, 꽃에 대해 초해상도 네트워크를 훈련하면, 초상화에는 잘 작동하지 않습니다. 이는 네트워크가 훈련 데이터셋에서 학습한 세부 특징을 사용하여 고해상도 이미지를 생성하기 때문입니다. +* **손실 발생** - 재구성된 이미지는 원본 이미지와 동일하지 않습니다. 손실의 성격은 훈련 중 사용된 *손실 함수*에 의해 정의됩니다. +* **비라벨링 데이터**에서 작동 ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/209) ## 결론 -이번 강의에서는 AI 과학자가 사용할 수 있는 다양한 유형의 오토인코더에 대해 배웠습니다. 오토인코더를 구축하는 방법과 이미지를 재구성하는 데 사용하는 방법을 배웠습니다. 또한 VAE에 대해 배우고, 이를 사용하여 새로운 이미지를 생성하는 방법도 배웠습니다. +이 강의에서는 AI 연구자가 사용할 수 있는 다양한 유형의 오토인코더에 대해 배웠습니다. 오토인코더를 구축하고 이미지를 재구성하는 방법을 배웠으며, VAE를 사용하여 새로운 이미지를 생성하는 방법도 배웠습니다. ## 🚀 도전 과제 -이번 강의에서는 이미지에 대한 오토인코더 사용에 대해 배웠습니다. 그러나 음악에도 사용할 수 있습니다! 오토인코더를 사용하여 음악을 재구성하는 방법을 배우는 Magenta 프로젝트의 [MusicVAE](https://magenta.tensorflow.org/music-vae) 프로젝트를 확인해 보세요. 이 라이브러리로 [실험](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb)을 해보며 어떤 것을 만들 수 있는지 확인해 보세요. +이 강의에서는 이미지에 오토인코더를 사용하는 방법을 배웠습니다. 하지만 오토인코더는 음악에도 사용할 수 있습니다! Magenta 프로젝트의 [MusicVAE](https://magenta.tensorflow.org/music-vae)를 확인해보세요. 이 프로젝트는 오토인코더를 사용하여 음악을 재구성하는 방법을 학습합니다. 이 라이브러리를 사용하여 [실험](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb)을 진행하며 무엇을 만들 수 있는지 확인해보세요. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) @@ -87,14 +96,14 @@ VAE의 중요한 장점 중 하나는 잠재 벡터를 샘플링할 분포를 참고로, 다음 자료에서 오토인코더에 대해 더 읽어보세요: -* [Keras에서 오토인코더 구축하기](https://blog.keras.io/building-autoencoders-in-keras.html) -* [NeuroHive의 블로그 포스트](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/) +* [Keras로 오토인코더 구축하기](https://blog.keras.io/building-autoencoders-in-keras.html) +* [NeuroHive 블로그 글](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/) * [변분 오토인코더 설명](https://kvfrans.com/variational-autoencoders-explained/) * [조건부 변분 오토인코더](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) ## 과제 -[이 TensorFlow 노트북](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoEncodersTF.ipynb)의 끝에서 '작업'을 찾을 수 있습니다. 이를 과제로 사용하세요. +[TensorFlow를 사용하는 이 노트북](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb)의 끝부분에 '과제'가 있습니다. 이를 과제로 사용하세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 것이 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역을 사용하여 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/10-GANs/README.md b/translations/ko/lessons/4-ComputerVision/10-GANs/README.md index 486ca776..8ae52317 100644 --- a/translations/ko/lessons/4-ComputerVision/10-GANs/README.md +++ b/translations/ko/lessons/4-ComputerVision/10-GANs/README.md @@ -1,101 +1,110 @@ -# 생성적 적대 신경망 + +# 생성적 적대 신경망 (Generative Adversarial Networks) -이전 섹션에서는 **생성 모델**에 대해 배웠습니다: 훈련 데이터셋의 이미지와 유사한 새로운 이미지를 생성할 수 있는 모델입니다. VAE는 생성 모델의 좋은 예시였습니다. +이전 섹션에서는 **생성 모델**에 대해 배웠습니다. 생성 모델은 학습 데이터셋에 있는 이미지와 유사한 새로운 이미지를 생성할 수 있는 모델입니다. VAE는 생성 모델의 좋은 예시였습니다. -## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/110) +## [Pre-lecture quiz](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/110) -하지만 VAE로 합리적인 해상도의 그림과 같이 정말 의미 있는 무언가를 생성하려고 하면, 훈련이 잘 수렴하지 않는 것을 볼 수 있습니다. 이러한 용도에 대해서는 생성 모델에 특별히 초점을 맞춘 또 다른 아키텍처인 **생성적 적대 신경망**(GAN)에 대해 배워야 합니다. +하지만 VAE를 사용하여 합리적인 해상도의 그림과 같이 정말 의미 있는 것을 생성하려고 하면 학습이 잘 수렴하지 않는다는 것을 알게 됩니다. 이러한 경우에는 생성 모델에 특화된 또 다른 아키텍처인 **생성적 적대 신경망(GAN)**에 대해 배워야 합니다. -GAN의 주요 아이디어는 서로 경쟁하는 두 개의 신경망을 갖는 것입니다: +GAN의 주요 아이디어는 두 개의 신경망을 서로 경쟁하며 학습시키는 것입니다: -> 이미지 제공: [Dmitry Soshnikov](http://soshnikov.com) +> 이미지 출처: [Dmitry Soshnikov](http://soshnikov.com) -> ✅ 약간의 용어 정리: -> * **생성기(Generator)**는 임의의 벡터를 입력으로 받아 이미지를 생성하는 네트워크입니다. -> * **구분기(Discriminator)**는 이미지를 입력으로 받아 그것이 실제 이미지(훈련 데이터셋에서 온 것)인지, 아니면 생성기에 의해 생성된 것인지를 판단해야 하는 네트워크입니다. 본질적으로 이는 이미지 분류기입니다. +> ✅ 간단한 용어 정리: +> * **Generator**: 랜덤 벡터를 입력으로 받아 이미지를 생성하는 네트워크 +> * **Discriminator**: 이미지를 입력으로 받아 그것이 학습 데이터셋에서 온 실제 이미지인지, 아니면 Generator가 생성한 이미지인지 판별하는 네트워크. 본질적으로 이미지 분류기입니다. -### 구분기 +### Discriminator -구분기의 아키텍처는 일반적인 이미지 분류 네트워크와 다르지 않습니다. 가장 간단한 경우, 완전 연결된 분류기일 수 있지만, 대부분은 [합성곱 신경망](../07-ConvNets/README.md)일 것입니다. +Discriminator의 아키텍처는 일반적인 이미지 분류 네트워크와 다르지 않습니다. 가장 간단한 경우에는 완전 연결된 분류기일 수 있지만, 대부분 [컨볼루션 네트워크](../07-ConvNets/README.md)가 사용됩니다. -> ✅ 합성곱 신경망 기반의 GAN은 [DCGAN](https://arxiv.org/pdf/1511.06434.pdf)이라고 불립니다. +> ✅ 컨볼루션 네트워크를 기반으로 한 GAN은 [DCGAN](https://arxiv.org/pdf/1511.06434.pdf)이라고 합니다. -CNN 구분기는 다음과 같은 층으로 구성됩니다: 여러 개의 합성곱+풀링(공간 크기가 감소하는)과 "특징 벡터"를 얻기 위한 하나 이상의 완전 연결 층, 마지막 이진 분류기입니다. +CNN 기반 Discriminator는 다음과 같은 레이어로 구성됩니다: 여러 개의 컨볼루션+풀링 레이어(공간 크기 감소)와 "특징 벡터"를 얻기 위한 하나 이상의 완전 연결 레이어, 최종적으로 이진 분류기. -> ✅ 여기서 '풀링'은 이미지의 크기를 줄이는 기술입니다. "풀링 층은 한 층의 뉴런 클러스터의 출력을 다음 층의 단일 뉴런으로 결합하여 데이터의 차원을 줄입니다." - [출처](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers) +> ✅ 여기서 '풀링'은 이미지 크기를 줄이는 기법입니다. "풀링 레이어는 한 레이어의 뉴런 클러스터 출력값을 다음 레이어의 단일 뉴런으로 결합하여 데이터의 차원을 줄입니다." - [출처](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers) -### 생성기 +### Generator -생성기는 약간 더 복잡합니다. 이것은 구분기의 반대라고 생각할 수 있습니다. 잠재 벡터(특징 벡터 대신)에서 시작하여, 필요한 크기/형태로 변환하기 위해 완전 연결 층을 가지고 있으며, 그 뒤에 역합성곱+업스케일링이 이어집니다. 이는 [오토인코더](../09-Autoencoders/README.md)의 *디코더* 부분과 유사합니다. +Generator는 약간 더 복잡합니다. 이를 Discriminator의 반대로 생각할 수 있습니다. 잠재 벡터(특징 벡터 대신)에서 시작하여 필요한 크기/형태로 변환하는 완전 연결 레이어를 거친 후, 디컨볼루션+업스케일링을 수행합니다. 이는 [오토인코더](../09-Autoencoders/README.md)의 *디코더* 부분과 유사합니다. -> ✅ 합성곱 층이 이미지를 가로지르는 선형 필터로 구현되기 때문에, 역합성곱은 본질적으로 합성곱과 유사하며 동일한 층 논리를 사용하여 구현할 수 있습니다. +> ✅ 컨볼루션 레이어가 이미지를 따라 선형 필터로 구현되기 때문에 디컨볼루션은 본질적으로 컨볼루션과 유사하며 동일한 레이어 로직을 사용하여 구현할 수 있습니다. -> 이미지 제공: [Dmitry Soshnikov](http://soshnikov.com) +> 이미지 출처: [Dmitry Soshnikov](http://soshnikov.com) -### GAN 훈련하기 +### GAN 학습 -GAN은 생성기와 구분기 간의 지속적인 경쟁이 있기 때문에 **적대적**이라고 불립니다. 이 경쟁 과정에서 생성기와 구분기 모두 개선되며, 따라서 네트워크는 점점 더 나은 이미지를 생성하는 법을 배웁니다. +GAN은 **적대적**이라고 불리는데, 이는 Generator와 Discriminator 간의 지속적인 경쟁이 있기 때문입니다. 이 경쟁 과정에서 Generator와 Discriminator 모두 개선되며, 네트워크는 점점 더 나은 이미지를 생성하는 방법을 학습합니다. -훈련은 두 단계로 진행됩니다: +학습은 두 단계로 이루어집니다: -* **구분기 훈련**. 이 작업은 꽤 간단합니다: 생성기로부터 이미지 배치를 생성하고, 이를 0(가짜 이미지)로 레이블을 붙이고, 입력 데이터셋에서 이미지 배치를 가져와(1, 실제 이미지 레이블) 구분기 손실을 얻고 역전파를 수행합니다. -* **생성기 훈련**. 이는 약간 더 복잡합니다. 왜냐하면 생성기에 대한 예상 출력 값을 직접 알 수 없기 때문입니다. 생성기와 구분기로 구성된 전체 GAN 네트워크를 가져와 임의의 벡터로 공급하고, 결과가 1(실제 이미지에 해당)일 것으로 기대합니다. 그런 다음 구분기의 매개변수를 고정시키고(이 단계에서는 훈련되지 않기를 원합니다), 역전파를 수행합니다. +* **Discriminator 학습**: 이 작업은 비교적 간단합니다. Generator가 생성한 이미지 배치를 가져와 이를 0(가짜 이미지)로 레이블링하고, 입력 데이터셋에서 가져온 이미지 배치를 1(실제 이미지)로 레이블링합니다. 그런 다음 *Discriminator 손실*을 계산하고 역전파를 수행합니다. +* **Generator 학습**: 이 작업은 약간 더 까다롭습니다. Generator의 예상 출력값을 직접적으로 알 수 없기 때문입니다. Generator와 Discriminator로 구성된 전체 GAN 네트워크를 사용하여 랜덤 벡터를 입력으로 제공하고 결과가 1(실제 이미지에 해당)이라고 기대합니다. 이 단계에서는 Discriminator의 파라미터를 고정시켜 학습되지 않도록 하고 역전파를 수행합니다. -이 과정 동안 생성기와 구분기 손실은 크게 감소하지 않습니다. 이상적인 상황에서는 두 네트워크 모두 성능이 향상되면서 진동해야 합니다. +이 과정에서 Generator와 Discriminator의 손실은 크게 감소하지 않습니다. 이상적인 상황에서는 두 손실이 진동하며 두 네트워크가 성능을 개선하는 것을 나타냅니다. -## ✍️ 연습문제: GANs +## ✍️ 연습: GANs -* [TensorFlow/Keras의 GAN 노트북](../../../../../lessons/4-ComputerVision/10-GANs/GANTF.ipynb) -* [PyTorch의 GAN 노트북](../../../../../lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) +* [TensorFlow/Keras를 사용한 GAN 노트북](../../../../../lessons/4-ComputerVision/10-GANs/GANTF.ipynb) +* [PyTorch를 사용한 GAN 노트북](../../../../../lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) -### GAN 훈련의 문제점 +### GAN 학습의 문제점 -GAN은 훈련하기 특히 어려운 것으로 알려져 있습니다. 다음은 몇 가지 문제입니다: +GAN은 학습이 특히 어려운 것으로 알려져 있습니다. 몇 가지 문제점은 다음과 같습니다: -* **모드 붕괴**. 이 용어는 생성기가 구분기를 속이는 하나의 성공적인 이미지를 생성하는 법을 배우고, 다양한 이미지를 생성하지 못하는 상황을 의미합니다. -* **하이퍼파라미터에 대한 민감성**. 종종 GAN이 전혀 수렴하지 않는 것을 볼 수 있으며, 그러다가 학습률이 갑자기 감소하여 수렴하게 됩니다. -* 생성기와 구분기 간의 **균형** 유지. 많은 경우 구분기 손실이 상대적으로 빠르게 0으로 떨어질 수 있으며, 이로 인해 생성기가 더 이상 훈련할 수 없게 됩니다. 이를 극복하기 위해 생성기와 구분기에 서로 다른 학습률을 설정하거나 손실이 이미 너무 낮을 경우 구분기 훈련을 건너뛰는 방법을 시도할 수 있습니다. -* **고해상도** 훈련. 오토인코더와 유사한 문제를 반영하며, 너무 많은 합성곱 신경망 층을 재구성하면 아티팩트가 발생하는 문제입니다. 이 문제는 일반적으로 **점진적 성장**이라고 하는 방법으로 해결되며, 처음에는 몇 개의 층이 저해상도 이미지에서 훈련되고, 이후에 층이 "언블록"되거나 추가됩니다. 또 다른 해결책은 층 간에 추가 연결을 추가하고 여러 해상도를 동시에 훈련하는 것입니다 - 자세한 내용은 [Multi-Scale Gradient GANs 논문](https://arxiv.org/abs/1903.06048)을 참조하세요. +* **모드 붕괴**: Generator가 Discriminator를 속이는 하나의 성공적인 이미지만 생성하고 다양한 이미지를 생성하지 않는 현상입니다. +* **하이퍼파라미터에 대한 민감성**: GAN이 전혀 수렴하지 않다가 학습률을 갑자기 낮추면 수렴하는 경우가 종종 있습니다. +* Generator와 Discriminator 간의 **균형 유지**: 많은 경우 Discriminator 손실이 상대적으로 빠르게 0으로 떨어지며, 이는 Generator가 더 이상 학습할 수 없게 만듭니다. 이를 극복하기 위해 Generator와 Discriminator에 서로 다른 학습률을 설정하거나 Discriminator 손실이 이미 너무 낮은 경우 Discriminator 학습을 건너뛸 수 있습니다. +* **고해상도 학습**: 오토인코더와 동일한 문제를 반영하며, 너무 많은 컨볼루션 네트워크 레이어를 재구성하면 아티팩트가 발생합니다. 이 문제는 일반적으로 **점진적 성장**을 통해 해결됩니다. 처음에는 저해상도 이미지에서 몇 개의 레이어를 학습한 후 레이어를 "잠금 해제"하거나 추가합니다. 또 다른 해결책은 레이어 간에 추가 연결을 추가하고 여러 해상도를 동시에 학습하는 것입니다. 자세한 내용은 [Multi-Scale Gradient GANs 논문](https://arxiv.org/abs/1903.06048)을 참조하세요. -## 스타일 전이 +## 스타일 전이 (Style Transfer) -GAN은 예술적인 이미지를 생성하는 훌륭한 방법입니다. 또 다른 흥미로운 기술은 **스타일 전이**라고 하며, 이는 하나의 **콘텐츠 이미지**를 가져와 다른 스타일로 다시 그리며 **스타일 이미지**의 필터를 적용합니다. +GAN은 예술적인 이미지를 생성하는 훌륭한 방법입니다. 또 다른 흥미로운 기법은 **스타일 전이**로, 하나의 **콘텐츠 이미지**를 가져와 **스타일 이미지**의 필터를 적용하여 다른 스타일로 다시 그리는 것입니다. 작동 방식은 다음과 같습니다: -* 우리는 무작위 노이즈 이미지(또는 콘텐츠 이미지)로 시작합니다. 이해를 돕기 위해 무작위 노이즈에서 시작하는 것이 더 쉽습니다. -* 우리의 목표는 콘텐츠 이미지와 스타일 이미지 모두에 가까운 이미지를 생성하는 것입니다. 이는 두 개의 손실 함수에 의해 결정됩니다: - - **콘텐츠 손실**은 현재 이미지와 콘텐츠 이미지에서 CNN이 추출한 특징을 기반으로 계산됩니다. - - **스타일 손실**은 현재 이미지와 스타일 이미지 간의 관계를 그람 행렬을 사용하여 정교하게 계산합니다(자세한 내용은 [예제 노트북](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) 참조). -* 이미지를 더 부드럽게 하고 노이즈를 제거하기 위해 **변화 손실**을 도입하여 이웃 픽셀 간의 평균 거리를 계산합니다. -* 주요 최적화 루프는 현재 이미지를 총 손실을 최소화하기 위해 경량 하강법(또는 다른 최적화 알고리즘)을 사용하여 조정합니다. 총 손실은 세 가지 손실의 가중 합입니다. +* 랜덤 노이즈 이미지(또는 콘텐츠 이미지로 시작할 수 있지만 이해를 위해 랜덤 노이즈로 시작하는 것이 더 쉽습니다)를 시작점으로 사용합니다. +* 목표는 콘텐츠 이미지와 스타일 이미지 모두에 가까운 이미지를 생성하는 것입니다. 이는 두 가지 손실 함수로 결정됩니다: + - **콘텐츠 손실**: 현재 이미지와 콘텐츠 이미지에서 CNN이 특정 레이어에서 추출한 특징을 기반으로 계산됩니다. + - **스타일 손실**: 현재 이미지와 스타일 이미지 간의 손실을 Gram 행렬을 사용하여 계산합니다(자세한 내용은 [예제 노트북](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)을 참조하세요). +* 이미지를 더 부드럽게 만들고 노이즈를 제거하기 위해 **변동 손실**을 도입합니다. 이는 인접 픽셀 간 평균 거리를 계산합니다. +* 주요 최적화 루프는 총 손실(세 손실의 가중 합)을 최소화하기 위해 현재 이미지를 조정합니다. 이를 위해 경사 하강법(또는 다른 최적화 알고리즘)을 사용합니다. ## ✍️ 예제: [스타일 전이](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) -## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/210) +## [Post-lecture quiz](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/210) ## 결론 -이번 수업에서는 GAN과 이를 훈련하는 방법에 대해 배웠습니다. 또한 이 유형의 신경망이 직면할 수 있는 특별한 도전 과제와 이를 극복하는 방법에 대한 몇 가지 전략도 배웠습니다. +이 강의에서는 GAN과 이를 학습시키는 방법에 대해 배웠습니다. 또한 이 유형의 신경망이 직면할 수 있는 특별한 문제와 이를 극복하기 위한 몇 가지 전략에 대해 배웠습니다. ## 🚀 도전 과제 -자신의 이미지를 사용하여 [스타일 전이 노트북](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)을 실행해 보세요. +[스타일 전이 노트북](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)을 실행하여 자신의 이미지를 사용해 보세요. -## 복습 및 자습 +## 복습 및 자기 학습 -참고로, GAN에 대해 더 알아보려면 다음 자료를 읽어보세요: +GAN에 대해 더 알고 싶다면 다음 자료를 참고하세요: -* Marco Pasini, [10 Lessons I Learned Training GANs for one Year](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628) -* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN), 고려해야 할 *de facto* GAN 아키텍처 +* Marco Pasini, [1년 동안 GAN을 학습시키며 배운 10가지 교훈](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628) +* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN), 고려할 만한 *사실상 표준* GAN 아키텍처 * [Azure ML에서 GAN을 사용하여 생성적 예술 만들기](https://soshnikov.com/scienceart/creating-generative-art-using-gan-on-azureml/) ## 과제 -이 수업과 관련된 두 개의 노트북 중 하나를 다시 방문하여 자신의 이미지로 GAN을 재훈련해 보세요. 무엇을 만들 수 있을까요? +이 강의와 관련된 두 개의 노트북 중 하나를 다시 방문하여 자신의 이미지를 사용해 GAN을 재학습시켜 보세요. 무엇을 만들 수 있나요? **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/11-ObjectDetection/README.md b/translations/ko/lessons/4-ComputerVision/11-ObjectDetection/README.md index a73fd3a5..3ee7dcaf 100644 --- a/translations/ko/lessons/4-ComputerVision/11-ObjectDetection/README.md +++ b/translations/ko/lessons/4-ComputerVision/11-ObjectDetection/README.md @@ -1,8 +1,17 @@ + # 객체 탐지 -지금까지 다룬 이미지 분류 모델은 이미지를 입력받아 '숫자'와 같은 범주형 결과를 생성했습니다. 그러나 많은 경우 우리는 단순히 사진이 객체를 나타내고 있다는 것을 아는 것만으로는 충분하지 않습니다. 우리는 객체의 정확한 위치를 결정할 수 있어야 합니다. 이것이 바로 **객체 탐지**의 핵심입니다. +지금까지 다룬 이미지 분류 모델은 이미지를 입력받아 MNIST 문제에서 '숫자'와 같은 범주형 결과를 출력했습니다. 하지만 많은 경우, 단순히 사진에 객체가 있다는 것을 아는 것만으로는 충분하지 않습니다. 우리는 객체의 정확한 위치를 파악하고 싶어합니다. 이것이 바로 **객체 탐지**의 핵심입니다. -## [사전 강의 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/111) +## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/111) ![객체 탐지](../../../../../translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.ko.png) @@ -10,53 +19,56 @@ ## 객체 탐지에 대한 단순한 접근법 -사진에서 고양이를 찾고자 한다고 가정할 때, 객체 탐지에 대한 매우 단순한 접근법은 다음과 같습니다: +사진에서 고양이를 찾고 싶다고 가정해 봅시다. 객체 탐지에 대한 매우 단순한 접근법은 다음과 같습니다: -1. 이미지를 여러 개의 타일로 나눕니다. +1. 사진을 여러 타일로 나눕니다. 2. 각 타일에 대해 이미지 분류를 실행합니다. -3. 충분히 높은 활성화 결과를 얻은 타일은 해당 객체를 포함하고 있다고 간주할 수 있습니다. +3. 충분히 높은 활성화 결과를 얻은 타일은 해당 객체를 포함한다고 간주합니다. ![단순 객체 탐지](../../../../../translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.ko.png) -> *이미지 출처: [연습 노트북](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection-TF.ipynb)* +> *이미지 출처: [실습 노트북](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection-TF.ipynb)* -하지만 이 접근법은 이상적이지 않습니다. 왜냐하면 알고리즘이 객체의 경계 상자를 매우 부정확하게 위치시키는 것만 허용하기 때문입니다. 더 정확한 위치를 위해서는 경계 상자의 좌표를 예측하기 위한 일종의 **회귀**를 수행해야 하며, 이를 위해서는 특정 데이터셋이 필요합니다. +하지만 이 접근법은 이상적이지 않습니다. 이 방법은 객체의 경계 상자를 매우 부정확하게 찾을 수밖에 없습니다. 더 정확한 위치를 찾으려면 **회귀**를 실행하여 경계 상자의 좌표를 예측해야 하며, 이를 위해 특정 데이터셋이 필요합니다. ## 객체 탐지를 위한 회귀 -[이 블로그 포스트](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491)는 도형 탐지에 대한 훌륭한 소개를 제공합니다. +[이 블로그 글](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491)은 도형 탐지에 대한 훌륭한 입문서를 제공합니다. -## 객체 탐지를 위한 데이터셋 +## 객체 탐지 데이터셋 -이 작업에 사용할 수 있는 데이터셋은 다음과 같습니다: +이 작업을 위해 다음과 같은 데이터셋을 접할 수 있습니다: -* [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 20개 클래스 -* [COCO](http://cocodataset.org/#home) - Common Objects in Context. 80개 클래스, 경계 상자 및 분할 마스크 +* [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 20개의 클래스 +* [COCO](http://cocodataset.org/#home) - 컨텍스트 내 일반 객체. 80개의 클래스, 경계 상자 및 분할 마스크 포함 ![COCO](../../../../../translated_images/coco-examples.71bc60380fa6cceb7caad48bd09e35b6028caabd363aa04fee89c414e0870e86.ko.jpg) -## 객체 탐지 메트릭 +## 객체 탐지 평가 지표 -### 교차 비율 (Intersection over Union) +### 교집합 비율 (Intersection over Union) -이미지 분류의 경우 알고리즘의 성능을 측정하는 것이 쉽지만, 객체 탐지에서는 클래스의 정확성과 추론된 경계 상자 위치의 정밀도를 모두 측정해야 합니다. 후자의 경우, 두 상자(또는 두 임의의 영역)가 얼마나 겹치는지를 측정하는 **교차 비율**(IoU)을 사용합니다. +이미지 분류에서는 알고리즘의 성능을 측정하기 쉽지만, 객체 탐지에서는 클래스의 정확성과 추론된 경계 상자 위치의 정밀도를 모두 측정해야 합니다. 후자의 경우, **교집합 비율**(IoU)을 사용하여 두 상자(또는 두 임의의 영역)가 얼마나 잘 겹치는지 측정합니다. ![IoU](../../../../../translated_images/iou_equation.9a4751d40fff4e119ecd0a7bcca4e71ab1dc83e0d4f2a0d66ff0859736f593cf.ko.png) -> *그림 2는 [이 훌륭한 IoU 블로그 포스트](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)에서 발췌함* +> *[IoU에 대한 훌륭한 블로그 글](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)의 그림 2* -아이디어는 간단합니다. 두 도형 간의 교차 영역을 그들의 합집합 영역으로 나눕니다. 두 개의 동일한 영역의 경우 IoU는 1이 되고, 완전히 분리된 영역의 경우 0이 됩니다. 그렇지 않으면 0에서 1 사이의 값을 가집니다. 우리는 일반적으로 IoU가 특정 값을 초과하는 경계 상자만 고려합니다. +아이디어는 간단합니다 - 두 도형의 교집합 영역을 합집합 영역으로 나눕니다. 두 영역이 동일하면 IoU는 1이 되고, 완전히 분리된 영역이면 0이 됩니다. 그 외에는 0에서 1 사이의 값을 가집니다. 일반적으로 IoU가 특정 값 이상인 경계 상자만 고려합니다. ### 평균 정밀도 (Average Precision) -주어진 클래스 $C$가 얼마나 잘 인식되는지를 측정하고자 한다면, **평균 정밀도** 메트릭을 사용합니다. 이는 다음과 같이 계산됩니다: +특정 객체 클래스 $C$가 얼마나 잘 인식되는지 측정하고 싶다고 가정해 봅시다. 이를 측정하기 위해 **평균 정밀도**(AP) 지표를 사용하며, 다음과 같이 계산됩니다: + +1. 정밀도-재현율 곡선은 탐지 임계값 값(0에서 1까지)에 따라 정확도를 보여줍니다. +2. 임계값에 따라 이미지에서 탐지된 객체 수와 정밀도 및 재현율 값이 달라집니다. +3. 곡선은 다음과 같은 형태를 가집니다: + + -1. 정밀도-재현율 곡선을 고려하여 탐지 임계값(0에서 1까지)에 따라 정확도를 나타냅니다. -2. 임계값에 따라 이미지에서 탐지되는 객체의 수가 달라지며, 정밀도와 재현율의 값도 달라집니다. -3. 곡선은 다음과 같이 나타납니다: > *이미지 출처: [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* -주어진 클래스 $C$에 대한 평균 정밀도는 이 곡선 아래의 면적입니다. 보다 정확하게, 재현율 축은 일반적으로 10개 부분으로 나뉘며, 정밀도는 모든 점에 대해 평균화됩니다: +주어진 클래스 $C$에 대한 평균 정밀도는 이 곡선 아래의 면적입니다. 더 정확히 말하면, 재현율 축은 일반적으로 10개 부분으로 나뉘며, 정밀도는 모든 점에서 평균화됩니다: $$ AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10}) @@ -64,25 +76,26 @@ $$ ### AP와 IoU -우리는 IoU가 특정 값을 초과하는 탐지만 고려합니다. 예를 들어, PASCAL VOC 데이터셋에서는 일반적으로 $\mbox{IoU Threshold} = 0.5$로 가정하며, COCO에서는 다양한 $\mbox{IoU Threshold}$ 값에 대해 AP가 측정됩니다. +IoU가 특정 값 이상인 탐지만 고려합니다. 예를 들어, PASCAL VOC 데이터셋에서는 일반적으로 $\mbox{IoU Threshold} = 0.5$가 사용되며, COCO에서는 다양한 $\mbox{IoU Threshold}$ 값에 대해 AP가 측정됩니다. + + > *이미지 출처: [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* ### 평균 평균 정밀도 - mAP -객체 탐지를 위한 주요 메트릭은 **평균 평균 정밀도** 또는 **mAP**라고 합니다. 이는 모든 객체 클래스에 대해 평균화된 평균 정밀도의 값이며, 때때로 $\mbox{IoU Threshold}$에 대해서도 평균화됩니다. **mAP**를 계산하는 과정에 대한 자세한 설명은 -[이 블로그 포스트](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3)와 [여기 코드 샘플과 함께](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734)에서 확인할 수 있습니다. +객체 탐지의 주요 지표는 **평균 평균 정밀도**(Mean Average Precision, mAP)입니다. 이는 모든 객체 클래스에 대해 평균화된 평균 정밀도 값이며, 때로는 $\mbox{IoU Threshold}$에 대해서도 평균화됩니다. **mAP**를 계산하는 과정은 [이 블로그 글](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3)과 [코드 샘플이 포함된 설명](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734)에서 자세히 다루고 있습니다. ## 다양한 객체 탐지 접근법 -객체 탐지 알고리즘에는 두 가지 주요 클래스가 있습니다: +객체 탐지 알고리즘은 크게 두 가지로 나뉩니다: -* **영역 제안 네트워크** (R-CNN, Fast R-CNN, Faster R-CNN). 주요 아이디어는 **관심 영역**(ROI)을 생성하고 CNN을 통해 최대 활성화를 찾는 것입니다. 이는 단순한 접근법과 유사하지만, ROI는 보다 정교한 방식으로 생성됩니다. 이러한 방법의 주요 단점 중 하나는 이미지에 대해 CNN 분류기를 여러 번 통과해야 하므로 속도가 느리다는 것입니다. -* **단일 패스** (YOLO, SSD, RetinaNet) 방법. 이러한 아키텍처에서는 네트워크를 설계하여 클래스와 ROI를 한 번의 패스로 예측합니다. +* **영역 제안 네트워크**(Region Proposal Networks, R-CNN, Fast R-CNN, Faster R-CNN). 주요 아이디어는 **관심 영역**(ROI)을 생성하고, CNN을 통해 최대 활성화를 찾는 것입니다. 이는 단순한 접근법과 비슷하지만, ROI가 더 정교하게 생성됩니다. 이러한 방법의 주요 단점은 이미지에 대해 CNN 분류기를 여러 번 실행해야 하므로 느리다는 점입니다. +* **단일 패스**(YOLO, SSD, RetinaNet) 방법. 이러한 아키텍처에서는 네트워크가 한 번의 실행으로 클래스와 ROI를 모두 예측하도록 설계됩니다. ### R-CNN: 영역 기반 CNN -[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf)은 [선택적 검색](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf)을 사용하여 ROI 영역의 계층 구조를 생성하고, 이를 CNN 특징 추출기와 SVM 분류기를 통해 객체 클래스를 결정하며, 선형 회귀를 통해 *경계 상자* 좌표를 결정합니다. [공식 논문](https://arxiv.org/pdf/1506.01497v1.pdf) +[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf)은 [선택적 검색](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf)을 사용하여 ROI 영역의 계층 구조를 생성합니다. 그런 다음 이를 CNN 특징 추출기와 SVM 분류기를 통해 객체 클래스를 결정하고, 선형 회귀를 통해 *경계 상자* 좌표를 결정합니다. [공식 논문](https://arxiv.org/pdf/1506.01497v1.pdf) ![RCNN](../../../../../translated_images/rcnn1.cae407020dfb1d1fb572656e44f75cd6c512cc220591c116c506652c10e47f26.ko.png) @@ -92,9 +105,9 @@ $$ > *이미지 출처: [이 블로그](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e)* -### F-RCNN - Fast R-CNN +### F-RCNN - 빠른 R-CNN -이 접근법은 R-CNN과 유사하지만, 영역이 컨볼루션 레이어가 적용된 후 정의됩니다. +이 접근법은 R-CNN과 유사하지만, 영역은 컨볼루션 레이어가 적용된 후에 정의됩니다. ![FRCNN](../../../../../translated_images/f-rcnn.3cda6d9bb41888754037d2d9763e2298a96de5d9bc2a21db3147357aa5da9b1a.ko.png) @@ -102,19 +115,19 @@ $$ ### Faster R-CNN -이 접근법의 주요 아이디어는 신경망을 사용하여 ROI를 예측하는 것입니다. 이를 *영역 제안 네트워크*라고 합니다. [논문](https://arxiv.org/pdf/1506.01497.pdf), 2016 +이 접근법의 주요 아이디어는 신경망을 사용하여 ROI를 예측하는 것입니다 - 이를 *영역 제안 네트워크*라고 합니다. [논문](https://arxiv.org/pdf/1506.01497.pdf), 2016 ![FasterRCNN](../../../../../translated_images/faster-rcnn.8d46c099b87ef30ab2ea26dbc4bdd85b974a57ba8eb526f65dc4cd0a4711de30.ko.png) > 이미지 출처: [공식 논문](https://arxiv.org/pdf/1506.01497.pdf) -### R-FCN: 영역 기반 완전 합성곱 네트워크 +### R-FCN: 영역 기반 완전 컨볼루션 네트워크 이 알고리즘은 Faster R-CNN보다 더 빠릅니다. 주요 아이디어는 다음과 같습니다: 1. ResNet-101을 사용하여 특징을 추출합니다. -2. 특징은 **위치 민감 점수 맵**에 의해 처리됩니다. $C$ 클래스의 각 객체는 $k\times k$ 영역으로 나뉘며, 우리는 객체의 부분을 예측하도록 훈련합니다. -3. $k\times k$ 영역의 각 부분에 대해 모든 네트워크가 객체 클래스에 투표하고, 최대 투표를 받은 객체 클래스가 선택됩니다. +2. 특징은 **위치 민감 점수 맵**으로 처리됩니다. $C$ 클래스의 각 객체는 $k\times k$ 영역으로 나뉘며, 객체의 일부를 예측하도록 학습합니다. +3. $k\times k$ 영역의 각 부분에 대해 모든 네트워크가 객체 클래스를 투표하며, 최대 투표를 받은 객체 클래스가 선택됩니다. ![r-fcn 이미지](../../../../../translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.ko.png) @@ -124,10 +137,11 @@ $$ YOLO는 실시간 단일 패스 알고리즘입니다. 주요 아이디어는 다음과 같습니다: -* 이미지를 $S\times S$ 영역으로 나눕니다. -* 각 영역에 대해 **CNN**이 $n$개의 가능한 객체, *경계 상자* 좌표 및 *신뢰도* = *확률* * IoU를 예측합니다. + * 이미지를 $S\times S$ 영역으로 나눕니다. + * 각 영역에 대해 **CNN**이 $n$개의 가능한 객체, *경계 상자* 좌표 및 *신뢰도*=*확률* * IoU를 예측합니다. + + ![YOLO](../../../../../translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.ko.png) -![YOLO](../../../../../translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.ko.png) > 이미지 출처: [공식 논문](https://arxiv.org/abs/1506.02640) ### 기타 알고리즘 @@ -135,39 +149,39 @@ YOLO는 실시간 단일 패스 알고리즘입니다. 주요 아이디어는 * RetinaNet: [공식 논문](https://arxiv.org/abs/1708.02002) - [Torchvision의 PyTorch 구현](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) - [Keras 구현](https://github.com/fizyr/keras-retinanet) - - Keras 샘플에서의 [RetinaNet을 이용한 객체 탐지](https://keras.io/examples/vision/retinanet/) + - [Keras 샘플에서 RetinaNet을 사용한 객체 탐지](https://keras.io/examples/vision/retinanet/) * SSD (Single Shot Detector): [공식 논문](https://arxiv.org/abs/1512.02325) -## ✍️ 연습문제: 객체 탐지 +## ✍️ 실습: 객체 탐지 -다음 노트북에서 학습을 계속하세요: +다음 노트북에서 학습을 이어가세요: [ObjectDetection.ipynb](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) ## 결론 -이번 수업에서는 객체 탐지를 수행할 수 있는 다양한 방법을 빠르게 살펴보았습니다! +이번 강의에서는 객체 탐지를 수행할 수 있는 다양한 방법을 빠르게 살펴보았습니다! ## 🚀 도전 과제 -YOLO에 대한 이 기사와 노트북을 읽고 직접 시도해 보세요. +YOLO에 대한 다음 글과 노트북을 읽고 직접 시도해 보세요: -* YOLO에 대해 설명하는 [좋은 블로그 포스트](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/) +* [YOLO를 설명하는 좋은 블로그 글](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/) * [공식 사이트](https://pjreddie.com/darknet/yolo/) - * Yolo: [Keras 구현](https://github.com/experiencor/keras-yolo2), [단계별 노트북](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb) - * Yolo v2: [Keras 구현](https://github.com/experiencor/keras-yolo2), [단계별 노트북](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb) + * YOLO: [Keras 구현](https://github.com/experiencor/keras-yolo2), [단계별 노트북](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb) + * YOLO v2: [Keras 구현](https://github.com/experiencor/keras-yolo2), [단계별 노트북](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb) ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/211) -## 복습 및 자가 학습 +## 복습 및 자기 학습 -* Nikhil Sardana의 [객체 탐지](https://tjmachinelearning.com/lectures/1718/obj/) -* [객체 탐지 알고리즘의 좋은 비교](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html) -* [객체 탐지를 위한 딥 러닝 알고리즘 리뷰](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852) +* [객체 탐지](https://tjmachinelearning.com/lectures/1718/obj/) by Nikhil Sardana +* [객체 탐지 알고리즘 비교](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html) +* [객체 탐지를 위한 딥러닝 알고리즘 리뷰](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852) * [기본 객체 탐지 알고리즘에 대한 단계별 소개](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/) -* [Python으로 객체 탐지를 위한 Faster R-CNN 구현](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/) +* [Python을 사용한 Faster R-CNN 구현](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/) ## [과제: 객체 탐지](lab/README.md) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md b/translations/ko/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md index 2ddd7beb..6311a23d 100644 --- a/translations/ko/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md +++ b/translations/ko/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md @@ -1,14 +1,23 @@ + # 할리우드 헤드 데이터셋을 이용한 머리 탐지 -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서의 실습 과제입니다. +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서 제공하는 실습 과제입니다. -## 작업 +## 과제 -비디오 감시 카메라 스트림에서 사람 수를 세는 것은 상점의 방문객 수, 레스토랑의 바쁜 시간 등을 추정할 수 있게 해주는 중요한 작업입니다. 이 작업을 해결하기 위해서는 다양한 각도에서 사람의 머리를 탐지할 수 있어야 합니다. 사람 머리를 탐지하는 객체 탐지 모델을 훈련시키기 위해 [Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/)을 사용할 수 있습니다. +비디오 감시 카메라 스트림에서 사람 수를 세는 것은 상점의 방문자 수를 추정하거나, 식당의 혼잡한 시간을 파악하는 데 중요한 작업입니다. 이 작업을 해결하기 위해서는 다양한 각도에서 인간의 머리를 탐지할 수 있어야 합니다. 인간의 머리를 탐지하는 객체 탐지 모델을 학습시키기 위해 [할리우드 헤드 데이터셋](https://www.di.ens.fr/willow/research/headdetection/)을 사용할 수 있습니다. ## 데이터셋 -[Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/release/HollywoodHeads.zip)에는 할리우드 영화의 224,740개 영화 프레임에서 주석이 달린 369,846개의 인간 머리가 포함되어 있습니다. 이 데이터셋은 각 이미지에 대해 XML 설명 파일이 제공되는 [https://host.robots.ox.ac.uk/pascal/VOC/](../../../../../../lessons/4-ComputerVision/11-ObjectDetection/lab/PASCAL VOC) 형식으로 제공됩니다. XML 파일은 다음과 같은 형식을 가집니다: +[할리우드 헤드 데이터셋](https://www.di.ens.fr/willow/research/headdetection/release/HollywoodHeads.zip)은 할리우드 영화의 224,740개의 프레임에서 369,846개의 인간 머리를 주석 처리한 데이터를 포함하고 있습니다. 이 데이터셋은 [https://host.robots.ox.ac.uk/pascal/VOC/](../../../../../../lessons/4-ComputerVision/11-ObjectDetection/lab/PASCAL VOC) 형식으로 제공되며, 각 이미지에 대해 XML 설명 파일이 함께 제공됩니다. XML 파일은 다음과 같은 형식입니다: ```xml @@ -48,19 +57,19 @@ ``` -이 데이터셋에는 `head`라는 하나의 객체 클래스만 있으며, 각 머리에 대해 경계 상자의 좌표를 제공합니다. Python 라이브러리를 사용하여 XML을 파싱하거나 [이 라이브러리](https://pypi.org/project/pascal-voc/)를 사용하여 PASCAL VOC 형식과 직접적으로 작업할 수 있습니다. +이 데이터셋에는 `head`라는 하나의 객체 클래스만 있으며, 각 머리에 대해 바운딩 박스의 좌표가 제공됩니다. XML 파일은 Python 라이브러리를 사용하여 파싱하거나, [이 라이브러리](https://pypi.org/project/pascal-voc/)를 사용하여 PASCAL VOC 형식을 직접 처리할 수 있습니다. -## 객체 탐지 훈련 +## 객체 탐지 모델 학습 -다음 방법 중 하나를 사용하여 객체 탐지 모델을 훈련할 수 있습니다: +객체 탐지 모델을 학습시키는 방법은 다음과 같습니다: -* [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste)과 그 Python API를 사용하여 클라우드에서 프로그래밍 방식으로 모델을 훈련합니다. Custom Vision은 모델 훈련에 사용할 수 있는 이미지 수를 몇 백 장으로 제한할 수 있으므로 데이터셋을 제한해야 할 수도 있습니다. -* [Keras 튜토리얼](https://keras.io/examples/vision/retinanet/)의 예제를 사용하여 RetinaNet 모델을 훈련합니다. -* [torchvision.models.detection.RetinaNet](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html)에서 제공하는 torchvision 내장 모듈을 사용합니다. +* [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste)을 사용하여 클라우드에서 모델을 프로그래밍 방식으로 학습시키는 Python API를 활용합니다. Custom Vision은 모델 학습을 위해 몇백 개의 이미지만 사용할 수 있으므로 데이터셋을 제한해야 할 수도 있습니다. +* [Keras 튜토리얼](https://keras.io/examples/vision/retinanet/)의 예제를 사용하여 RetunaNet 모델을 학습시킵니다. +* [torchvision.models.detection.RetinaNet](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) 모듈을 사용하여 학습합니다. -## 요점 +## 주요 내용 -객체 탐지는 산업에서 자주 요구되는 작업입니다. 객체 탐지를 수행하는 데 사용할 수 있는 서비스가 있지만([Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste)와 같은), 객체 탐지가 어떻게 작동하는지를 이해하고 자신의 모델을 훈련할 수 있는 것이 중요합니다. +객체 탐지는 산업에서 자주 요구되는 작업입니다. [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste)과 같은 서비스를 사용하여 객체 탐지를 수행할 수 있지만, 객체 탐지가 어떻게 작동하는지 이해하고 직접 모델을 학습시킬 수 있는 능력을 갖추는 것이 중요합니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우, 전문 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/12-Segmentation/README.md b/translations/ko/lessons/4-ComputerVision/12-Segmentation/README.md index 6c843e38..eebe64c0 100644 --- a/translations/ko/lessons/4-ComputerVision/12-Segmentation/README.md +++ b/translations/ko/lessons/4-ComputerVision/12-Segmentation/README.md @@ -1,69 +1,78 @@ -# 세분화 + +# 세그멘테이션 -우리는 이전에 물체 탐지(Object Detection)에 대해 배웠습니다. 이는 이미지에서 물체를 *바운딩 박스*를 예측하여 위치를 찾는 방법입니다. 그러나 일부 작업에서는 바운딩 박스뿐만 아니라 더 정밀한 물체 위치 지정이 필요합니다. 이 작업을 **세분화(Segmentation)**라고 합니다. +이전에 우리는 객체 감지(Object Detection)에 대해 배웠습니다. 객체 감지는 이미지에서 객체의 *바운딩 박스*를 예측하여 위치를 찾을 수 있게 해줍니다. 하지만 일부 작업에서는 바운딩 박스뿐만 아니라 더 정밀한 객체 위치 정보가 필요합니다. 이러한 작업을 **세그멘테이션(Segmentation)**이라고 합니다. -## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/112) +## [Pre-lecture quiz](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/112) -세분화는 **픽셀 분류**로 볼 수 있으며, 이미지의 **각** 픽셀에 대해 해당 클래스(*배경*이 클래스 중 하나)에 대한 예측을 해야 합니다. 세분화 알고리즘에는 두 가지 주요 유형이 있습니다: +세그멘테이션은 **픽셀 분류**로 볼 수 있습니다. 이미지의 **각** 픽셀에 대해 해당 픽셀이 속하는 클래스를 예측해야 합니다 (*배경*도 클래스 중 하나로 포함됩니다). 주요 세그멘테이션 알고리즘은 두 가지가 있습니다: -* **의미론적 세분화(Semantic segmentation)**는 픽셀 클래스만 알려주며, 동일 클래스의 서로 다른 물체를 구분하지 않습니다. -* **인스턴스 세분화(Instance segmentation)**는 클래스를 서로 다른 인스턴스로 나눕니다. +* **Semantic segmentation**은 픽셀의 클래스만 알려주며, 동일한 클래스에 속하는 객체들 간의 구분은 하지 않습니다. +* **Instance segmentation**은 클래스를 서로 다른 인스턴스로 나눕니다. -예를 들어 인스턴스 세분화에서는 이 양들이 서로 다른 물체이지만, 의미론적 세분화에서는 모든 양이 하나의 클래스로 표현됩니다. +예를 들어, 인스턴스 세그멘테이션에서는 이 양들이 서로 다른 객체로 구분되지만, 세맨틱 세그멘테이션에서는 모든 양이 하나의 클래스로 표현됩니다. -> 이미지 출처: [이 블로그 포스트](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50) +> 이미지 출처: [이 블로그 글](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50) -세분화를 위한 다양한 신경망 아키텍처가 있지만, 모두 동일한 구조를 가지고 있습니다. 어떤 면에서는 이전에 배운 오토인코더(autoencoder)와 비슷하지만, 원본 이미지를 분해하는 대신 **마스크**를 분해하는 것이 목표입니다. 따라서 세분화 네트워크는 다음과 같은 구성 요소로 이루어져 있습니다: +세그멘테이션을 위한 다양한 신경망 구조가 있지만, 모두 동일한 구조를 가지고 있습니다. 이전에 배운 오토인코더(autoencoder)와 유사한 방식으로 작동하지만, 원본 이미지를 복원하는 대신 **마스크**를 복원하는 것이 목표입니다. 따라서 세그멘테이션 네트워크는 다음과 같은 구성 요소를 포함합니다: -* **인코더(Encoder)**는 입력 이미지에서 특징을 추출합니다. -* **디코더(Decoder)**는 이러한 특징을 **마스크 이미지**로 변환하며, 클래스 수에 해당하는 채널 수와 동일한 크기를 가집니다. +* **인코더(Encoder)**: 입력 이미지에서 특징을 추출합니다. +* **디코더(Decoder)**: 추출된 특징을 **마스크 이미지**로 변환하며, 마스크 이미지는 클래스 수에 해당하는 채널 수와 동일한 크기를 가집니다. -> 이미지 출처: [이 출판물](https://arxiv.org/pdf/2001.05566.pdf) +> 이미지 출처: [이 논문](https://arxiv.org/pdf/2001.05566.pdf) -세분화에 사용되는 손실 함수에 대해서도 특히 언급해야 합니다. 전통적인 오토인코더를 사용할 때는 두 이미지 간의 유사성을 측정해야 하며, 이를 위해 평균 제곱 오차(MSE)를 사용할 수 있습니다. 세분화에서는 목표 마스크 이미지의 각 픽셀이 클래스 번호(세 번째 차원에서 원-핫 인코딩됨)를 나타내므로, 분류에 특화된 손실 함수 - 모든 픽셀에 대해 평균화된 교차 엔트로피 손실(cross-entropy loss)을 사용해야 합니다. 마스크가 이진인 경우에는 **이진 교차 엔트로피 손실**(BCE)이 사용됩니다. +특히 세그멘테이션에 사용되는 손실 함수에 대해 언급해야 합니다. 기존 오토인코더를 사용할 때는 두 이미지 간의 유사성을 측정해야 하며, 이를 위해 평균 제곱 오차(MSE)를 사용할 수 있습니다. 세그멘테이션에서는 목표 마스크 이미지의 각 픽셀이 클래스 번호를 나타내며 (세 번째 차원에서 원-핫 인코딩됨), 따라서 분류에 특화된 손실 함수 - 크로스 엔트로피 손실을 사용해야 합니다. 마스크가 이진(binary)일 경우 **이진 크로스 엔트로피 손실(BCE)**이 사용됩니다. -> ✅ 원-핫 인코딩은 클래스 레이블을 클래스 수와 동일한 길이의 벡터로 인코딩하는 방법입니다. 이 기술에 대한 [이 기사](https://datagy.io/sklearn-one-hot-encode/)를 참고해 보세요. +> ✅ 원-핫 인코딩은 클래스 레이블을 클래스 수와 동일한 길이의 벡터로 인코딩하는 방법입니다. [이 기사](https://datagy.io/sklearn-one-hot-encode/)에서 이 기술에 대해 자세히 알아보세요. -## 의료 이미징을 위한 세분화 +## 의료 영상에서의 세그멘테이션 -이번 수업에서는 네트워크를 훈련시켜 의료 이미지에서 인간의 신경(모반)을 인식하는 세분화의 실제 사례를 살펴보겠습니다. 우리는 PH2 데이터베이스의 피부 촬영 이미지를 이미지 소스로 사용할 것입니다. 이 데이터셋에는 전형적인 신경, 비전형적인 신경 및 흑색종의 세 가지 클래스에 대한 200개의 이미지가 포함되어 있습니다. 모든 이미지에는 신경을 윤곽선으로 표시하는 해당 **마스크**도 포함되어 있습니다. +이번 강의에서는 세그멘테이션을 실제로 적용하여 의료 이미지에서 인간의 모반(일명 점)을 인식하는 네트워크를 훈련시켜 보겠습니다. 우리는 PH2 데이터베이스의 피부경 검사를 위한 이미지를 사용할 것입니다. 이 데이터셋은 세 가지 클래스(일반 모반, 비정형 모반, 흑색종)의 200개 이미지를 포함하고 있습니다. 모든 이미지에는 모반을 윤곽으로 표시한 **마스크**도 포함되어 있습니다. -> ✅ 이 기술은 이러한 유형의 의료 이미징에 특히 적합하지만, 어떤 다른 실제 응용 프로그램을 상상할 수 있을까요? +> ✅ 이 기술은 특히 이러한 유형의 의료 영상에 적합하지만, 다른 실생활 응용 사례를 상상해볼 수 있나요? navi > 이미지 출처: PH2 데이터베이스 -우리는 배경에서 신경을 세분화하는 모델을 훈련할 것입니다. +우리는 배경에서 모반을 분리하는 모델을 훈련시킬 것입니다. -## ✍️ 연습: 의미론적 세분화 +## ✍️ 연습: 세맨틱 세그멘테이션 -아래의 노트북을 열어 다양한 의미론적 세분화 아키텍처에 대해 더 배우고, 그것들을 다루는 연습을 하며, 실제로 어떻게 작동하는지 확인해 보세요. +아래 노트북을 열어 다양한 세맨틱 세그멘테이션 구조에 대해 더 배우고, 이를 실습하며 실제로 작동하는 모습을 확인하세요. -* [의미론적 세분화 Pytorch](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) -* [의미론적 세분화 TensorFlow](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) +* [Semantic Segmentation Pytorch](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) +* [Semantic Segmentation TensorFlow](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) -## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/212) +## [Post-lecture quiz](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/212) ## 결론 -세분화는 이미지 분류를 위한 매우 강력한 기술로, 바운딩 박스를 넘어 픽셀 수준의 분류로 나아갑니다. 이는 의료 이미징을 포함한 여러 응용 프로그램에서 사용되는 기술입니다. +세그멘테이션은 이미지 분류를 위한 매우 강력한 기술로, 바운딩 박스를 넘어 픽셀 수준의 분류를 가능하게 합니다. 이 기술은 의료 영상 등 다양한 응용 분야에서 사용됩니다. -## 🚀 도전 +## 🚀 도전 과제 -신체 세분화는 사람의 이미지를 가지고 수행할 수 있는 일반적인 작업 중 하나일 뿐입니다. 또 다른 중요한 작업으로는 **골격 감지**와 **포즈 감지**가 있습니다. 포즈 감지가 어떻게 사용될 수 있는지 확인하려면 [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) 라이브러리를 사용해 보세요. +신체 세그멘테이션은 사람의 이미지를 활용하여 수행할 수 있는 일반적인 작업 중 하나입니다. 또 다른 중요한 작업으로는 **골격 감지**와 **자세 감지**가 있습니다. [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) 라이브러리를 사용하여 자세 감지가 어떻게 활용될 수 있는지 확인해보세요. ## 복습 및 자기 학습 -이 [위키피디아 기사](https://wikipedia.org/wiki/Image_segmentation)는 이 기술의 다양한 응용 프로그램에 대한 좋은 개요를 제공합니다. 이 분야의 인스턴스 세분화 및 파놉틱 세분화의 하위 도메인에 대해 더 알아보세요. +이 [위키백과 기사](https://wikipedia.org/wiki/Image_segmentation)는 이 기술의 다양한 응용 사례에 대한 좋은 개요를 제공합니다. 인스턴스 세그멘테이션과 파노프틱 세그멘테이션의 하위 분야에 대해 스스로 더 알아보세요. ## [과제](lab/README.md) -이 실습에서는 [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)에서 **인간 신체 세분화**를 시도해 보세요. +이 실습에서는 [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)을 사용하여 **인간 신체 세그멘테이션**을 시도해보세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 원어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역을 사용함으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/12-Segmentation/lab/README.md b/translations/ko/lessons/4-ComputerVision/12-Segmentation/lab/README.md index 6c6fd7c1..12aefb59 100644 --- a/translations/ko/lessons/4-ComputerVision/12-Segmentation/lab/README.md +++ b/translations/ko/lessons/4-ComputerVision/12-Segmentation/lab/README.md @@ -1,22 +1,31 @@ -# 인체 분할 + +# 인간 신체 분할 -[초보자를 위한 AI 커리큘럼](https://github.com/microsoft/ai-for-beginners)에서의 실습 과제입니다. +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서 제공하는 실습 과제입니다. ## 과제 -영상 제작, 예를 들어 날씨 예보에서, 우리는 종종 카메라에서 사람 이미지를 잘라내어 다른 영상 위에 배치해야 합니다. 이는 일반적으로 **크로마 키** 기술을 사용하여 수행되며, 사람이 균일한 색상의 배경 앞에서 촬영된 후 해당 배경이 제거됩니다. 이 실습에서는 인체 실루엣을 잘라내기 위해 신경망 모델을 훈련할 것입니다. +비디오 제작, 예를 들어 날씨 예보에서, 카메라로 촬영된 인간 이미지를 잘라내어 다른 영상 위에 배치해야 하는 경우가 종종 있습니다. 이는 일반적으로 **크로마 키** 기술을 사용하여 이루어지며, 사람이 단색 배경 앞에서 촬영된 후 배경이 제거됩니다. 이번 실습에서는 인간 실루엣을 잘라내는 신경망 모델을 학습시킬 것입니다. ## 데이터셋 -우리는 Kaggle의 [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)을 사용할 것입니다. Kaggle에서 데이터셋을 수동으로 다운로드하세요. +우리는 Kaggle에서 제공하는 [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)을 사용할 것입니다. Kaggle에서 데이터를 수동으로 다운로드하세요. -## 노트북 시작하기 +## 시작 노트북 [BodySegmentation.ipynb](../../../../../../lessons/4-ComputerVision/12-Segmentation/lab/BodySegmentation.ipynb)를 열어 실습을 시작하세요. -## 주요 포인트 +## 주요 학습 내용 -인체 분할은 사람의 이미지로 수행할 수 있는 일반적인 작업 중 하나일 뿐입니다. 또 다른 중요한 작업으로는 **스켈레톤 감지**와 **포즈 감지**가 있습니다. 이러한 작업이 어떻게 구현될 수 있는지 보려면 [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) 라이브러리를 확인해보세요. +신체 분할은 사람의 이미지를 활용하여 수행할 수 있는 일반적인 작업 중 하나입니다. 또 다른 중요한 작업으로는 **골격 감지**와 **자세 감지**가 있습니다. 이러한 작업이 어떻게 구현될 수 있는지 알아보려면 [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) 라이브러리를 확인해 보세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 저희가 책임지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/README.md b/translations/ko/lessons/4-ComputerVision/README.md index 4f38dc99..8cf64c6e 100644 --- a/translations/ko/lessons/4-ComputerVision/README.md +++ b/translations/ko/lessons/4-ComputerVision/README.md @@ -1,16 +1,25 @@ + # 컴퓨터 비전 -![컴퓨터 비전 내용 요약 그림](../../../../translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.ko.png) +![컴퓨터 비전 내용 요약을 담은 스케치](../../../../translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.ko.png) -이번 섹션에서는 다음에 대해 배울 것입니다: +이 섹션에서는 다음 내용을 학습합니다: -* [컴퓨터 비전 및 OpenCV 소개](06-IntroCV/README.md) +* [컴퓨터 비전과 OpenCV 소개](06-IntroCV/README.md) * [합성곱 신경망](07-ConvNets/README.md) -* [사전 훈련된 네트워크와 전이 학습](08-TransferLearning/README.md) +* [사전 학습된 네트워크와 전이 학습](08-TransferLearning/README.md) * [오토인코더](09-Autoencoders/README.md) * [생성적 적대 신경망](10-GANs/README.md) * [객체 탐지](11-ObjectDetection/README.md) -* [의미론적 분할](12-Segmentation/README.md) +* [시맨틱 분할](12-Segmentation/README.md) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/13-TextRep/README.md b/translations/ko/lessons/5-NLP/13-TextRep/README.md index 0ba063fa..6cd9774d 100644 --- a/translations/ko/lessons/5-NLP/13-TextRep/README.md +++ b/translations/ko/lessons/5-NLP/13-TextRep/README.md @@ -1,53 +1,62 @@ + # 텍스트를 텐서로 표현하기 ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/113) ## 텍스트 분류 -이 섹션의 첫 번째 부분에서는 **텍스트 분류** 작업에 집중할 것입니다. 우리는 다음과 같은 뉴스 기사를 포함하는 [AG News](https://www.kaggle.com/amananandrai/ag-news-classification-dataset) 데이터셋을 사용할 것입니다: +이 섹션의 첫 번째 부분에서는 **텍스트 분류** 작업에 집중할 것입니다. 우리는 [AG News](https://www.kaggle.com/amananandrai/ag-news-classification-dataset) 데이터셋을 사용할 것이며, 이 데이터셋에는 다음과 같은 뉴스 기사들이 포함되어 있습니다: -* 카테고리: Sci/Tech -* 제목: Ky. Company Wins Grant to Study Peptides (AP) -* 본문: AP - 루이빌 대학교의 화학 연구원이 설립한 회사가 펩타이드 연구를 위한 보조금을 받았습니다... +* 카테고리: 과학/기술 +* 제목: Ky. 회사가 펩타이드 연구를 위한 보조금을 받다 (AP) +* 본문: AP - 루이빌 대학교의 화학 연구자가 설립한 회사가 개발을 위한 보조금을 받았다... -우리의 목표는 텍스트를 기반으로 뉴스 항목을 카테고리 중 하나로 분류하는 것입니다. +우리의 목표는 텍스트를 기반으로 뉴스 기사를 특정 카테고리로 분류하는 것입니다. -## 텍스트 표현하기 +## 텍스트 표현 -신경망을 사용하여 자연어 처리(NLP) 작업을 해결하려면 텍스트를 텐서로 표현할 방법이 필요합니다. 컴퓨터는 이미 ASCII 또는 UTF-8과 같은 인코딩을 사용하여 텍스트 문자를 숫자로 변환하여 화면의 글꼴에 매핑합니다. +신경망을 사용하여 자연어 처리(NLP) 작업을 해결하려면 텍스트를 텐서로 표현할 방법이 필요합니다. 컴퓨터는 이미 ASCII나 UTF-8 같은 인코딩을 사용하여 화면의 글꼴에 매핑되는 숫자로 텍스트 문자를 표현합니다. 문자를 ASCII 및 이진 표현으로 매핑하는 다이어그램을 보여주는 이미지 > [이미지 출처](https://www.seobility.net/en/wiki/ASCII) -인간으로서 우리는 각 글자가 **무엇을 나타내는지** 이해하고, 모든 문자가 어떻게 결합되어 문장의 단어를 형성하는지 이해합니다. 그러나 컴퓨터는 스스로 이러한 이해를 갖고 있지 않으며, 신경망은 훈련 중에 의미를 배워야 합니다. +사람은 각 글자가 **무엇을 나타내는지** 이해하고, 모든 문자가 함께 문장의 단어를 형성하는 방식을 이해합니다. 그러나 컴퓨터는 스스로 이러한 이해를 가지지 못하며, 신경망은 학습 중에 의미를 배워야 합니다. 따라서 텍스트를 표현할 때 다양한 접근 방식을 사용할 수 있습니다: -* **문자 수준 표현**: 각 문자를 숫자로 취급하여 텍스트를 표현합니다. 텍스트 말뭉치에 *C* 개의 서로 다른 문자가 있다고 가정할 때, 단어 *Hello*는 5x*C* 텐서로 표현됩니다. 각 글자는 원-핫 인코딩의 텐서 열에 해당합니다. -* **단어 수준 표현**: 텍스트의 모든 단어로 **어휘**를 만들고, 그런 다음 원-핫 인코딩을 사용하여 단어를 표현합니다. 이 접근 방식은 단어가 더 높은 수준의 의미 개념을 사용하므로 신경망의 작업을 단순화하기 때문에 더 나은 방법입니다. 그러나 큰 사전 크기로 인해 고차원 희소 텐서를 다루어야 합니다. +* **문자 수준 표현**: 텍스트를 각 문자를 숫자로 취급하여 표현합니다. 텍스트 코퍼스에 *C*개의 서로 다른 문자가 있다고 가정하면, 단어 *Hello*는 5x*C* 텐서로 표현됩니다. 각 글자는 원-핫 인코딩에서 텐서 열에 해당합니다. +* **단어 수준 표현**: 텍스트의 모든 단어로 **어휘**를 생성하고, 단어를 원-핫 인코딩으로 표현합니다. 이 접근 방식은 문자 자체가 큰 의미를 가지지 않기 때문에 더 나은 방법입니다. 따라서 더 높은 수준의 의미적 개념인 단어를 사용함으로써 신경망의 작업을 단순화합니다. 그러나 큰 사전 크기로 인해 고차원 희소 텐서를 처리해야 합니다. -표현 방식에 관계없이 먼저 텍스트를 **토큰**의 시퀀스로 변환해야 합니다. 하나의 토큰은 문자, 단어 또는 때로는 단어의 일부일 수 있습니다. 그런 다음 토큰을 숫자로 변환하며, 일반적으로 **어휘**를 사용하여 이 숫자를 신경망에 원-핫 인코딩을 통해 입력할 수 있습니다. +어떤 표현을 사용하든 먼저 텍스트를 **토큰**의 시퀀스로 변환해야 합니다. 하나의 토큰은 문자, 단어 또는 때로는 단어의 일부일 수 있습니다. 그런 다음 **어휘**를 사용하여 토큰을 숫자로 변환하며, 이 숫자는 원-핫 인코딩을 통해 신경망에 입력될 수 있습니다. ## N-그램 -자연어에서 단어의 정확한 의미는 문맥에 따라 결정됩니다. 예를 들어, *neural network*와 *fishing network*의 의미는 완전히 다릅니다. 이를 고려하는 한 가지 방법은 단어 쌍을 사용하여 모델을 구축하고, 단어 쌍을 별도의 어휘 토큰으로 간주하는 것입니다. 이렇게 하면 문장 *I like to go fishing*은 다음과 같은 토큰 시퀀스로 표현됩니다: *I like*, *like to*, *to go*, *go fishing*. 이 접근 방식의 문제는 사전 크기가 크게 증가하고, *go fishing*과 *go shopping*과 같은 조합이 서로 다른 토큰으로 표현되지만, 동일한 동사를 사용함에도 불구하고 의미적 유사성이 없다는 것입니다. +자연어에서 단어의 정확한 의미는 문맥에서만 결정될 수 있습니다. 예를 들어, *신경망*과 *어망*의 의미는 완전히 다릅니다. 이를 고려하는 한 가지 방법은 단어 쌍을 모델에 포함시키고 단어 쌍을 별도의 어휘 토큰으로 간주하는 것입니다. 이렇게 하면 문장 *I like to go fishing*은 다음과 같은 토큰 시퀀스로 표현됩니다: *I like*, *like to*, *to go*, *go fishing*. 이 접근 방식의 문제는 사전 크기가 크게 증가하며, *go fishing*과 *go shopping* 같은 조합이 서로 다른 토큰으로 표현되어 동일한 동사를 사용했음에도 불구하고 의미적 유사성을 공유하지 않는다는 점입니다. -경우에 따라 세 단어의 조합인 삼그램(tri-grams)도 고려할 수 있습니다. 따라서 이 접근 방식은 종종 **n-그램**이라고 불립니다. 또한 문자 수준 표현에서 n-그램을 사용하는 것이 의미가 있으며, 이 경우 n-그램은 대략적으로 서로 다른 음절에 해당합니다. +경우에 따라 세 단어의 조합인 tri-grams를 사용할 수도 있습니다. 따라서 이러한 접근 방식은 일반적으로 **n-그램**이라고 불립니다. 또한 문자 수준 표현에서 n-그램을 사용하는 것이 합리적일 수 있으며, 이 경우 n-그램은 대략적으로 서로 다른 음절에 해당합니다. -## 단어 가방 및 TF/IDF +## Bag-of-Words와 TF/IDF -텍스트 분류와 같은 작업을 해결할 때, 우리는 텍스트를 고정 크기 벡터로 표현할 수 있어야 하며, 이를 최종 밀집 분류기의 입력으로 사용할 것입니다. 이를 수행하는 가장 간단한 방법 중 하나는 모든 개별 단어 표현을 결합하는 것입니다. 예를 들어, 각 단어의 원-핫 인코딩을 추가하면 각 단어가 텍스트 내에서 얼마나 자주 나타나는지를 보여주는 빈도 벡터를 얻을 수 있습니다. 이러한 텍스트 표현을 **단어 가방**(BoW)이라고 합니다. +텍스트 분류와 같은 작업을 해결할 때, 텍스트를 고정 크기의 벡터로 표현할 수 있어야 하며, 이를 최종 밀집 분류기에 입력으로 사용할 것입니다. 이를 수행하는 가장 간단한 방법 중 하나는 개별 단어 표현을 결합하는 것입니다. 예를 들어, 각 단어의 원-핫 인코딩을 더하면 텍스트 내에서 각 단어가 나타나는 빈도를 보여주는 벡터를 얻게 됩니다. 이러한 텍스트 표현을 **Bag-of-Words**(BoW)라고 합니다. -> 저자 제공 이미지 +> 이미지 제공: 저자 -BoW는 본질적으로 텍스트에서 어떤 단어가 어떤 양으로 나타나는지를 나타내며, 이는 텍스트의 주제를 잘 나타낼 수 있습니다. 예를 들어, 정치에 관한 뉴스 기사는 *president*와 *country*와 같은 단어를 포함할 가능성이 높고, 과학 출판물은 *collider*, *discovered*와 같은 단어를 포함할 것입니다. 따라서 단어 빈도는 텍스트 내용의 좋은 지표가 될 수 있습니다. +BoW는 텍스트에 어떤 단어가 어떤 빈도로 나타나는지를 나타내며, 이는 텍스트가 무엇에 관한 것인지에 대한 좋은 지표가 될 수 있습니다. 예를 들어, 정치 관련 뉴스 기사는 *대통령*, *국가*와 같은 단어를 포함할 가능성이 높고, 과학 논문은 *충돌기*, *발견됨* 등의 단어를 포함할 것입니다. 따라서 단어 빈도는 많은 경우 텍스트 내용의 좋은 지표가 될 수 있습니다. -BoW의 문제는 *and*, *is*와 같은 특정 일반 단어가 대부분의 텍스트에 나타나며, 이들이 가장 높은 빈도를 가지므로 실제로 중요한 단어를 가리는 것입니다. 이러한 단어의 중요성을 낮추기 위해 전체 문서 집합에서 단어가 나타나는 빈도를 고려할 수 있습니다. 이는 TF/IDF 접근 방식의 주요 아이디어이며, 이 수업에 첨부된 노트북에서 더 자세히 다룰 것입니다. +BoW의 문제는 *and*, *is*와 같은 일반적인 단어가 대부분의 텍스트에 나타나며 가장 높은 빈도를 가지기 때문에 실제로 중요한 단어를 가리는 것입니다. 이러한 단어의 중요도를 낮추기 위해 문서 전체 컬렉션에서 단어가 나타나는 빈도를 고려할 수 있습니다. 이것이 TF/IDF 접근 방식의 주요 아이디어이며, 이 강의에 첨부된 노트북에서 더 자세히 다룹니다. -그러나 이러한 접근 방식은 텍스트의 **의미**를 완전히 고려할 수 없습니다. 이를 위해서는 더 강력한 신경망 모델이 필요하며, 이는 이 섹션 후반부에서 논의할 것입니다. +그러나 이러한 접근 방식은 텍스트의 **의미**를 완전히 고려할 수 없습니다. 이를 위해서는 더 강력한 신경망 모델이 필요하며, 이는 이후 섹션에서 논의할 것입니다. ## ✍️ 연습: 텍스트 표현 @@ -58,19 +67,19 @@ BoW의 문제는 *and*, *is*와 같은 특정 일반 단어가 대부분의 텍 ## 결론 -지금까지 우리는 서로 다른 단어에 빈도 가중치를 추가할 수 있는 기술을 연구했습니다. 그러나 이들은 의미나 순서를 표현할 수 없습니다. 유명한 언어학자 J. R. Firth가 1935년에 말했듯이, "단어의 완전한 의미는 항상 문맥에 따라 다르며, 문맥과 분리된 의미에 대한 연구는 진지하게 받아들여질 수 없다." 우리는 나중에 언어 모델링을 사용하여 텍스트에서 문맥 정보를 캡처하는 방법을 배울 것입니다. +지금까지 우리는 단어의 빈도 가중치를 추가할 수 있는 기술을 공부했습니다. 그러나 이러한 기술은 의미나 순서를 표현할 수 없습니다. 유명한 언어학자 J. R. Firth는 1935년에 "단어의 완전한 의미는 항상 문맥적이며, 문맥을 고려하지 않은 의미 연구는 진지하게 받아들일 수 없다"고 말했습니다. 우리는 이후 강의에서 언어 모델링을 사용하여 텍스트에서 문맥 정보를 캡처하는 방법을 배울 것입니다. -## 🚀 도전 +## 🚀 도전 과제 -단어 가방 및 다양한 데이터 모델을 사용하여 다른 연습 문제를 시도해 보세요. 이 [Kaggle 대회](https://www.kaggle.com/competitions/word2vec-nlp-tutorial/overview/part-1-for-beginners-bag-of-words)에서 영감을 받을 수 있습니다. +Bag-of-Words와 다양한 데이터 모델을 사용하여 다른 연습을 시도해 보세요. 이 [Kaggle 대회](https://www.kaggle.com/competitions/word2vec-nlp-tutorial/overview/part-1-for-beginners-bag-of-words)에서 영감을 받을 수 있습니다. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/213) -## 리뷰 및 자기 학습 +## 복습 및 자기 학습 -[Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste)에서 텍스트 임베딩 및 단어 가방 기술로 기술을 연습하세요. +[Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste)에서 텍스트 임베딩과 Bag-of-Words 기술을 연습하세요. ## [과제: 노트북](assignment.md) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어에서 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/13-TextRep/assignment.md b/translations/ko/lessons/5-NLP/13-TextRep/assignment.md index 76dc9a79..d778da22 100644 --- a/translations/ko/lessons/5-NLP/13-TextRep/assignment.md +++ b/translations/ko/lessons/5-NLP/13-TextRep/assignment.md @@ -1,6 +1,15 @@ + # 과제: 노트북 -이 수업과 관련된 노트북(파이토치 또는 텐서플로우 버전 중 하나)을 사용하여, 자신만의 데이터셋을 사용해 다시 실행해 보세요. Kaggle에서 가져온 데이터셋을 사용하되, 출처를 명시해야 합니다. 노트북을 다시 작성하여 자신의 발견을 강조하세요. 놀라운 결과를 보여줄 수 있는 혁신적인 데이터셋을 시도해 보세요. 예를 들어, [UFO 목격에 관한 이 데이터셋](https://www.kaggle.com/datasets/NUFORC/ufo-sightings)도 좋은 선택이 될 수 있습니다. +이 강의와 관련된 노트북( PyTorch 또는 TensorFlow 버전 중 하나)을 사용하여, 자신의 데이터셋으로 다시 실행해 보세요. 데이터셋은 Kaggle에서 가져온 것을 사용하고 출처를 명시하세요. 노트북을 다시 작성하여 자신의 발견 내용을 강조하세요. 예상치 못한 흥미로운 데이터셋을 시도해보세요. 예를 들어, NUFORC에서 제공하는 [UFO 목격 사례에 대한 데이터셋](https://www.kaggle.com/datasets/NUFORC/ufo-sightings) 같은 것이 있습니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역을 사용하여 발생하는 오해나 잘못된 해석에 대해서는 저희가 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/14-Embeddings/README.md b/translations/ko/lessons/5-NLP/14-Embeddings/README.md index ec9d812c..4d8c3843 100644 --- a/translations/ko/lessons/5-NLP/14-Embeddings/README.md +++ b/translations/ko/lessons/5-NLP/14-Embeddings/README.md @@ -1,68 +1,77 @@ + # 임베딩 ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/114) -BoW 또는 TF/IDF 기반의 분류기를 훈련할 때, 우리는 길이가 `vocab_size`인 고차원 단어 가방 벡터에서 작업했으며, 저차원 위치 표현 벡터를 희소한 원-핫 표현으로 명시적으로 변환하고 있었습니다. 그러나 이 원-핫 표현은 메모리 효율적이지 않습니다. 게다가 각 단어는 서로 독립적으로 처리되므로, 즉 원-핫 인코딩된 벡터는 단어 간의 의미적 유사성을 표현하지 않습니다. +BoW 또는 TF/IDF 기반의 분류기를 학습시킬 때, 우리는 `vocab_size` 길이의 고차원 bag-of-words 벡터를 사용했으며, 저차원 위치 표현 벡터를 희소한 원-핫 표현으로 명시적으로 변환했습니다. 하지만 이 원-핫 표현은 메모리 효율적이지 않습니다. 게다가 각 단어는 서로 독립적으로 처리되며, 원-핫 인코딩된 벡터는 단어 간의 의미적 유사성을 표현하지 못합니다. -**임베딩**의 아이디어는 단어를 저차원 밀집 벡터로 표현하여 단어의 의미를 반영하는 것입니다. 의미 있는 단어 임베딩을 구축하는 방법에 대해서는 나중에 논의하겠지만, 지금은 임베딩을 단어 벡터의 차원을 낮추는 방법으로 생각해 봅시다. +**임베딩**의 아이디어는 단어를 저차원의 밀집 벡터로 표현하여 단어의 의미를 어느 정도 반영하는 것입니다. 나중에 의미 있는 단어 임베딩을 구축하는 방법에 대해 논의하겠지만, 지금은 임베딩을 단어 벡터의 차원을 낮추는 방법으로 생각해 봅시다. -따라서 임베딩 레이어는 단어를 입력으로 받아서 지정된 `embedding_size`의 출력 벡터를 생성합니다. 어떤 면에서는 `Linear` 레이어와 매우 유사하지만, 원-핫 인코딩된 벡터를 사용하는 대신 단어 번호를 입력으로 받아 대규모 원-핫 인코딩 벡터 생성을 피할 수 있습니다. +임베딩 레이어는 단어를 입력으로 받아 지정된 `embedding_size`의 출력 벡터를 생성합니다. 이는 `Linear` 레이어와 매우 유사하지만, 원-핫 인코딩된 벡터 대신 단어 번호를 입력으로 받을 수 있어 큰 원-핫 인코딩 벡터를 생성하지 않아도 됩니다. -우리의 분류기 네트워크에서 임베딩 레이어를 첫 번째 레이어로 사용함으로써, 우리는 단어 가방 모델에서 **임베딩 가방** 모델로 전환할 수 있습니다. 여기서 우리는 텍스트의 각 단어를 해당 임베딩으로 변환한 다음, `sum`, `average` 또는 `max`와 같은 모든 임베딩에 대해 집계 함수를 계산합니다. +분류기 네트워크의 첫 번째 레이어로 임베딩 레이어를 사용하면 bag-of-words 모델에서 **embedding bag** 모델로 전환할 수 있습니다. 여기서 텍스트의 각 단어를 해당 임베딩으로 변환한 후, `sum`, `average`, `max`와 같은 집계 함수를 사용하여 모든 임베딩을 계산합니다. -![다섯 개의 연속 단어에 대한 임베딩 분류기를 보여주는 이미지.](../../../../../translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.ko.png) +![다섯 개의 시퀀스 단어에 대한 임베딩 분류기를 보여주는 이미지.](../../../../../translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.ko.png) -> 저자 제공 이미지 +> 작성자 제공 이미지 ## ✍️ 연습: 임베딩 -다음 노트북에서 학습을 계속하세요: -* [PyTorch로 임베딩하기](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) -* [TensorFlow로 임베딩하기](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) +다음 노트북에서 학습을 이어가세요: +* [PyTorch로 임베딩](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) +* [TensorFlow로 임베딩](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) -## 의미 임베딩: Word2Vec +## 의미적 임베딩: Word2Vec -임베딩 레이어가 단어를 벡터 표현으로 매핑하는 방법을 학습하는 동안, 이 표현이 반드시 많은 의미적 의미를 가지고 있는 것은 아닙니다. 유사한 단어 또는 동의어가 어떤 벡터 거리(예: 유클리드 거리) 측면에서 서로 가까운 벡터에 대응하도록 벡터 표현을 학습하는 것이 좋습니다. +임베딩 레이어가 단어를 벡터 표현으로 매핑하는 방법을 학습했지만, 이 표현이 반드시 의미적 의미를 가지는 것은 아닙니다. 비슷한 단어 또는 동의어가 어떤 벡터 거리(예: 유클리드 거리) 측면에서 서로 가까운 벡터로 표현되도록 학습하면 좋을 것입니다. -이를 위해, 우리는 특정 방식으로 대규모 텍스트 모음에서 임베딩 모델을 사전 훈련해야 합니다. 의미 임베딩을 훈련하는 한 가지 방법은 [Word2Vec](https://en.wikipedia.org/wiki/Word2vec)이라고 불립니다. 이는 단어의 분산 표현을 생성하기 위해 사용되는 두 가지 주요 아키텍처를 기반으로 합니다: +이를 위해서는 특정 방식으로 대규모 텍스트 컬렉션에서 임베딩 모델을 사전 학습해야 합니다. 의미적 임베딩을 학습하는 한 가지 방법은 [Word2Vec](https://en.wikipedia.org/wiki/Word2vec)입니다. 이는 단어의 분산 표현을 생성하기 위해 사용되는 두 가지 주요 아키텍처를 기반으로 합니다: - - **연속 단어 가방** (CBoW) — 이 아키텍처에서는 모델이 주변 맥락에서 단어를 예측하도록 훈련합니다. ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$가 주어지면, 모델의 목표는 $(W_{-2},W_{-1},W_1,W_2)$에서 $W_0$를 예측하는 것입니다. - - **연속 스킵그램**은 CBoW와 반대입니다. 모델은 현재 단어를 예측하기 위해 주변 맥락 단어의 윈도우를 사용합니다. +- **연속 bag-of-words** (CBoW) — 이 아키텍처에서는 주변 문맥에서 단어를 예측하도록 모델을 학습시킵니다. ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$가 주어졌을 때, 모델의 목표는 $(W_{-2},W_{-1},W_1,W_2)$로부터 $W_0$를 예측하는 것입니다. +- **연속 skip-gram** — CBoW와 반대입니다. 모델은 주변 문맥 단어를 사용하여 현재 단어를 예측합니다. -CBoW는 더 빠르지만, 스킵그램은 더 느리지만 드문 단어를 더 잘 표현합니다. +CBoW는 더 빠르지만, skip-gram은 더 느리며 드문 단어를 더 잘 표현합니다. -![단어를 벡터로 변환하는 CBoW와 스킵그램 알고리즘을 보여주는 이미지.](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.ko.png) +![단어를 벡터로 변환하는 CBoW와 Skip-Gram 알고리즘을 보여주는 이미지.](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.ko.png) -> [이 논문](https://arxiv.org/pdf/1301.3781.pdf)에서 가져온 이미지 +> [이 논문](https://arxiv.org/pdf/1301.3781.pdf)에서 제공된 이미지 -Word2Vec로 사전 훈련된 임베딩(및 GloVe와 같은 다른 유사한 모델)은 신경망의 임베딩 레이어 대신 사용할 수도 있습니다. 그러나 우리는 어휘 문제를 다루어야 합니다. 왜냐하면 Word2Vec/GloVe를 사전 훈련하는 데 사용된 어휘가 우리의 텍스트 코퍼스의 어휘와 다를 가능성이 높기 때문입니다. 이 문제를 해결하는 방법을 알아보려면 위의 노트북을 참조하세요. +Word2Vec 사전 학습 임베딩(및 GloVe와 같은 다른 유사한 모델)은 신경망의 임베딩 레이어 대신 사용할 수 있습니다. 하지만 어휘 문제를 처리해야 합니다. Word2Vec/GloVe를 사전 학습하는 데 사용된 어휘는 우리의 텍스트 코퍼스에서 사용된 어휘와 다를 가능성이 높습니다. 위의 노트북을 살펴보며 이 문제를 해결하는 방법을 확인하세요. -## 맥락 임베딩 +## 문맥적 임베딩 -Word2Vec와 같은 전통적인 사전 훈련된 임베딩 표현의 주요 한계 중 하나는 단어 의미의 모호성 문제입니다. 사전 훈련된 임베딩은 문맥에서 단어의 의미를 어느 정도 포착할 수 있지만, 단어의 모든 가능한 의미가 동일한 임베딩에 인코딩됩니다. 이는 'play'와 같은 많은 단어가 사용되는 맥락에 따라 다른 의미를 가지기 때문에 하위 모델에서 문제를 일으킬 수 있습니다. +Word2Vec와 같은 전통적인 사전 학습 임베딩 표현의 주요 한계는 단어 의미 중의성 문제입니다. 사전 학습 임베딩은 문맥에서 단어의 의미를 어느 정도 포착할 수 있지만, 단어의 모든 가능한 의미를 동일한 임베딩에 인코딩합니다. 이는 'play'와 같은 단어가 사용된 문맥에 따라 다른 의미를 가지기 때문에 다운스트림 모델에서 문제가 될 수 있습니다. -예를 들어, 'play'라는 단어는 다음 두 문장에서 상당히 다른 의미를 가지고 있습니다: +예를 들어, 'play'라는 단어는 다음 두 문장에서 매우 다른 의미를 가집니다: -- 나는 극장에서 **연극**을 보러 갔다. +- 나는 극장에서 **연극**을 봤다. - 존은 친구들과 **놀고** 싶어한다. -위의 사전 훈련된 임베딩은 'play'라는 단어의 두 가지 의미를 동일한 임베딩으로 표현합니다. 이러한 한계를 극복하기 위해, 우리는 대규모 텍스트 코퍼스를 기반으로 한 **언어 모델**에 따라 임베딩을 구축해야 하며, 이는 단어가 다양한 맥락에서 어떻게 결합될 수 있는지를 *알고* 있습니다. 맥락 임베딩에 대한 논의는 이 튜토리얼의 범위를 벗어나지만, 나중에 언어 모델에 대해 이야기할 때 다시 돌아올 것입니다. +위의 사전 학습 임베딩은 'play'라는 단어의 두 가지 의미를 동일한 임베딩으로 표현합니다. 이 한계를 극복하려면 **언어 모델**을 기반으로 임베딩을 구축해야 합니다. 언어 모델은 대규모 텍스트 코퍼스에서 학습되며, 단어가 다양한 문맥에서 어떻게 사용될 수 있는지 *이해*합니다. 문맥적 임베딩에 대한 논의는 이 튜토리얼의 범위를 벗어나지만, 이후 강의에서 언어 모델을 다룰 때 다시 논의할 것입니다. ## 결론 -이번 수업에서는 TensorFlow와 PyTorch에서 임베딩 레이어를 구축하고 사용하는 방법을 배워 단어의 의미를 더 잘 반영할 수 있음을 발견했습니다. +이 강의에서는 TensorFlow와 PyTorch에서 임베딩 레이어를 구축하고 사용하는 방법을 배워 단어의 의미를 더 잘 반영할 수 있음을 발견했습니다. -## 🚀 도전 +## 🚀 도전 과제 -Word2Vec는 노래 가사와 시를 생성하는 등 흥미로운 응용 프로그램에 사용되었습니다. 저자가 Word2Vec를 사용하여 시를 생성하는 과정을 설명하는 [이 기사](https://www.politetype.com/blog/word2vec-color-poems)를 살펴보세요. 또한 [Dan Shiffmann의 이 동영상](https://www.youtube.com/watch?v=LSS_bos_TPI&ab_channel=TheCodingTrain)을 시청하여 이 기술에 대한 다른 설명을 알아보세요. 그런 다음 이러한 기술을 Kaggle에서 가져온 자신의 텍스트 코퍼스에 적용해 보세요. +Word2Vec는 노래 가사와 시를 생성하는 등 흥미로운 응용 프로그램에 사용되었습니다. [이 글](https://www.politetype.com/blog/word2vec-color-poems)을 읽어보세요. 작성자가 Word2Vec를 사용해 시를 생성하는 과정을 설명합니다. 또한 [Dan Shiffmann의 이 영상](https://www.youtube.com/watch?v=LSS_bos_TPI&ab_channel=TheCodingTrain)을 시청하여 이 기술에 대한 다른 설명을 확인하세요. 그런 다음 Kaggle에서 텍스트 코퍼스를 가져와 자신의 텍스트 코퍼스에 이 기술을 적용해 보세요. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/214) ## 복습 및 자기 학습 -Word2Vec에 대한 이 논문을 읽어보세요: [벡터 공간에서 단어 표현의 효율적인 추정](https://arxiv.org/pdf/1301.3781.pdf) +Word2Vec에 대한 이 논문을 읽어보세요: [Efficient Estimation of Word Representations in Vector Space](https://arxiv.org/pdf/1301.3781.pdf) ## [과제: 노트북](assignment.md) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 있을 수 있음을 유의해 주시기 바랍니다. 원본 문서는 해당 언어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역을 사용하여 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/14-Embeddings/assignment.md b/translations/ko/lessons/5-NLP/14-Embeddings/assignment.md index 30fffe4f..33a9fbe8 100644 --- a/translations/ko/lessons/5-NLP/14-Embeddings/assignment.md +++ b/translations/ko/lessons/5-NLP/14-Embeddings/assignment.md @@ -1,6 +1,15 @@ + # 과제: 노트북 -이 수업과 관련된 노트북(파이토치 또는 텐서플로우 버전 중 하나)을 사용하여, 자신의 데이터셋으로 다시 실행해 보세요. 데이터셋은 저작권을 준수하여 Kaggle에서 가져올 수 있습니다. 노트북을 수정하여 자신의 발견을 강조해 보세요. 다른 종류의 데이터셋을 시도하고, [이 비틀즈 가사](https://www.kaggle.com/datasets/jenlooper/beatles-lyrics)와 같은 텍스트를 사용하여 발견한 내용을 문서화하세요. +이 강의와 관련된 노트북(예: PyTorch 또는 TensorFlow 버전)을 사용하여, 자신의 데이터셋을 활용해 다시 실행해 보세요. Kaggle에서 가져온 데이터셋을 사용하고 출처를 명시하세요. 노트북을 재작성하여 자신의 발견 내용을 강조하세요. 다른 종류의 데이터셋을 시도하고, [이 Beatles 가사](https://www.kaggle.com/datasets/jenlooper/beatles-lyrics)와 같은 텍스트를 사용하여 결과를 문서화해 보세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 저희가 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/15-LanguageModeling/README.md b/translations/ko/lessons/5-NLP/15-LanguageModeling/README.md index a5acb02a..c64fc534 100644 --- a/translations/ko/lessons/5-NLP/15-LanguageModeling/README.md +++ b/translations/ko/lessons/5-NLP/15-LanguageModeling/README.md @@ -1,45 +1,54 @@ + # 언어 모델링 -Word2Vec 및 GloVe와 같은 의미 임베딩은 사실 **언어 모델링**을 향한 첫 번째 단계로, 언어의 본질을 어느 정도 *이해*하거나 *표현*하는 모델을 만드는 것입니다. +Word2Vec와 GloVe와 같은 의미 임베딩은 사실 **언어 모델링**을 향한 첫걸음입니다. 이는 언어의 본질을 *이해*하거나 (*표현*)하는 모델을 만드는 것을 목표로 합니다. ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/115) -언어 모델링의 주요 아이디어는 비지도 방식으로 레이블이 없는 데이터셋에서 모델을 훈련하는 것입니다. 이는 사용할 수 있는 레이블이 없는 텍스트가 방대하지만, 레이블이 있는 텍스트의 양은 레이블링에 쏟을 수 있는 노력의 양에 항상 제한받기 때문에 중요합니다. 대개 우리는 텍스트에서 **누락된 단어를 예측**할 수 있는 언어 모델을 구축할 수 있습니다. 이는 텍스트에서 임의의 단어를 마스킹하고 이를 훈련 샘플로 사용하는 것이 쉽기 때문입니다. +언어 모델링의 주요 아이디어는 비지도 학습 방식으로 라벨이 없는 데이터셋을 학습시키는 것입니다. 이는 라벨이 없는 텍스트는 방대한 양이 존재하는 반면, 라벨이 있는 텍스트는 라벨링에 필요한 노력의 한계로 인해 항상 제한적일 수밖에 없기 때문에 중요합니다. 대부분의 경우, 텍스트에서 **누락된 단어를 예측**할 수 있는 언어 모델을 구축할 수 있습니다. 이는 텍스트에서 임의의 단어를 마스킹 처리하고 이를 학습 샘플로 사용하는 것이 쉽기 때문입니다. -## 임베딩 훈련 +## 임베딩 학습 -이전 예제에서는 사전 훈련된 의미 임베딩을 사용했지만, 이러한 임베딩이 어떻게 훈련될 수 있는지 보는 것은 흥미롭습니다. 사용할 수 있는 몇 가지 가능한 아이디어가 있습니다: +이전 예제에서는 사전 학습된 의미 임베딩을 사용했지만, 이러한 임베딩이 어떻게 학습되는지 살펴보는 것도 흥미롭습니다. 사용할 수 있는 몇 가지 아이디어는 다음과 같습니다: -* **N-그램** 언어 모델링: N개의 이전 토큰을 보고 토큰을 예측하는 방법 (N-그램) -* **연속 단어 가방** (CBoW): 토큰 시퀀스 $W_{-N}$, ..., $W_N$에서 중간 토큰 $W_0$를 예측하는 방법. -* **스킵-그램**: 중간 토큰 $W_0$에서 이웃 토큰 집합 {$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$}을 예측하는 방법. +* **N-그램** 언어 모델링: N개의 이전 토큰을 보고 현재 토큰을 예측하는 방식 (N-그램) +* **연속적인 단어 묶음** (CBoW): 토큰 시퀀스 $W_{-N}$, ..., $W_N$에서 중간 토큰 $W_0$을 예측하는 방식 +* **스킵-그램**: 중간 토큰 $W_0$에서 인접한 토큰 집합 {$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$}을 예측하는 방식 -![단어를 벡터로 변환하는 알고리즘의 예시 이미지](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.ko.png) +![단어를 벡터로 변환하는 알고리즘에 대한 논문 이미지](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.ko.png) -> [이 논문](https://arxiv.org/pdf/1301.3781.pdf)에서 발췌한 이미지 +> 이미지 출처: [이 논문](https://arxiv.org/pdf/1301.3781.pdf) -## ✍️ 예제 노트북: CBoW 모델 훈련 +## ✍️ 예제 노트북: CBoW 모델 학습 -다음 노트북에서 학습을 계속하세요: +다음 노트북에서 학습을 이어가세요: -* [TensorFlow로 CBoW Word2Vec 훈련하기](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) -* [PyTorch로 CBoW Word2Vec 훈련하기](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) +* [TensorFlow를 사용한 CBoW Word2Vec 학습](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) +* [PyTorch를 사용한 CBoW Word2Vec 학습](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) ## 결론 -이전 수업에서 우리는 단어 임베딩이 마법처럼 작동한다는 것을 보았습니다! 이제 단어 임베딩을 훈련하는 것이 그렇게 복잡한 작업이 아니라는 것을 알게 되었으며, 필요하다면 도메인 특화 텍스트에 대해 자체 단어 임베딩을 훈련할 수 있어야 합니다. +이전 강의에서 단어 임베딩이 마치 마법처럼 작동한다는 것을 확인했습니다! 이제 단어 임베딩 학습이 매우 복잡한 작업이 아니라는 것을 알게 되었으며, 필요하다면 특정 도메인 텍스트를 위한 자체 단어 임베딩을 학습시킬 수 있을 것입니다. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/215) -## 리뷰 & 자기 학습 +## 복습 및 자기 학습 -* [언어 모델링에 대한 공식 PyTorch 튜토리얼](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html). -* [Word2Vec 모델 훈련에 대한 공식 TensorFlow 튜토리얼](https://www.TensorFlow.org/tutorials/text/word2vec). -* **gensim** 프레임워크를 사용하여 몇 줄의 코드로 가장 일반적으로 사용되는 임베딩을 훈련하는 방법은 [이 문서](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html)에서 설명되어 있습니다. +* [PyTorch 공식 언어 모델링 튜토리얼](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html) +* [TensorFlow 공식 Word2Vec 모델 학습 튜토리얼](https://www.TensorFlow.org/tutorials/text/word2vec) +* **gensim** 프레임워크를 사용하여 몇 줄의 코드로 가장 일반적으로 사용되는 임베딩을 학습하는 방법은 [이 문서](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html)에 설명되어 있습니다. -## 🚀 [과제: 스킵-그램 모델 훈련하기](lab/README.md) +## 🚀 [과제: 스킵-그램 모델 학습](lab/README.md) -실습에서는 이 수업의 코드를 수정하여 CBoW 대신 스킵-그램 모델을 훈련하도록 도전합니다. [자세한 내용 읽기](lab/README.md) +실습에서는 이번 강의의 코드를 수정하여 CBoW 대신 스킵-그램 모델을 학습시키는 도전을 하게 됩니다. [자세히 읽기](lab/README.md) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/15-LanguageModeling/lab/README.md b/translations/ko/lessons/5-NLP/15-LanguageModeling/lab/README.md index d672cd1d..e7eb7592 100644 --- a/translations/ko/lessons/5-NLP/15-LanguageModeling/lab/README.md +++ b/translations/ko/lessons/5-NLP/15-LanguageModeling/lab/README.md @@ -1,14 +1,23 @@ -# Skip-Gram 모델 훈련 + +# Skip-Gram 모델 학습 -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서의 실습 과제입니다. +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서 제공하는 실습 과제입니다. ## 과제 -이번 실습에서는 Skip-Gram 기법을 사용하여 Word2Vec 모델을 훈련하는 도전을 합니다. $N$-토큰 너비의 Skip-Gram 윈도우에서 이웃 단어를 예측하기 위해 임베딩이 있는 네트워크를 훈련하세요. [이번 수업의 코드](../../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb)를 사용하고, 약간 수정해도 좋습니다. +이번 실습에서는 Skip-Gram 기법을 사용하여 Word2Vec 모델을 학습하는 과제를 수행합니다. $N$-토큰 너비의 Skip-Gram 윈도우에서 이웃 단어를 예측하기 위해 임베딩을 포함한 네트워크를 학습하세요. [이 강의의 코드](../../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb)를 사용하고 약간 수정하여 활용할 수 있습니다. ## 데이터셋 -원하는 책을 자유롭게 사용할 수 있습니다. [Project Gutenberg](https://www.gutenberg.org/)에서 많은 무료 텍스트를 찾을 수 있으며, 예를 들어 루이스 캐럴의 [이상한 나라의 앨리스](https://www.gutenberg.org/files/11/11-0.txt)로 가는 직접 링크가 있습니다. 또는 다음 코드를 사용하여 셰익스피어의 희곡을 사용할 수 있습니다: +어떤 책이든 사용할 수 있습니다. [Project Gutenberg](https://www.gutenberg.org/)에서 많은 무료 텍스트를 찾을 수 있습니다. 예를 들어, Lewis Carroll의 [이상한 나라의 앨리스](https://www.gutenberg.org/files/11/11-0.txt))에 직접 접근할 수 있습니다. 또는 셰익스피어의 희곡을 사용할 수도 있습니다. 아래 코드를 사용하여 다운로드할 수 있습니다: ```python path_to_file = tf.keras.utils.get_file( @@ -17,13 +26,13 @@ path_to_file = tf.keras.utils.get_file( text = open(path_to_file, 'rb').read().decode(encoding='utf-8') ``` -## 탐색해보세요! +## 탐구해보세요! -시간이 있고 주제에 대해 더 깊이 파고들고 싶다면 여러 가지를 탐색해 보세요: +시간이 있고 주제에 대해 더 깊이 탐구하고 싶다면, 다음을 시도해보세요: -* 임베딩 크기가 결과에 어떤 영향을 미칩니까? -* 다양한 텍스트 스타일이 결과에 어떤 영향을 미칩니까? -* 매우 다른 유형의 단어와 그 동의어를 여러 개 선택하고, 이들의 벡터 표현을 얻은 다음, PCA를 적용하여 차원을 2로 줄이고 2D 공간에 플롯해 보세요. 어떤 패턴이 보이나요? +* 임베딩 크기가 결과에 어떤 영향을 미치는지 확인하세요. +* 서로 다른 텍스트 스타일이 결과에 어떤 영향을 미치는지 확인하세요. +* 매우 다른 유형의 단어와 그 동의어를 몇 가지 선택하여 벡터 표현을 얻고, PCA를 사용해 차원을 2로 줄인 후 2D 공간에 플롯하세요. 어떤 패턴이 보이나요? **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/16-RNN/README.md b/translations/ko/lessons/5-NLP/16-RNN/README.md index 41bbef31..6a10f6ce 100644 --- a/translations/ko/lessons/5-NLP/16-RNN/README.md +++ b/translations/ko/lessons/5-NLP/16-RNN/README.md @@ -1,86 +1,96 @@ -# 순환 신경망 + +# 순환 신경망 (Recurrent Neural Networks) ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/116) -이전 섹션에서는 텍스트의 풍부한 의미 표현을 사용하고, 임베딩 위에 간단한 선형 분류기를 적용했습니다. 이 아키텍처의 목적은 문장 내 단어들의 집합된 의미를 포착하는 것이지만, 단어의 **순서**를 고려하지 않습니다. 왜냐하면 임베딩 위에서의 집계 작업이 원본 텍스트에서 이 정보를 제거했기 때문입니다. 이러한 모델은 단어의 순서를 모델링할 수 없기 때문에, 텍스트 생성이나 질문 응답과 같은 더 복잡하거나 모호한 작업을 해결할 수 없습니다. +이전 섹션에서는 텍스트의 풍부한 의미 표현과 임베딩 위에 간단한 선형 분류기를 사용했습니다. 이 아키텍처는 문장에서 단어의 집합적인 의미를 포착하지만, 임베딩 위의 집계 작업이 원본 텍스트에서 이 정보를 제거했기 때문에 단어의 **순서**를 고려하지 않습니다. 이러한 모델은 단어 순서를 모델링할 수 없기 때문에 텍스트 생성이나 질문 응답과 같은 더 복잡하거나 모호한 작업을 해결할 수 없습니다. -텍스트 시퀀스의 의미를 포착하기 위해서는 **순환 신경망**(RNN)이라는 다른 신경망 아키텍처를 사용해야 합니다. RNN에서는 문장을 한 번에 하나의 기호로 네트워크를 통과시키고, 네트워크는 어떤 **상태**를 생성하며, 이를 다음 기호와 함께 다시 네트워크에 전달합니다. +텍스트 시퀀스의 의미를 포착하려면 **순환 신경망**(Recurrent Neural Network, RNN)이라는 다른 신경망 아키텍처를 사용해야 합니다. RNN에서는 문장을 네트워크에 한 번에 하나의 기호씩 전달하며, 네트워크는 **상태**를 생성하고 이를 다음 기호와 함께 다시 네트워크에 전달합니다. ![RNN](../../../../../translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.ko.png) -> 저자 제공 이미지 +> 작성자 제공 이미지 -입력 토큰 시퀀스 X0,...,Xn가 주어지면, RNN은 신경망 블록의 시퀀스를 생성하고, 이 시퀀스를 백프로파게이션을 사용하여 끝에서 끝까지 학습합니다. 각 네트워크 블록은 입력으로 (Xi, Si) 쌍을 받고, 결과로 Si+1을 생성합니다. 최종 상태 Sn 또는 (출력 Yn)는 결과를 생성하기 위해 선형 분류기로 전달됩니다. 모든 네트워크 블록은 동일한 가중치를 공유하며, 하나의 백프로파게이션 패스를 사용하여 끝에서 끝까지 학습됩니다. +토큰 입력 시퀀스 X0,...,Xn이 주어지면, RNN은 신경망 블록의 시퀀스를 생성하고 역전파를 사용하여 이 시퀀스를 끝까지 훈련합니다. 각 네트워크 블록은 (Xi,Si) 쌍을 입력으로 받아들이고 결과로 Si+1을 생성합니다. 최종 상태 Sn 또는 (출력 Yn)은 선형 분류기로 전달되어 결과를 생성합니다. 모든 네트워크 블록은 동일한 가중치를 공유하며, 하나의 역전파 패스를 통해 끝까지 훈련됩니다. -상태 벡터 S0,...,Sn가 네트워크를 통과하므로, 단어 간의 순차적 의존성을 학습할 수 있습니다. 예를 들어, 시퀀스의 어딘가에 단어 *not*이 나타나면, 특정 요소를 부정하도록 상태 벡터 내에서 학습할 수 있습니다. +상태 벡터 S0,...,Sn이 네트워크를 통해 전달되기 때문에 단어 간의 순차적 의존성을 학습할 수 있습니다. 예를 들어, 시퀀스 어딘가에 *not*이라는 단어가 나타나면, 상태 벡터 내 특정 요소를 부정하도록 학습하여 부정을 나타낼 수 있습니다. -> ✅ 위 그림에서 모든 RNN 블록의 가중치가 공유되므로, 동일한 그림은 출력 상태를 네트워크의 입력으로 다시 전달하는 순환 피드백 루프가 있는 하나의 블록(오른쪽)으로 표현될 수 있습니다. +> ✅ 위 그림에서 모든 RNN 블록의 가중치가 공유되므로, 동일한 그림을 하나의 블록(오른쪽)으로 표현할 수 있으며, 순환 피드백 루프를 통해 네트워크의 출력 상태를 다시 입력으로 전달합니다. ## RNN 셀의 구조 -간단한 RNN 셀의 구조를 살펴보겠습니다. 이 셀은 이전 상태 Si-1와 현재 기호 Xi를 입력으로 받아들여, 출력 상태 Si를 생성해야 합니다(때때로 생성 네트워크의 경우처럼 다른 출력 Yi에도 관심이 있을 수 있습니다). +간단한 RNN 셀이 어떻게 구성되는지 살펴보겠습니다. 이전 상태 Si-1과 현재 기호 Xi를 입력으로 받아들이며, 출력 상태 Si를 생성해야 합니다(때로는 생성 네트워크의 경우처럼 다른 출력 Yi에도 관심이 있습니다). -간단한 RNN 셀 내부에는 두 개의 가중치 행렬이 있습니다: 하나는 입력 기호를 변환하고(이를 W라고 부르겠습니다), 다른 하나는 입력 상태를 변환합니다(H). 이 경우 네트워크의 출력은 σ(W×Xi+H×Si-1+b)로 계산되며, 여기서 σ는 활성화 함수이고 b는 추가적인 편향입니다. +간단한 RNN 셀에는 내부에 두 개의 가중치 행렬이 있습니다. 하나는 입력 기호를 변환(W라고 부르겠습니다)하고, 다른 하나는 입력 상태를 변환(H)합니다. 이 경우 네트워크의 출력은 σ(W×Xi+H×Si-1+b)로 계산되며, 여기서 σ는 활성화 함수이고 b는 추가적인 바이어스입니다. RNN 셀 구조 -> 저자 제공 이미지 +> 작성자 제공 이미지 -많은 경우, 입력 토큰은 RNN에 들어가기 전에 임베딩 레이어를 통과하여 차원을 줄입니다. 이 경우 입력 벡터의 차원이 *emb_size*이고 상태 벡터의 차원이 *hid_size*인 경우, W의 크기는 *emb_size*×*hid_size*이고 H의 크기는 *hid_size*×*hid_size*입니다. +많은 경우, 입력 토큰은 RNN에 들어가기 전에 임베딩 레이어를 통해 전달되어 차원을 낮춥니다. 이 경우, 입력 벡터의 차원이 *emb_size*이고 상태 벡터가 *hid_size*라면, W의 크기는 *emb_size*×*hid_size*이고 H의 크기는 *hid_size*×*hid_size*입니다. -## 장기 단기 기억(LSTM) +## 장단기 메모리 (LSTM) -고전적인 RNN의 주요 문제 중 하나는 이른바 **소실 기울기** 문제입니다. RNN은 하나의 백프로파게이션 패스에서 끝에서 끝까지 학습되기 때문에, 네트워크의 첫 번째 레이어로 오류를 전파하는 데 어려움이 있으며, 따라서 네트워크는 먼 토큰 간의 관계를 학습할 수 없습니다. 이 문제를 피하는 한 가지 방법은 이른바 **게이트**를 사용하여 **명시적인 상태 관리**를 도입하는 것입니다. 이러한 종류의 두 가지 잘 알려진 아키텍처가 있습니다: **장기 단기 기억**(LSTM)과 **게이티드 릴레이 유닛**(GRU). +고전적인 RNN의 주요 문제 중 하나는 **기울기 소실** 문제입니다. RNN은 하나의 역전파 패스를 통해 끝까지 훈련되기 때문에 네트워크의 첫 번째 레이어로 오류를 전달하기가 어렵고, 따라서 먼 토큰 간의 관계를 학습할 수 없습니다. 이 문제를 피하기 위한 방법 중 하나는 **게이트**를 사용하여 **명시적인 상태 관리**를 도입하는 것입니다. 이러한 종류의 잘 알려진 아키텍처로는 **장단기 메모리**(Long Short Term Memory, LSTM)와 **게이트 순환 유닛**(Gated Relay Unit, GRU)이 있습니다. -![장기 단기 기억 셀의 예시를 보여주는 이미지](../../../../../lessons/5-NLP/16-RNN/images/long-short-term-memory-cell.svg) +![장단기 메모리 셀 예시를 보여주는 이미지](../../../../../lessons/5-NLP/16-RNN/images/long-short-term-memory-cell.svg) > 이미지 출처 TBD -LSTM 네트워크는 RNN과 유사한 방식으로 구성되지만, 레이어 간에 전달되는 두 가지 상태가 있습니다: 실제 상태 C와 숨겨진 벡터 H입니다. 각 유닛에서 숨겨진 벡터 Hi는 입력 Xi와 연결되어 C 상태에 어떤 일이 발생하는지를 제어합니다. 각 게이트는 시그모이드 활성화가 있는 신경망(출력이 [0,1] 범위)에 해당하며, 상태 벡터와 곱해질 때 비트 마스크로 생각할 수 있습니다. 다음은 위 그림에서 왼쪽에서 오른쪽으로의 게이트입니다: +LSTM 네트워크는 RNN과 유사한 방식으로 구성되지만, 레이어 간에 전달되는 두 가지 상태가 있습니다: 실제 상태 C와 숨겨진 벡터 H. 각 유닛에서 숨겨진 벡터 Hi는 입력 Xi와 연결되며, **게이트**를 통해 상태 C에서 어떤 일이 발생할지를 제어합니다. 각 게이트는 시그모이드 활성화(출력 범위 [0,1])를 가진 신경망으로, 상태 벡터와 곱해질 때 비트 마스크로 생각할 수 있습니다. 아래 그림에서 왼쪽에서 오른쪽으로 다음과 같은 게이트가 있습니다: -* **망각 게이트**는 숨겨진 벡터를 받아 C 벡터의 어떤 구성 요소를 잊어야 할지, 어떤 구성 요소를 통과시켜야 할지를 결정합니다. -* **입력 게이트**는 입력과 숨겨진 벡터에서 일부 정보를 받아 상태에 삽입합니다. -* **출력 게이트**는 상태를 *tanh* 활성화가 있는 선형 레이어를 통해 변환한 후, 숨겨진 벡터 Hi를 사용하여 일부 구성 요소를 선택하여 새로운 상태 Ci+1를 생성합니다. +* **Forget 게이트**는 숨겨진 벡터를 사용하여 벡터 C의 어떤 구성 요소를 잊어야 할지, 어떤 것을 통과시켜야 할지를 결정합니다. +* **Input 게이트**는 입력 및 숨겨진 벡터에서 일부 정보를 가져와 상태에 삽입합니다. +* **Output 게이트**는 상태를 *tanh* 활성화가 있는 선형 레이어를 통해 변환한 다음, 숨겨진 벡터 Hi를 사용하여 상태 Ci+1의 새로운 구성 요소를 선택합니다. -상태 C의 구성 요소는 켜고 끌 수 있는 플래그로 생각할 수 있습니다. 예를 들어, 시퀀스에서 이름 *Alice*를 만나면, 이는 여성 캐릭터를 가리킨다고 가정할 수 있으며, 문장 내에 여성 명사가 있다는 플래그를 세울 수 있습니다. 이후 *and Tom*이라는 구문을 만나면, 우리는 복수 명사가 있다는 플래그를 세울 것입니다. 따라서 상태를 조작함으로써 문장 부분의 문법적 특성을 추적할 수 있습니다. +상태 C의 구성 요소는 켜고 끌 수 있는 플래그로 생각할 수 있습니다. 예를 들어, 시퀀스에서 *Alice*라는 이름을 만나면 여성 캐릭터를 나타낸다고 가정하고 상태에서 여성 명사가 있다는 플래그를 올릴 수 있습니다. 이후 *and Tom*이라는 구절을 만나면 복수 명사가 있다는 플래그를 올릴 수 있습니다. 따라서 상태를 조작함으로써 문장 부분의 문법적 속성을 추적할 수 있습니다. -> ✅ LSTM의 내부를 이해하는 데 훌륭한 자료는 Christopher Olah의 이 훌륭한 기사 [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/)입니다. +> ✅ LSTM의 내부를 이해하는 데 훌륭한 자료는 Christopher Olah의 [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/)입니다. ## 양방향 및 다층 RNN -우리는 시퀀스의 시작에서 끝으로 한 방향으로 작동하는 순환 네트워크에 대해 논의했습니다. 이는 우리가 읽고 듣는 방식과 유사하므로 자연스럽게 보입니다. 그러나 많은 실제 경우에서 입력 시퀀스에 무작위 접근이 가능하므로, 양방향으로 순환 계산을 수행하는 것이 의미가 있을 수 있습니다. 이러한 네트워크를 **양방향** RNN이라고 합니다. 양방향 네트워크를 다룰 때는 각 방향에 대해 두 개의 숨겨진 상태 벡터가 필요합니다. +우리는 시퀀스의 시작부터 끝까지 한 방향으로 작동하는 순환 네트워크에 대해 논의했습니다. 이는 우리가 읽거나 말을 듣는 방식과 유사하기 때문에 자연스럽게 보입니다. 그러나 많은 실용적인 경우에 입력 시퀀스에 무작위로 접근할 수 있으므로 순환 계산을 양방향으로 실행하는 것이 합리적일 수 있습니다. 이러한 네트워크를 **양방향** RNN이라고 합니다. 양방향 네트워크를 다룰 때는 각 방향에 대해 하나씩 두 개의 숨겨진 상태 벡터가 필요합니다. -순환 네트워크는 단방향이든 양방향이든 시퀀스 내의 특정 패턴을 포착하고 이를 상태 벡터에 저장하거나 출력을 통해 전달할 수 있습니다. 합성곱 네트워크와 마찬가지로, 우리는 첫 번째 레이어에서 추출한 저수준 패턴을 기반으로 더 높은 수준의 패턴을 포착하기 위해 첫 번째 레이어 위에 또 다른 순환 레이어를 구축할 수 있습니다. 이는 두 개 이상의 순환 네트워크로 구성된 **다층 RNN**의 개념으로 이어지며, 이전 레이어의 출력이 다음 레이어의 입력으로 전달됩니다. +순환 네트워크는 한 방향이든 양방향이든 시퀀스 내 특정 패턴을 캡처하고 이를 상태 벡터에 저장하거나 출력으로 전달할 수 있습니다. 합성곱 네트워크와 마찬가지로 첫 번째 레이어에서 추출한 저수준 패턴을 기반으로 더 높은 수준의 패턴을 캡처하기 위해 첫 번째 레이어 위에 또 다른 순환 레이어를 구축할 수 있습니다. 이는 **다층 RNN**의 개념으로 이어지며, 두 개 이상의 순환 네트워크로 구성되며 이전 레이어의 출력이 다음 레이어의 입력으로 전달됩니다. -![다층 장기 단기 기억 RNN을 보여주는 이미지](../../../../../translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.ko.jpg) +![다층 장단기 메모리 RNN을 보여주는 이미지](../../../../../translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.ko.jpg) -*그림 출처: [이 훌륭한 게시물](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) by Fernando López* +*Fernando López의 [이 훌륭한 글](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3)에서 가져온 이미지* ## ✍️ 연습: 임베딩 다음 노트북에서 학습을 계속하세요: -* [PyTorch로 RNN](../../../../../lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) -* [TensorFlow로 RNN](../../../../../lessons/5-NLP/16-RNN/RNNTF.ipynb) +* [PyTorch를 사용한 RNN](../../../../../lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) +* [TensorFlow를 사용한 RNN](../../../../../lessons/5-NLP/16-RNN/RNNTF.ipynb) ## 결론 -이번 단원에서는 RNN이 시퀀스 분류에 사용될 수 있지만, 사실 텍스트 생성, 기계 번역 등 더 많은 작업을 처리할 수 있음을 알게 되었습니다. 다음 단원에서는 이러한 작업을 다룰 것입니다. +이 단원에서는 RNN이 시퀀스 분류에 사용될 수 있음을 보았지만, 실제로는 텍스트 생성, 기계 번역 등 더 많은 작업을 처리할 수 있습니다. 다음 단원에서 이러한 작업을 고려할 것입니다. ## 🚀 도전 과제 -LSTM에 대한 문헌을 읽고 그 응용 프로그램을 고려해 보세요: +LSTM에 대한 문헌을 읽고 그 응용 사례를 고려해보세요: -- [그리드 장기 단기 기억](https://arxiv.org/pdf/1507.01526v1.pdf) -- [Show, Attend and Tell: Neural Image Caption Generation with Visual Attention](https://arxiv.org/pdf/1502.03044v2.pdf) +- [Grid Long Short-Term Memory](https://arxiv.org/pdf/1507.01526v1.pdf) +- [Show, Attend and Tell: Neural Image Caption +Generation with Visual Attention](https://arxiv.org/pdf/1502.03044v2.pdf) ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/216) ## 복습 및 자기 학습 -- [LSTM 네트워크 이해하기](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) by Christopher Olah. +- Christopher Olah의 [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) ## [과제: 노트북](assignment.md) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 원어로 된 권위 있는 자료로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 저희는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/16-RNN/assignment.md b/translations/ko/lessons/5-NLP/16-RNN/assignment.md index 6be6b1f2..9c6a2f92 100644 --- a/translations/ko/lessons/5-NLP/16-RNN/assignment.md +++ b/translations/ko/lessons/5-NLP/16-RNN/assignment.md @@ -1,6 +1,15 @@ + # 과제: 노트북 -이 수업과 관련된 노트북(파이토치 또는 텐서플로우 버전 중 하나)을 사용하여, 자신의 데이터셋으로 다시 실행해 보세요. Kaggle에서 가져온 데이터셋을 사용하되 출처를 명시해야 합니다. 노트북을 재작성하여 자신의 발견 사항을 강조하세요. 다른 종류의 데이터셋을 시도하고, [이 Kaggle 대회 데이터셋인 날씨 트윗](https://www.kaggle.com/competitions/crowdflower-weather-twitter/data?select=train.csv)과 같은 텍스트를 사용하여 발견 사항을 문서화하세요. +이 강의와 관련된 노트북(예: PyTorch 또는 TensorFlow 버전)을 사용하여, 여러분만의 데이터셋으로 다시 실행해 보세요. Kaggle에서 가져온 데이터셋을 사용하고 출처를 명시하세요. 노트북을 다시 작성하여 여러분의 발견을 강조하세요. 다른 종류의 데이터셋을 시도하고, [이 Kaggle 대회 데이터셋: 날씨 관련 트윗](https://www.kaggle.com/competitions/crowdflower-weather-twitter/data?select=train.csv)과 같은 텍스트를 사용하여 결과를 문서화하세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 저희가 책임지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/17-GenerativeNetworks/README.md b/translations/ko/lessons/5-NLP/17-GenerativeNetworks/README.md index 3f65c56d..989a5717 100644 --- a/translations/ko/lessons/5-NLP/17-GenerativeNetworks/README.md +++ b/translations/ko/lessons/5-NLP/17-GenerativeNetworks/README.md @@ -1,79 +1,88 @@ -# 생성적 네트워크 + +# 생성 네트워크 ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/117) -순환 신경망(RNN)과 Long Short Term Memory Cells(LSTM), Gated Recurrent Units(GRU)와 같은 게이트가 있는 셀 변형은 언어 모델링을 위한 메커니즘을 제공하여 단어 순서를 학습하고 시퀀스에서 다음 단어에 대한 예측을 제공할 수 있습니다. 이를 통해 RNN을 일반적인 텍스트 생성, 기계 번역, 심지어 이미지 캡셔닝과 같은 **생성 작업**에 사용할 수 있습니다. +순환 신경망(RNN)과 Long Short Term Memory Cells(LSTM), Gated Recurrent Units(GRU)와 같은 게이트 셀 변형은 단어 순서를 학습하고 시퀀스에서 다음 단어를 예측할 수 있는 언어 모델링 메커니즘을 제공합니다. 이를 통해 RNN을 **생성 작업**에 사용할 수 있으며, 일반적인 텍스트 생성, 기계 번역, 이미지 캡션 생성 등 다양한 작업에 활용할 수 있습니다. -> ✅ 텍스트 입력 시 텍스트 완성과 같은 생성 작업의 혜택을 받은 모든 경우를 생각해 보세요. 좋아하는 애플리케이션이 RNN을 활용했는지 조사해 보세요. +> ✅ 텍스트 입력 중 자동 완성과 같은 생성 작업의 혜택을 받은 경험을 떠올려 보세요. 좋아하는 애플리케이션이 RNN을 활용했는지 조사해 보세요. -이전 단원에서 논의한 RNN 아키텍처에서는 각 RNN 유닛이 다음 숨겨진 상태를 출력으로 생성했습니다. 그러나 각 순환 유닛에 또 다른 출력을 추가할 수 있으며, 이를 통해 **시퀀스**(원래 시퀀스와 길이가 동일)를 출력할 수 있습니다. 또한 각 단계에서 입력을 받지 않는 RNN 유닛을 사용하고, 초기 상태 벡터만 받아서 출력 시퀀스를 생성할 수 있습니다. +이전 단원에서 논의한 RNN 아키텍처에서는 각 RNN 유닛이 다음 숨겨진 상태를 출력으로 생성했습니다. 그러나 각 순환 유닛에 또 다른 출력을 추가하여 **시퀀스**(원래 시퀀스와 길이가 동일)를 출력할 수도 있습니다. 또한, 각 단계에서 입력을 받지 않고 초기 상태 벡터만 받아 시퀀스 출력을 생성하는 RNN 유닛을 사용할 수도 있습니다. -이로 인해 아래 그림에 나타난 다양한 신경망 아키텍처가 가능합니다: +이를 통해 아래 그림에 표시된 다양한 신경망 아키텍처를 구현할 수 있습니다: ![일반적인 순환 신경망 패턴을 보여주는 이미지.](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.ko.jpg) -> 이미지 출처: [Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) 블로그 게시물, [Andrej Karpaty](http://karpathy.github.io/) 저자 +> 이미지 출처: [Andrej Karpaty](http://karpathy.github.io/)의 블로그 게시물 [Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) -* **일대일**은 하나의 입력과 하나의 출력을 가지는 전통적인 신경망입니다. -* **일대다**는 하나의 입력 값을 받아 출력 값의 시퀀스를 생성하는 생성적 아키텍처입니다. 예를 들어, **이미지 캡셔닝** 네트워크를 훈련하여 사진의 텍스트 설명을 생성하려면 사진을 입력으로 사용하고 CNN을 통해 숨겨진 상태를 얻은 후, 순환 체인이 단어별로 캡션을 생성하도록 할 수 있습니다. -* **다대일**은 이전 단원에서 설명한 RNN 아키텍처에 해당하며, 예를 들어 텍스트 분류가 있습니다. -* **다대다**, 또는 **시퀀스-투-시퀀스**는 **기계 번역**과 같은 작업에 해당하며, 여기서 첫 번째 RNN이 입력 시퀀스의 모든 정보를 숨겨진 상태로 수집하고, 다른 RNN 체인이 이 상태를 출력 시퀀스로 펼칩니다. +* **일대일**은 하나의 입력과 하나의 출력을 가진 전통적인 신경망입니다. +* **일대다**는 하나의 입력 값을 받아 출력 값 시퀀스를 생성하는 생성 아키텍처입니다. 예를 들어, **이미지 캡션 생성** 네트워크를 훈련시키고자 한다면, 이미지를 입력으로 받아 CNN을 통해 숨겨진 상태를 얻은 후 순환 체인을 통해 단어별로 캡션을 생성할 수 있습니다. +* **다대일**은 이전 단원에서 설명한 텍스트 분류와 같은 RNN 아키텍처에 해당합니다. +* **다대다**, 또는 **시퀀스-투-시퀀스**는 **기계 번역**과 같은 작업에 해당하며, 첫 번째 RNN이 입력 시퀀스의 모든 정보를 숨겨진 상태에 수집한 후, 다른 RNN 체인이 이 상태를 출력 시퀀스로 풀어냅니다. -이번 단원에서는 텍스트 생성을 도와주는 간단한 생성 모델에 집중할 것입니다. 간단함을 위해 문자 수준의 토큰화를 사용할 것입니다. +이번 단원에서는 텍스트 생성을 돕는 간단한 생성 모델에 집중할 것입니다. 간단히 하기 위해 문자 수준 토큰화를 사용할 것입니다. -이 RNN을 단계별로 텍스트를 생성하도록 훈련시킬 것입니다. 각 단계에서 길이가 `nchars`인 문자 시퀀스를 가져와서 각 입력 문자에 대해 다음 출력 문자를 생성하도록 네트워크에 요청합니다: +이 RNN을 훈련시켜 단계별로 텍스트를 생성할 것입니다. 각 단계에서 `nchars` 길이의 문자 시퀀스를 받아 네트워크가 각 입력 문자에 대해 다음 출력 문자를 생성하도록 요청합니다: -![단어 'HELLO'의 RNN 생성 예시를 보여주는 이미지.](../../../../../translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.ko.png) +![단어 'HELLO'를 생성하는 RNN 예제를 보여주는 이미지.](../../../../../translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.ko.png) -텍스트를 생성할 때(추론 중) 우리는 어떤 **프롬프트**로 시작하여 RNN 셀을 통해 이를 전달하여 중간 상태를 생성한 후, 이 상태에서 생성을 시작합니다. 우리는 한 번에 하나의 문자를 생성하고, 상태와 생성된 문자를 다른 RNN 셀에 전달하여 다음 문자를 생성합니다. 이 과정을 충분한 문자를 생성할 때까지 반복합니다. +텍스트를 생성할 때(추론 중), **프롬프트**를 시작점으로 사용하여 RNN 셀을 통해 중간 상태를 생성한 후, 이 상태에서 생성을 시작합니다. 한 번에 한 문자씩 생성하며, 상태와 생성된 문자를 다음 RNN 셀에 전달하여 다음 문자를 생성합니다. 이 과정을 필요한 문자 수만큼 반복합니다. -> 저자 제공 이미지 +> 이미지 제공: 작성자 -## ✍️ 연습문제: 생성적 네트워크 +## ✍️ 연습: 생성 네트워크 -다음 노트북에서 학습을 계속하세요: +다음 노트북에서 학습을 이어가세요: -* [PyTorch로 생성적 네트워크](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) -* [TensorFlow로 생성적 네트워크](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) +* [PyTorch를 활용한 생성 네트워크](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) +* [TensorFlow를 활용한 생성 네트워크](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) ## 부드러운 텍스트 생성과 온도 -각 RNN 셀의 출력은 문자에 대한 확률 분포입니다. 생성된 텍스트에서 항상 가장 높은 확률을 가진 문자를 다음 문자로 선택하면, 텍스트가 같은 문자 시퀀스 간에 "순환"될 수 있습니다. 예를 들어 다음과 같습니다: +각 RNN 셀의 출력은 문자에 대한 확률 분포입니다. 생성된 텍스트에서 항상 확률이 가장 높은 문자를 다음 문자로 선택하면, 텍스트가 반복적으로 동일한 문자 시퀀스를 생성하는 경우가 자주 발생할 수 있습니다. 예를 들어: ``` today of the second the company and a second the company ... ``` -그러나 다음 문자의 확률 분포를 살펴보면, 몇 개의 가장 높은 확률 간의 차이가 크지 않을 수 있습니다. 예를 들어, 한 문자의 확률이 0.2이고, 다른 문자의 확률이 0.19일 수 있습니다. 예를 들어, 시퀀스 '*play*'에서 다음 문자는 공백이거나 **e** (단어 *player*에서처럼)일 수 있습니다. +하지만 다음 문자에 대한 확률 분포를 보면, 가장 높은 확률과 두 번째로 높은 확률 간의 차이가 크지 않을 수 있습니다. 예를 들어, 한 문자가 확률 0.2를 가지는 반면, 다른 문자는 0.19를 가질 수 있습니다. 예를 들어, '*play*'라는 시퀀스에서 다음 문자는 공백이나 **e**(단어 *player*에서처럼)가 될 가능성이 거의 동일합니다. -이로 인해 우리는 항상 높은 확률을 가진 문자를 선택하는 것이 "공정"하지 않을 수 있다는 결론에 도달합니다. 두 번째로 높은 확률의 문자를 선택하는 것도 여전히 의미 있는 텍스트로 이어질 수 있습니다. 따라서 네트워크 출력에 의해 제공된 확률 분포에서 문자를 **샘플링**하는 것이 더 현명합니다. 또한 **온도**라는 매개변수를 사용하여 확률 분포를 평탄하게 하거나, 높은 확률의 문자에 더 집중하고 싶을 때 더 가파르게 만들 수 있습니다. +따라서 항상 가장 높은 확률의 문자를 선택하는 것이 "공정"하지 않을 수 있습니다. 두 번째로 높은 확률의 문자를 선택해도 의미 있는 텍스트를 생성할 수 있습니다. 더 나아가, 네트워크 출력에서 제공된 확률 분포에서 문자를 **샘플링**하는 것이 더 현명합니다. 또한 **온도**라는 매개변수를 사용하여 확률 분포를 평탄화하거나, 더 가파르게 만들어 가장 높은 확률의 문자에 더 집중할 수 있습니다. -위에 링크된 노트북에서 이 부드러운 텍스트 생성이 어떻게 구현되는지 살펴보세요. +위에 링크된 노트북에서 부드러운 텍스트 생성이 어떻게 구현되는지 탐구해 보세요. ## 결론 -텍스트 생성이 그 자체로 유용할 수 있지만, 주요 이점은 RNN을 사용하여 초기 특성 벡터에서 텍스트를 생성할 수 있는 능력에서 비롯됩니다. 예를 들어, 텍스트 생성은 기계 번역의 일부로 사용됩니다(이 경우 *인코더*에서의 상태 벡터가 번역된 메시지를 생성하거나 *디코드*하는 데 사용됨), 또는 이미지의 텍스트 설명을 생성하는 데 사용됩니다(이 경우 특성 벡터는 CNN 추출기에서 옵니다). +텍스트 생성은 그 자체로 유용할 수 있지만, RNN을 사용하여 초기 특징 벡터에서 텍스트를 생성할 수 있는 능력이 주요 이점입니다. 예를 들어, 텍스트 생성은 기계 번역(시퀀스-투-시퀀스, 이 경우 *인코더*의 상태 벡터를 사용하여 번역 메시지를 생성 또는 *디코딩*함)이나 이미지의 텍스트 설명 생성(CNN 추출기로부터 특징 벡터를 얻는 경우)에 사용됩니다. ## 🚀 도전 과제 -이 주제에 대해 Microsoft Learn에서 몇 가지 수업을 들어보세요. +Microsoft Learn에서 이 주제에 대한 강의를 들어보세요: -* [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/6-generative-networks/?WT.mc_id=academic-77998-cacaste)/[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/5-generative-networks/?WT.mc_id=academic-77998-cacaste)로 텍스트 생성 +* [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/6-generative-networks/?WT.mc_id=academic-77998-cacaste)/[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/5-generative-networks/?WT.mc_id=academic-77998-cacaste)를 활용한 텍스트 생성 ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/217) ## 복습 및 자기 학습 -지식을 확장할 수 있는 몇 가지 기사를 소개합니다. +지식을 확장할 수 있는 몇 가지 기사: -* Markov Chain, LSTM 및 GPT-2를 사용한 텍스트 생성의 다양한 접근 방식: [블로그 게시물](https://towardsdatascience.com/text-generation-gpt-2-lstm-markov-chain-9ea371820e1e) -* [Keras 문서](https://keras.io/examples/generative/lstm_character_level_text_generation/)에서의 텍스트 생성 샘플 +* Markov Chain, LSTM, GPT-2를 활용한 텍스트 생성의 다양한 접근법: [블로그 게시물](https://towardsdatascience.com/text-generation-gpt-2-lstm-markov-chain-9ea371820e1e) +* [Keras 문서](https://keras.io/examples/generative/lstm_character_level_text_generation/)에서 텍스트 생성 샘플 ## [과제](lab/README.md) -문자를 하나씩 생성하는 방법을 살펴보았습니다. 이번 실습에서는 단어 수준의 텍스트 생성을 탐구할 것입니다. +문자별 텍스트 생성 방법을 살펴보았습니다. 실습에서는 단어 수준 텍스트 생성을 탐구할 것입니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우, 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/17-GenerativeNetworks/lab/README.md b/translations/ko/lessons/5-NLP/17-GenerativeNetworks/lab/README.md index d47f1bd7..4e2493b6 100644 --- a/translations/ko/lessons/5-NLP/17-GenerativeNetworks/lab/README.md +++ b/translations/ko/lessons/5-NLP/17-GenerativeNetworks/lab/README.md @@ -1,14 +1,23 @@ + # RNN을 사용한 단어 수준 텍스트 생성 -[초보자를 위한 AI 커리큘럼](https://github.com/microsoft/ai-for-beginners)에서의 실습 과제입니다. +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서 제공하는 실습 과제입니다. ## 과제 -이 실습에서는 원하는 책을 선택하여 단어 수준 텍스트 생성기를 훈련시키기 위한 데이터셋으로 사용해야 합니다. +이 실습에서는 임의의 책을 선택하여 데이터셋으로 사용하고, 이를 학습하여 단어 수준 텍스트 생성기를 만들어야 합니다. ## 데이터셋 -원하는 책을 자유롭게 사용하실 수 있습니다. [프로젝트 구텐베르크](https://www.gutenberg.org/)에서 많은 무료 텍스트를 찾을 수 있으며, 예를 들어 루이스 캐럴의 [이상한 나라의 앨리스](https://www.gutenberg.org/files/11/11-0.txt)로 바로 가는 링크가 있습니다. +어떤 책이든 사용할 수 있습니다. [Project Gutenberg](https://www.gutenberg.org/)에서 많은 무료 텍스트를 찾을 수 있습니다. 예를 들어, Lewis Carroll의 [이상한 나라의 앨리스](https://www.gutenberg.org/files/11/11-0.txt))에 직접 접근할 수 있는 링크도 있습니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 것이 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/18-Transformers/README.md b/translations/ko/lessons/5-NLP/18-Transformers/README.md index 139597f9..44ca6bab 100644 --- a/translations/ko/lessons/5-NLP/18-Transformers/README.md +++ b/translations/ko/lessons/5-NLP/18-Transformers/README.md @@ -1,2 +1,121 @@ + +# 어텐션 메커니즘과 트랜스포머 +## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/118) +NLP 분야에서 가장 중요한 문제 중 하나는 **기계 번역**으로, Google Translate와 같은 도구의 핵심 과제입니다. 이 섹션에서는 기계 번역, 더 일반적으로는 **문장 변환**이라고도 불리는 *시퀀스-투-시퀀스* 작업에 대해 집중적으로 다룰 것입니다. + +RNN을 사용하면 시퀀스-투-시퀀스 작업은 두 개의 순환 네트워크로 구현됩니다. 하나는 **인코더**로 입력 시퀀스를 숨겨진 상태로 압축하고, 다른 하나는 **디코더**로 이 숨겨진 상태를 번역된 결과로 펼칩니다. 그러나 이 접근 방식에는 몇 가지 문제가 있습니다: + +* 인코더 네트워크의 최종 상태가 문장의 시작 부분을 기억하기 어려워서 긴 문장에 대해 모델의 품질이 저하됩니다. +* 시퀀스의 모든 단어가 결과에 동일한 영향을 미칩니다. 실제로는 입력 시퀀스의 특정 단어가 다른 단어보다 순차적 출력에 더 큰 영향을 미치는 경우가 많습니다. + +**어텐션 메커니즘**은 각 입력 벡터가 RNN의 출력 예측에 미치는 맥락적 영향을 가중치를 부여하는 방법을 제공합니다. 이는 입력 RNN의 중간 상태와 출력 RNN 사이에 지름길을 만드는 방식으로 구현됩니다. 이렇게 하면 출력 심볼 yt를 생성할 때 모든 입력 숨겨진 상태 hi를 서로 다른 가중치 계수 αt,i로 고려할 수 있습니다. + +![어텐션 레이어가 추가된 인코더/디코더 모델을 보여주는 이미지](../../../../../translated_images/encoder-decoder-attention.7a726296894fb567aa2898c94b17b3289087f6705c11907df8301df9e5eeb3de.ko.png) + +> [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf)의 어텐션 메커니즘이 포함된 인코더-디코더 모델, [이 블로그 글](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html)에서 인용 + +어텐션 매트릭스 {αi,j}는 특정 입력 단어가 출력 시퀀스의 주어진 단어 생성에 얼마나 기여하는지를 나타냅니다. 아래는 이러한 매트릭스의 예입니다: + +![Bahdanau - arviz.org에서 가져온 RNNsearch-50의 샘플 정렬을 보여주는 이미지](../../../../../translated_images/bahdanau-fig3.09ba2d37f202a6af11de6c82d2d197830ba5f4528d9ea430eb65fd3a75065973.ko.png) + +> [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf)에서 가져온 그림 (Fig.3) + +어텐션 메커니즘은 현재 또는 거의 현재 NLP의 최첨단 상태를 책임지고 있습니다. 그러나 어텐션을 추가하면 모델 매개변수의 수가 크게 증가하여 RNN의 확장 문제를 초래했습니다. RNN의 확장에 대한 주요 제약은 모델의 순환적 특성으로 인해 학습을 배치 및 병렬화하기 어렵다는 점입니다. RNN에서는 시퀀스의 각 요소가 순차적으로 처리되어야 하므로 쉽게 병렬화할 수 없습니다. + +![어텐션이 포함된 인코더 디코더](../../../../../lessons/5-NLP/18-Transformers/images/EncDecAttention.gif) + +> [Google의 블로그](https://research.googleblog.com/2016/09/a-neural-network-for-machine.html)에서 가져온 그림 + +어텐션 메커니즘의 채택과 이러한 제약은 오늘날 우리가 알고 사용하는 BERT나 Open-GPT3와 같은 최첨단 트랜스포머 모델의 탄생으로 이어졌습니다. + +## 트랜스포머 모델 + +트랜스포머의 주요 아이디어 중 하나는 RNN의 순차적 특성을 피하고 학습 중 병렬화가 가능한 모델을 만드는 것입니다. 이는 두 가지 아이디어를 구현함으로써 이루어집니다: + +* 위치 인코딩 +* RNN(또는 CNN) 대신 패턴을 캡처하기 위해 **셀프 어텐션 메커니즘** 사용 (이 때문에 트랜스포머를 소개하는 논문 제목이 *[Attention is all you need](https://arxiv.org/abs/1706.03762)*입니다) + +### 위치 인코딩/임베딩 + +위치 인코딩의 아이디어는 다음과 같습니다. +1. RNN을 사용할 때, 토큰의 상대적 위치는 단계 수로 표현되므로 명시적으로 표현할 필요가 없습니다. +2. 그러나 어텐션으로 전환하면 시퀀스 내 토큰의 상대적 위치를 알아야 합니다. +3. 위치 인코딩을 얻기 위해, 토큰 시퀀스에 시퀀스 내 토큰 위치 시퀀스(즉, 숫자 0, 1, ...)를 추가합니다. +4. 그런 다음 토큰 위치를 토큰 임베딩 벡터와 혼합합니다. 위치(정수)를 벡터로 변환하기 위해 다양한 접근 방식을 사용할 수 있습니다: + +* 토큰 임베딩과 유사한 학습 가능한 임베딩. 여기서는 이 접근 방식을 고려합니다. 토큰과 그 위치 모두에 임베딩 레이어를 적용하여 동일한 차원의 임베딩 벡터를 생성한 후 이를 합칩니다. +* 원래 논문에서 제안된 고정 위치 인코딩 함수. + + + +> 작성자 제공 이미지 + +위치 임베딩을 통해 얻은 결과는 원래 토큰과 시퀀스 내 위치를 모두 포함합니다. + +### 멀티-헤드 셀프 어텐션 + +다음으로, 시퀀스 내 패턴을 캡처해야 합니다. 이를 위해 트랜스포머는 **셀프 어텐션** 메커니즘을 사용합니다. 이는 입력과 출력으로 동일한 시퀀스에 적용된 어텐션입니다. 셀프 어텐션을 적용하면 문장 내 **맥락**을 고려하고 어떤 단어들이 서로 관련되어 있는지 확인할 수 있습니다. 예를 들어, *it*과 같은 대명사가 참조하는 단어를 확인하고 맥락을 고려할 수 있습니다: + +![](../../../../../translated_images/CoreferenceResolution.861924d6d384a7d68d8d0039d06a71a151f18a796b8b1330239d3590bd4947eb.ko.png) + +> [Google 블로그](https://research.googleblog.com/2017/08/transformer-novel-neural-network.html)에서 가져온 이미지 + +트랜스포머에서는 **멀티-헤드 어텐션**을 사용하여 네트워크가 여러 유형의 종속성을 캡처할 수 있도록 합니다. 예를 들어, 장기적 vs. 단기적 단어 관계, 대명사 참조 vs. 기타 등등. + +[TensorFlow Notebook](../../../../../lessons/5-NLP/18-Transformers/TransformersTF.ipynb)에서 트랜스포머 레이어 구현에 대한 자세한 내용을 확인할 수 있습니다. + +### 인코더-디코더 어텐션 + +트랜스포머에서는 어텐션이 두 곳에서 사용됩니다: + +* 셀프 어텐션을 사용하여 입력 텍스트 내 패턴을 캡처 +* 시퀀스 번역 수행 - 인코더와 디코더 사이의 어텐션 레이어 + +인코더-디코더 어텐션은 이 섹션 초반에 설명한 RNN에서 사용된 어텐션 메커니즘과 매우 유사합니다. 이 애니메이션 다이어그램은 인코더-디코더 어텐션의 역할을 설명합니다. + +![트랜스포머 모델에서 평가가 수행되는 방식을 보여주는 애니메이션 GIF](../../../../../lessons/5-NLP/18-Transformers/images/transformer-animated-explanation.gif) + +각 입력 위치가 각 출력 위치에 독립적으로 매핑되므로 트랜스포머는 RNN보다 병렬화가 더 잘 이루어져 훨씬 더 크고 표현력이 뛰어난 언어 모델을 가능하게 합니다. 각 어텐션 헤드는 단어 간 관계를 학습하여 NLP 작업의 성능을 향상시킬 수 있습니다. + +## BERT + +**BERT**(Bidirectional Encoder Representations from Transformers)는 매우 큰 다층 트랜스포머 네트워크로, *BERT-base*는 12개 레이어, *BERT-large*는 24개 레이어로 구성됩니다. 이 모델은 대규모 텍스트 데이터(WikiPedia + 책)를 사용하여 비지도 학습(문장에서 마스킹된 단어 예측)을 통해 먼저 사전 학습됩니다. 사전 학습 동안 모델은 상당한 수준의 언어 이해를 흡수하며, 이를 다른 데이터셋에 활용하여 미세 조정할 수 있습니다. 이 과정을 **전이 학습**이라고 합니다. + +![http://jalammar.github.io/illustrated-bert/에서 가져온 이미지](../../../../../translated_images/jalammarBERT-language-modeling-masked-lm.34f113ea5fec4362e39ee4381aab7cad06b5465a0b5f053a0f2aa05fbe14e746.ko.png) + +> 이미지 [출처](http://jalammar.github.io/illustrated-bert/) + +## ✍️ 연습: 트랜스포머 + +다음 노트북에서 학습을 이어가세요: + +* [PyTorch에서 트랜스포머](../../../../../lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) +* [TensorFlow에서 트랜스포머](../../../../../lessons/5-NLP/18-Transformers/TransformersTF.ipynb) + +## 결론 + +이번 강의에서는 NLP 도구 상자에서 필수적인 트랜스포머와 어텐션 메커니즘에 대해 배웠습니다. BERT, DistilBERT, BigBird, OpenGPT3 등 다양한 트랜스포머 아키텍처 변형이 있으며, 이를 미세 조정할 수 있습니다. [HuggingFace 패키지](https://github.com/huggingface/)는 PyTorch와 TensorFlow를 사용하여 이러한 아키텍처를 학습할 수 있는 저장소를 제공합니다. + +## 🚀 도전 과제 + +## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/218) + +## 복습 및 자기 학습 + +* 트랜스포머에 대한 고전 논문 *[Attention is all you need](https://arxiv.org/abs/1706.03762)*을 설명하는 [블로그 글](https://mchromiak.github.io/articles/2017/Sep/12/Transformer-Attention-is-all-you-need/) +* 트랜스포머 아키텍처를 자세히 설명하는 [블로그 글 시리즈](https://towardsdatascience.com/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452) + +## [과제](assignment.md) + +**면책 조항**: +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/18-Transformers/assignment.md b/translations/ko/lessons/5-NLP/18-Transformers/assignment.md index 371d0703..059f79a0 100644 --- a/translations/ko/lessons/5-NLP/18-Transformers/assignment.md +++ b/translations/ko/lessons/5-NLP/18-Transformers/assignment.md @@ -1,6 +1,15 @@ -# 과제: 변환기 + +# 과제: 트랜스포머 -HuggingFace에서 변환기를 실험해 보세요! 그들이 제공하는 스크립트를 사용하여 사이트에 있는 다양한 모델로 작업해 보세요: https://huggingface.co/docs/transformers/run_scripts. 그들의 데이터셋 중 하나를 사용해 보거나, 이 커리큘럼이나 Kaggle에서 자신의 데이터를 가져와서 흥미로운 텍스트를 생성할 수 있는지 확인해 보세요. 결과를 정리한 노트북을 작성하세요. +HuggingFace에서 트랜스포머를 실험해보세요! 그들이 제공하는 스크립트를 사용하여 사이트에 있는 다양한 모델을 활용해보세요: https://huggingface.co/docs/transformers/run_scripts. 제공된 데이터셋 중 하나를 사용해보고, 이 커리큘럼이나 Kaggle에서 가져온 데이터셋을 임포트하여 흥미로운 텍스트를 생성할 수 있는지 확인해보세요. 결과를 담은 노트북을 작성하세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원래 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/19-NER/README.md b/translations/ko/lessons/5-NLP/19-NER/README.md index aa9eb69d..762cb637 100644 --- a/translations/ko/lessons/5-NLP/19-NER/README.md +++ b/translations/ko/lessons/5-NLP/19-NER/README.md @@ -1,81 +1,93 @@ -# 명명된 개체 인식 + +# 개체명 인식 -지금까지 우리는 주로 하나의 NLP 작업인 분류에 집중해 왔습니다. 그러나 신경망으로 수행할 수 있는 다른 NLP 작업도 있습니다. 그 중 하나가 **[명명된 개체 인식](https://wikipedia.org/wiki/Named-entity_recognition)** (NER)으로, 텍스트 내에서 장소, 인명, 날짜-시간 간격, 화학식 등과 같은 특정 개체를 인식하는 작업입니다. +지금까지 우리는 주로 하나의 NLP 작업인 분류에 집중해 왔습니다. 하지만 신경망을 사용하여 수행할 수 있는 다른 NLP 작업도 있습니다. 그 중 하나가 **[개체명 인식](https://wikipedia.org/wiki/Named-entity_recognition)** (NER)으로, 텍스트 내에서 장소, 사람 이름, 날짜-시간 간격, 화학식 등 특정 개체를 인식하는 작업을 다룹니다. ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/119) ## NER 사용 예시 -예를 들어, Amazon Alexa나 Google Assistant와 유사한 자연어 챗봇을 개발하고 싶다고 가정해 보겠습니다. 지능형 챗봇이 작동하는 방식은 입력 문장에 대해 텍스트 분류를 수행하여 사용자가 원하는 것을 *이해*하는 것입니다. 이 분류의 결과는 **의도**라고 불리며, 챗봇이 무엇을 해야 할지를 결정합니다. +Amazon Alexa나 Google Assistant와 같은 자연어 챗봇을 개발하고 싶다고 가정해 봅시다. 지능형 챗봇이 작동하는 방식은 입력 문장에 대해 텍스트 분류를 수행하여 사용자가 원하는 것을 *이해*하는 것입니다. 이 분류 결과는 **의도(intent)**라고 하며, 챗봇이 수행해야 할 작업을 결정합니다. Bot NER -> 이미지 제공: 저자 +> 저자 제공 이미지 -하지만 사용자가 문구의 일부로 몇 가지 매개변수를 제공할 수 있습니다. 예를 들어, 날씨를 요청할 때 특정 위치나 날짜를 지정할 수 있습니다. 챗봇은 이러한 개체를 이해하고, 작업을 수행하기 전에 매개변수 슬롯을 적절히 채워야 합니다. 바로 여기에서 NER이 필요합니다. +하지만 사용자는 문구의 일부로 몇 가지 매개변수를 제공할 수 있습니다. 예를 들어, 날씨를 물어볼 때 위치나 날짜를 지정할 수 있습니다. 챗봇은 이러한 개체를 이해하고, 작업을 수행하기 전에 매개변수 슬롯을 적절히 채워야 합니다. 바로 이때 NER이 필요합니다. -> ✅ 또 다른 예시는 [과학 의학 논문 분석](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)입니다. 우리가 찾아야 할 주요 사항 중 하나는 질병 및 의학 물질과 같은 특정 의학 용어입니다. 소수의 질병은 아마도 부분 문자열 검색을 사용하여 추출할 수 있지만, 화학 화합물 및 약물 이름과 같은 더 복잡한 개체는 더 복잡한 접근 방식이 필요합니다. +> ✅ 또 다른 예로는 [과학적 의료 논문 분석](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)이 있습니다. 우리가 찾아야 할 주요 항목 중 하나는 질병과 의료 물질과 같은 특정 의료 용어입니다. 소수의 질병은 아마도 부분 문자열 검색을 통해 추출할 수 있겠지만, 화학 화합물이나 약물 이름과 같은 더 복잡한 개체는 더 복잡한 접근 방식이 필요합니다. ## 토큰 분류로서의 NER -NER 모델은 본질적으로 **토큰 분류 모델**입니다. 입력 토큰 각각에 대해 그것이 개체에 속하는지 여부를 결정해야 하며, 만약 그렇다면 어떤 개체 클래스에 속하는지를 결정해야 합니다. +NER 모델은 본질적으로 **토큰 분류 모델**입니다. 입력된 각 토큰이 개체에 속하는지 여부를 결정해야 하며, 속한다면 어떤 개체 클래스인지 결정해야 합니다. -다음 논문 제목을 고려해 보십시오: +다음 논문 제목을 살펴보세요: -**삼첨판 역류** 및 **탄산리튬** **독성** 신생아에서. +**삼첨판막 역류** 및 **탄산 리튬** **독성**이 신생아에게 발생. 여기서 개체는 다음과 같습니다: -* 삼첨판 역류는 질병입니다 (`DIS`) -* 탄산리튬은 화학 물질입니다 (`CHEM`) -* 독성 또한 질병입니다 (`DIS`) +* 삼첨판막 역류는 질병 (`DIS`) +* 탄산 리튬은 화학 물질 (`CHEM`) +* 독성도 질병 (`DIS`) -하나의 개체가 여러 토큰에 걸쳐 있을 수 있다는 점에 유의하세요. 그리고 이 경우처럼 두 개의 연속된 개체를 구분해야 합니다. 따라서 각 개체에 대해 두 개의 클래스를 사용하는 것이 일반적입니다 - 하나는 개체의 첫 번째 토큰을 지정하고 (종종 `B-` 접두사가 사용됩니다, **b**eginning), 다른 하나는 개체의 계속 (`I-`, **i**nner token)입니다. 우리는 또한 `O`를 모든 **o**ther 토큰을 나타내는 클래스로 사용합니다. 이러한 토큰 태깅을 [BIO 태깅](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging)) (또는 IOB)이라고 합니다. 태깅된 우리의 제목은 다음과 같이 보일 것입니다: +하나의 개체가 여러 토큰에 걸쳐 있을 수 있다는 점에 주목하세요. 그리고 이 경우처럼 두 개의 연속된 개체를 구분해야 합니다. 따라서 각 개체에 대해 두 개의 클래스를 사용하는 것이 일반적입니다. 하나는 개체의 첫 번째 토큰을 지정하는 클래스(`B-` 접두사가 자주 사용됨, **b**eginning을 의미), 다른 하나는 개체의 연속 부분을 지정하는 클래스(`I-`, **i**nner token을 의미)입니다. 또한 모든 **o**ther 토큰을 나타내기 위해 `O` 클래스를 사용합니다. 이러한 토큰 태깅은 [BIO 태깅](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging)) (또는 IOB)이라고 합니다. 태깅된 제목은 다음과 같이 보입니다: -토큰 | 태그 +Token | Tag ------|----- -삼첨판 | B-DIS +삼첨판막 | B-DIS 역류 | I-DIS 및 | O -탄산리튬 | B-CHEM +탄산 | B-CHEM +리튬 | I-CHEM 독성 | B-DIS +이 | O 신생아 | O -에서 | O +에게 | O +발생 | O . | O -토큰과 클래스 간의 일대일 대응을 구축해야 하므로, 우리는 이 그림에서 가장 오른쪽에 있는 **다대다** 신경망 모델을 훈련할 수 있습니다: +토큰과 클래스 간의 일대일 대응을 구축해야 하므로, 이 그림에서 **다대다** 신경망 모델을 훈련할 수 있습니다: ![일반적인 순환 신경망 패턴을 보여주는 이미지.](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.ko.jpg) -> *이미지 출처: [이 블로그 게시물](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)의 [Andrej Karpathy](http://karpathy.github.io/)에 의해 제공된 것입니다. NER 토큰 분류 모델은 이 그림에서 가장 오른쪽 네트워크 아키텍처에 해당합니다.* +> *이미지 출처: [Andrej Karpathy](http://karpathy.github.io/)의 [블로그 글](http://karpathy.github.io/2015/05/21/rnn-effectiveness/). NER 토큰 분류 모델은 이 그림의 가장 오른쪽 네트워크 아키텍처에 해당합니다.* ## NER 모델 훈련 -NER 모델은 본질적으로 토큰 분류 모델이므로, 우리는 이 작업을 위해 이미 익숙한 RNN을 사용할 수 있습니다. 이 경우, 각 순환 네트워크 블록은 토큰 ID를 반환합니다. 다음 예제 노트북은 토큰 분류를 위한 LSTM 훈련 방법을 보여줍니다. +NER 모델은 본질적으로 토큰 분류 모델이므로, 우리가 이미 익숙한 RNN을 사용하여 이 작업을 수행할 수 있습니다. 이 경우 순환 네트워크의 각 블록은 토큰 ID를 반환합니다. 아래의 예제 노트북은 토큰 분류를 위해 LSTM을 훈련하는 방법을 보여줍니다. ## ✍️ 예제 노트북: NER -다음 노트북에서 학습을 계속하세요: +다음 노트북에서 학습을 이어가세요: -* [TensorFlow를 이용한 NER](../../../../../lessons/5-NLP/19-NER/NER-TF.ipynb) +* [TensorFlow를 사용한 NER](../../../../../lessons/5-NLP/19-NER/NER-TF.ipynb) ## 결론 -NER 모델은 **토큰 분류 모델**로, 토큰 분류를 수행하는 데 사용할 수 있습니다. 이는 NLP에서 매우 일반적인 작업으로, 텍스트 내의 특정 개체(장소, 이름, 날짜 등)를 인식하는 데 도움을 줍니다. +NER 모델은 **토큰 분류 모델**로, 토큰 분류를 수행하는 데 사용할 수 있습니다. 이는 NLP에서 매우 일반적인 작업으로, 텍스트 내에서 장소, 이름, 날짜 등을 포함한 특정 개체를 인식하는 데 도움을 줍니다. ## 🚀 도전 과제 -아래 링크된 과제를 완료하여 의학 용어에 대한 명명된 개체 인식 모델을 훈련한 후, 다른 데이터셋에서 시험해 보세요. +아래 링크된 과제를 완료하여 의료 용어를 위한 개체명 인식 모델을 훈련한 후, 다른 데이터셋에서 이를 시도해 보세요. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/219) -## 복습 및 자습 +## 복습 및 자기 학습 -블로그 [순환 신경망의 비현실적인 효과](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)를 읽고 해당 기사에서 더 읽기 섹션을 따라가며 지식을 심화하세요. +[순환 신경망의 놀라운 효과](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) 블로그 글을 읽고, 해당 글의 추가 읽기 섹션을 따라가며 지식을 심화하세요. ## [과제](lab/README.md) -이번 수업의 과제에서는 의학 개체 인식 모델을 훈련해야 합니다. 이 수업에서 설명한 대로 LSTM 모델을 훈련하는 것부터 시작하고, BERT 변환기 모델을 사용하는 것으로 진행할 수 있습니다. 모든 세부 사항을 확인하려면 [지침](lab/README.md)을 읽어보세요. +이 강의의 과제에서는 의료 개체 인식 모델을 훈련해야 합니다. 이 강의에서 설명된 대로 LSTM 모델 훈련을 시작한 후, BERT 변환기 모델을 사용해 보세요. [지침](lab/README.md)을 읽어 모든 세부 정보를 확인하세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 원어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/19-NER/lab/README.md b/translations/ko/lessons/5-NLP/19-NER/lab/README.md index 83d794c7..68413d92 100644 --- a/translations/ko/lessons/5-NLP/19-NER/lab/README.md +++ b/translations/ko/lessons/5-NLP/19-NER/lab/README.md @@ -1,14 +1,23 @@ + # NER -[초보자를 위한 AI 커리큘럼](https://github.com/microsoft/ai-for-beginners)에서의 실습 과제입니다. +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서 제공하는 실습 과제입니다. -## 작업 +## 과제 -이 실습에서는 의료 용어를 위한 명명된 개체 인식(NER) 모델을 훈련해야 합니다. +이 실습에서는 의료 용어를 위한 개체명 인식(NER) 모델을 학습시켜야 합니다. ## 데이터셋 -NER 모델을 훈련하기 위해서는 의료 개체가 적절히 라벨링된 데이터셋이 필요합니다. [BC5CDR 데이터셋](https://biocreative.bioinformatics.udel.edu/tasks/biocreative-v/track-3-cdr/)은 1500편 이상의 논문에서 라벨링된 질병 및 화학 물질 개체를 포함하고 있습니다. 웹사이트에 등록한 후 데이터셋을 다운로드할 수 있습니다. +NER 모델을 학습시키기 위해서는 의료 개체가 적절히 라벨링된 데이터셋이 필요합니다. [BC5CDR 데이터셋](https://biocreative.bioinformatics.udel.edu/tasks/biocreative-v/track-3-cdr/)은 1500개 이상의 논문에서 질병과 화학 물질 개체가 라벨링된 데이터를 제공합니다. 해당 웹사이트에서 회원가입 후 데이터를 다운로드할 수 있습니다. BC5CDR 데이터셋은 다음과 같은 형식을 가지고 있습니다: @@ -21,17 +30,17 @@ BC5CDR 데이터셋은 다음과 같은 형식을 가지고 있습니다: ... ``` -이 데이터셋의 첫 두 줄에는 논문 제목과 초록이 있으며, 그 다음에는 제목+초록 블록 내에서 시작 및 끝 위치와 함께 개별 개체가 있습니다. 개체 유형 외에도, 이 개체가 특정 의료 온톨로지 내에서 가지는 온톨로지 ID도 제공합니다. +이 데이터셋에는 첫 두 줄에 논문의 제목과 초록이 포함되어 있으며, 이후에는 개별 개체와 제목+초록 블록 내에서의 시작 및 끝 위치가 나옵니다. 개체 유형 외에도, 해당 개체가 속한 의료 온톨로지의 ID를 제공합니다. -이 데이터를 BIO 인코딩으로 변환하기 위해 몇 가지 파이썬 코드를 작성해야 합니다. +이 데이터를 BIO 인코딩 형식으로 변환하기 위해 Python 코드를 작성해야 합니다. ## 네트워크 -NER에 대한 첫 번째 시도는 수업 중에 보았던 LSTM 네트워크를 사용하여 수행할 수 있습니다. 그러나 NLP 작업에서는 [트랜스포머 아키텍처](https://en.wikipedia.org/wiki/Transformer_(machine_learning_model))와 특히 [BERT 언어 모델](https://en.wikipedia.org/wiki/BERT_(language_model))이 훨씬 더 좋은 결과를 보여줍니다. 사전 훈련된 BERT 모델은 언어의 일반적인 구조를 이해하고, 상대적으로 작은 데이터셋과 계산 비용으로 특정 작업에 맞게 미세 조정할 수 있습니다. +NER의 첫 번째 시도는 LSTM 네트워크를 사용하는 것으로 시작할 수 있습니다. 이는 수업 중에 본 예제와 유사합니다. 하지만 NLP 작업에서는 [트랜스포머 아키텍처](https://en.wikipedia.org/wiki/Transformer_(machine_learning_model))와 특히 [BERT 언어 모델](https://en.wikipedia.org/wiki/BERT_(language_model))이 훨씬 더 나은 결과를 보여줍니다. 사전 학습된 BERT 모델은 언어의 일반적인 구조를 이해하며, 비교적 작은 데이터셋과 낮은 계산 비용으로 특정 작업에 맞게 미세 조정할 수 있습니다. -우리는 의료 시나리오에 NER을 적용할 계획이므로, 의료 텍스트로 훈련된 BERT 모델을 사용하는 것이 합리적입니다. Microsoft Research는 [PubMedBERT][PubMedBERT] ([발표][PubMedBERT-Pub])라는 사전 훈련된 모델을 발표하였으며, 이는 [PubMed](https://pubmed.ncbi.nlm.nih.gov/) 저장소의 텍스트를 사용하여 미세 조정되었습니다. +의료 시나리오에 NER을 적용할 계획이므로, 의료 텍스트로 학습된 BERT 모델을 사용하는 것이 합리적입니다. Microsoft Research는 [PubMed](https://pubmed.ncbi.nlm.nih.gov/) 저장소의 텍스트를 사용해 미세 조정된 [PubMedBERT][PubMedBERT] ([논문][PubMedBERT-Pub])이라는 사전 학습 모델을 공개했습니다. -트랜스포머 모델 훈련의 *de facto* 표준은 [Hugging Face Transformers](https://huggingface.co/) 라이브러리입니다. 이 라이브러리에는 PubMedBERT를 포함한 커뮤니티에서 유지 관리하는 사전 훈련된 모델의 저장소도 포함되어 있습니다. 이 모델을 로드하고 사용하기 위해서는 몇 줄의 코드만 필요합니다: +트랜스포머 모델을 학습시키는 *사실상 표준*은 [Hugging Face Transformers](https://huggingface.co/) 라이브러리입니다. 이 라이브러리는 PubMedBERT를 포함한 커뮤니티에서 관리하는 사전 학습 모델 저장소도 제공합니다. 이 모델을 로드하고 사용하는 데 필요한 코드는 몇 줄이면 충분합니다: ```python model_name = "microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract" @@ -40,11 +49,11 @@ tokenizer = AutoTokenizer.from_pretrained(model_name) model = BertForTokenClassification.from_pretrained(model_name, classes) ``` -이 코드는 입력 텍스트를 토큰으로 분할할 수 있는 `model` itself, built for token classification task using `classes` number of classes, as well as `tokenizer` 객체를 제공합니다. 데이터셋을 BIO 형식으로 변환할 때 PubMedBERT 토크나이제이션을 고려해야 합니다. [이 파이썬 코드 조각](https://gist.github.com/shwars/580b55684be3328eb39ecf01b9cbbd88)을 참고할 수 있습니다. +이 코드는 `classes` 개의 클래스를 사용하는 토큰 분류 작업을 위한 `model`과 입력 텍스트를 토큰으로 분할할 수 있는 `tokenizer` 객체를 제공합니다. PubMedBERT 토크나이제이션을 고려하여 데이터셋을 BIO 형식으로 변환해야 합니다. [이 Python 코드](https://gist.github.com/shwars/580b55684be3328eb39ecf01b9cbbd88)를 참고 자료로 사용할 수 있습니다. -## 요약 +## 요점 -이 작업은 자연어 텍스트의 대량에 대한 통찰력을 얻고자 할 때 실제로 수행하게 될 작업과 매우 유사합니다. 우리의 경우, 훈련된 모델을 [COVID 관련 논문 데이터셋](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge)에 적용하여 어떤 통찰력을 얻을 수 있을지 살펴볼 수 있습니다. [이 블로그 포스트](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)와 [이 논문](https://www.mdpi.com/2504-2289/6/1/4)은 NER을 사용하여 이 논문 집합에서 수행할 수 있는 연구를 설명합니다. +이 과제는 대량의 자연어 텍스트에서 더 많은 통찰을 얻고자 할 때 실제로 직면할 가능성이 높은 작업과 매우 유사합니다. 우리의 경우, 학습된 모델을 [COVID 관련 논문 데이터셋](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge)에 적용하여 어떤 통찰을 얻을 수 있을지 확인할 수 있습니다. [이 블로그 글](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)과 [이 논문](https://www.mdpi.com/2504-2289/6/1/4)은 NER을 사용하여 이 논문 집합에서 수행할 수 있는 연구를 설명합니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 저희가 책임지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/20-LangModels/README.md b/translations/ko/lessons/5-NLP/20-LangModels/README.md index 139597f9..47664f43 100644 --- a/translations/ko/lessons/5-NLP/20-LangModels/README.md +++ b/translations/ko/lessons/5-NLP/20-LangModels/README.md @@ -1,2 +1,65 @@ + +# 사전 학습된 대형 언어 모델 + +이전의 모든 작업에서는 레이블이 지정된 데이터셋을 사용하여 특정 작업을 수행하도록 신경망을 훈련했습니다. BERT와 같은 대형 트랜스포머 모델에서는 자기 지도 학습 방식으로 언어 모델링을 사용하여 언어 모델을 구축한 후, 추가적인 도메인 특화 훈련을 통해 특정 다운스트림 작업에 최적화합니다. 그러나 대형 언어 모델이 도메인 특화 훈련 없이도 많은 작업을 해결할 수 있다는 것이 입증되었습니다. 이러한 작업을 수행할 수 있는 모델 계열을 **GPT**(Generative Pre-Trained Transformer)라고 합니다. + +## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/120) + +## 텍스트 생성과 퍼플렉시티 + +다운스트림 훈련 없이 일반적인 작업을 수행할 수 있는 신경망의 아이디어는 [Language Models are Unsupervised Multitask Learners](https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf) 논문에서 제시되었습니다. 주요 아이디어는 많은 다른 작업이 **텍스트 생성**을 사용하여 모델링될 수 있다는 것입니다. 텍스트를 이해한다는 것은 본질적으로 텍스트를 생성할 수 있다는 것을 의미하기 때문입니다. 모델이 인간의 지식을 포함하는 방대한 텍스트로 훈련되었기 때문에 다양한 주제에 대해 지식을 갖추게 됩니다. + +> 텍스트를 이해하고 생성할 수 있다는 것은 주변 세계에 대한 지식을 갖추고 있다는 것을 의미합니다. 사람들도 독서를 통해 많은 것을 배우며, GPT 네트워크도 이와 유사한 방식으로 작동합니다. + +텍스트 생성 네트워크는 다음 단어의 확률 $$P(w_N)$$을 예측함으로써 작동합니다. 그러나 다음 단어의 무조건적 확률은 텍스트 코퍼스에서 해당 단어의 빈도와 같습니다. GPT는 이전 단어를 기반으로 다음 단어의 **조건부 확률**을 제공합니다: $$P(w_N | w_{n-1}, ..., w_0)$$ + +> 확률에 대해 더 알고 싶다면 [데이터 과학 초보자 커리큘럼](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/1-Introduction/04-stats-and-probability)을 참고하세요. + +언어 생성 모델의 품질은 **퍼플렉시티**를 사용하여 정의할 수 있습니다. 이는 특정 작업 데이터셋 없이 모델 품질을 측정할 수 있는 내재적 지표입니다. *문장의 확률* 개념에 기반하며, 모델은 현실적일 가능성이 높은 문장에 높은 확률을 부여하고, 덜 의미 있는 문장(예: *Can it does what?*)에는 낮은 확률을 부여합니다. 모델에 실제 텍스트 코퍼스의 문장을 제공하면 높은 확률과 낮은 **퍼플렉시티**를 기대할 수 있습니다. 수학적으로는 테스트 세트의 정규화된 역확률로 정의됩니다: +$$ +\mathrm{Perplexity}(W) = \sqrt[N]{1\over P(W_1,...,W_N)} +$$ + +**[Hugging Face의 GPT 기반 텍스트 편집기](https://transformer.huggingface.co/doc/gpt2-large)**를 사용하여 텍스트 생성을 실험해볼 수 있습니다. 이 편집기에서 텍스트를 작성한 후 **[TAB]** 키를 누르면 여러 완성 옵션이 제공됩니다. 옵션이 너무 짧거나 만족스럽지 않다면 [TAB] 키를 다시 눌러 더 많은 옵션, 포함하여 더 긴 텍스트를 확인할 수 있습니다. + +## GPT는 모델 계열이다 + +GPT는 단일 모델이 아니라 [OpenAI](https://openai.com)가 개발하고 훈련한 모델들의 집합입니다. + +GPT 모델에는 다음이 포함됩니다: + +| [GPT-2](https://huggingface.co/docs/transformers/model_doc/gpt2#openai-gpt2) | [GPT-3](https://openai.com/research/language-models-are-few-shot-learners) | [GPT-4](https://openai.com/gpt-4) | +| -- | -- | -- | +|최대 15억 개의 파라미터를 가진 언어 모델 | 최대 1750억 개의 파라미터를 가진 언어 모델 | 100조 개의 파라미터를 가지며 이미지와 텍스트 입력을 받아 텍스트를 출력 | +GPT-3 및 GPT-4 모델은 [Microsoft Azure의 인지 서비스](https://azure.microsoft.com/en-us/services/cognitive-services/openai-service/#overview?WT.mc_id=academic-77998-cacaste)와 [OpenAI API](https://openai.com/api)를 통해 사용할 수 있습니다. + +## 프롬프트 엔지니어링 + +GPT는 방대한 데이터로 언어와 코드를 이해하도록 훈련되었기 때문에 입력(프롬프트)에 대한 응답으로 출력을 제공합니다. 프롬프트는 GPT에 제공하는 입력 또는 쿼리로, 모델에게 다음에 수행할 작업에 대한 지침을 제공합니다. 원하는 결과를 얻으려면 가장 효과적인 프롬프트가 필요하며, 이는 적절한 단어, 형식, 구문 또는 심지어 기호를 선택하는 것을 포함합니다. 이러한 접근법을 [프롬프트 엔지니어링](https://learn.microsoft.com/en-us/shows/ai-show/the-basics-of-prompt-engineering-with-azure-openai-service?WT.mc_id=academic-77998-bethanycheum)이라고 합니다. + +[이 문서](https://learn.microsoft.com/en-us/semantic-kernel/prompt-engineering/?WT.mc_id=academic-77998-bethanycheum)는 프롬프트 엔지니어링에 대한 더 많은 정보를 제공합니다. + +## ✍️ 예제 노트북: [OpenAI-GPT 활용하기](../../../../../lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) + +다음 노트북에서 학습을 이어가세요: + +* [OpenAI-GPT와 Hugging Face Transformers를 사용한 텍스트 생성](../../../../../lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) + +## 결론 + +새로운 일반 사전 학습 언어 모델은 단순히 언어 구조를 모델링하는 것뿐만 아니라 방대한 자연어를 포함하고 있습니다. 따라서 일부 NLP 작업을 제로샷 또는 퓨샷 설정에서 효과적으로 해결할 수 있습니다. + +## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/220) + +**면책 조항**: +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전이 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/5-NLP/README.md b/translations/ko/lessons/5-NLP/README.md index 801dbc31..dbe96e45 100644 --- a/translations/ko/lessons/5-NLP/README.md +++ b/translations/ko/lessons/5-NLP/README.md @@ -1,30 +1,39 @@ + # 자연어 처리 -![NLP 작업 요약 그림](../../../../translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.ko.png) +![NLP 작업 요약 스케치](../../../../translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.ko.png) -이 섹션에서는 **자연어 처리(NLP)**와 관련된 작업을 처리하기 위해 신경망을 사용하는 데 집중할 것입니다. 컴퓨터가 해결할 수 있기를 원하는 다양한 NLP 문제가 있습니다: +이 섹션에서는 **자연어 처리(NLP)**와 관련된 작업을 처리하기 위해 신경망을 사용하는 방법에 대해 집중적으로 다룹니다. 컴퓨터가 해결할 수 있기를 바라는 많은 NLP 문제들이 있습니다: -* **텍스트 분류**는 텍스트 시퀀스와 관련된 전형적인 분류 문제입니다. 예를 들어, 이메일 메시지를 스팸과 비스팸으로 분류하거나, 기사를 스포츠, 비즈니스, 정치 등으로 분류하는 것이 포함됩니다. 또한, 챗봇을 개발할 때 사용자가 하고자 하는 말을 이해해야 하는 경우가 많습니다. 이 경우 우리는 **의도 분류**를 다루고 있습니다. 의도 분류에서는 종종 여러 카테고리를 다루어야 합니다. -* **감정 분석**은 전형적인 회귀 문제로, 문장의 의미가 얼마나 긍정적 또는 부정적인지를 나타내는 숫자(감정)를 부여해야 합니다. 감정 분석의 더 발전된 버전은 **측면 기반 감정 분석**(ABSA)으로, 문장 전체가 아니라 문장의 다양한 부분(측면)에 감정을 부여합니다. 예를 들어, *이 레스토랑에서는 요리가 좋았지만 분위기는 끔찍했다*와 같은 경우입니다. -* **명명된 개체 인식**(NER)은 텍스트에서 특정 개체를 추출하는 문제를 의미합니다. 예를 들어, *내일 파리로 비행해야 해*라는 문장에서 *내일*은 날짜(DATE)를 나타내고, *파리*는 장소(LOCATION)를 나타낸다는 것을 이해해야 할 수 있습니다. -* **키워드 추출**은 NER과 유사하지만, 특정 개체 유형에 대한 사전 훈련 없이 문장의 의미에 중요한 단어를 자동으로 추출해야 합니다. -* **텍스트 군집화**는 유사한 문장을 함께 그룹화하고자 할 때 유용할 수 있습니다. 예를 들어, 기술 지원 대화에서 유사한 요청을 그룹화할 수 있습니다. -* **질문 응답**은 모델이 특정 질문에 답할 수 있는 능력을 의미합니다. 모델은 텍스트 구문과 질문을 입력으로 받아야 하며, 질문에 대한 답이 포함된 텍스트의 위치를 제공해야 합니다(때로는 답변 텍스트를 생성해야 할 수도 있습니다). -* **텍스트 생성**은 모델이 새로운 텍스트를 생성할 수 있는 능력을 의미합니다. 이는 특정 *텍스트 프롬프트*를 기반으로 다음 글자나 단어를 예측하는 분류 작업으로 간주될 수 있습니다. GPT-3와 같은 고급 텍스트 생성 모델은 [프롬프트 프로그래밍](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) 또는 [프롬프트 엔지니어링](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)이라는 기술을 사용하여 분류와 같은 다른 NLP 작업을 해결할 수 있습니다. +* **텍스트 분류**는 텍스트 시퀀스와 관련된 전형적인 분류 문제입니다. 예를 들어, 이메일 메시지를 스팸과 비스팸으로 분류하거나, 기사를 스포츠, 비즈니스, 정치 등으로 분류하는 작업이 있습니다. 또한, 챗봇을 개발할 때 사용자가 무엇을 말하고 싶어하는지 이해해야 하는 경우가 많습니다. 이 경우 **의도 분류(intent classification)**를 다루게 됩니다. 의도 분류에서는 종종 많은 카테고리를 처리해야 합니다. +* **감정 분석**은 전형적인 회귀 문제로, 문장의 긍정적/부정적 의미를 나타내는 숫자(감정)를 부여해야 합니다. 감정 분석의 더 발전된 버전은 **측면 기반 감정 분석(ABSA)**으로, 문장 전체가 아니라 문장의 다른 부분(측면)에 감정을 부여합니다. 예: *이 레스토랑에서 요리는 마음에 들었지만 분위기는 끔찍했어요.* +* **개체명 인식(NER)**은 텍스트에서 특정 개체를 추출하는 문제를 말합니다. 예를 들어, *내일 파리로 비행기를 타야 해요*라는 문장에서 *내일*은 날짜(DATE)를, *파리*는 위치(LOCATION)를 나타낸다는 것을 이해해야 할 수 있습니다. +* **키워드 추출**은 NER과 유사하지만, 특정 개체 유형에 대해 사전 학습 없이 문장의 의미에 중요한 단어를 자동으로 추출해야 합니다. +* **텍스트 클러스터링**은 기술 지원 대화에서 유사한 요청을 그룹화하는 것처럼 유사한 문장을 함께 묶고 싶을 때 유용합니다. +* **질문 응답**은 모델이 특정 질문에 답할 수 있는 능력을 말합니다. 모델은 텍스트 단락과 질문을 입력으로 받아 질문에 대한 답이 포함된 텍스트의 위치를 제공하거나, 때로는 답변 텍스트를 생성해야 합니다. +* **텍스트 생성**은 모델이 새로운 텍스트를 생성할 수 있는 능력입니다. 이는 *텍스트 프롬프트*를 기반으로 다음 문자/단어를 예측하는 분류 작업으로 간주될 수 있습니다. GPT-3와 같은 고급 텍스트 생성 모델은 [프롬프트 프로그래밍](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) 또는 [프롬프트 엔지니어링](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)이라는 기술을 사용하여 분류와 같은 다른 NLP 작업을 해결할 수 있습니다. * **텍스트 요약**은 컴퓨터가 긴 텍스트를 "읽고" 몇 문장으로 요약하도록 하는 기술입니다. -* **기계 번역**은 한 언어의 텍스트 이해와 다른 언어의 텍스트 생성을 결합한 것으로 볼 수 있습니다. +* **기계 번역**은 한 언어에서 텍스트를 이해하고 다른 언어로 텍스트를 생성하는 작업의 조합으로 볼 수 있습니다. -초기에는 대부분의 NLP 작업이 문법과 같은 전통적인 방법으로 해결되었습니다. 예를 들어, 기계 번역에서는 파서를 사용하여 초기 문장을 구문 트리로 변환한 다음, 문장의 의미를 나타내기 위해 더 높은 수준의 의미 구조를 추출하고, 이 의미와 목표 언어의 문법에 따라 결과를 생성했습니다. 현재는 많은 NLP 작업이 신경망을 사용하여 더 효과적으로 해결되고 있습니다. +초기에는 대부분의 NLP 작업이 문법과 같은 전통적인 방법을 사용하여 해결되었습니다. 예를 들어, 기계 번역에서는 구문 분석기를 사용하여 초기 문장을 구문 트리로 변환한 다음, 문장의 의미를 나타내는 상위 수준의 의미 구조를 추출하고, 이 의미와 대상 언어의 문법을 기반으로 결과를 생성했습니다. 오늘날에는 많은 NLP 작업이 신경망을 사용하여 더 효과적으로 해결되고 있습니다. -> 많은 고전적인 NLP 방법은 [자연어 처리 툴킷(NLTK)](https://www.nltk.org) 파이썬 라이브러리에 구현되어 있습니다. 다양한 NLP 작업을 NLTK를 사용하여 해결하는 방법을 다룬 훌륭한 [NLTK 책](https://www.nltk.org/book/)이 온라인에서 제공됩니다. +> 많은 고전적인 NLP 방법은 [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) Python 라이브러리에 구현되어 있습니다. 다양한 NLP 작업을 NLTK를 사용하여 해결하는 방법을 다룬 훌륭한 [NLTK Book](https://www.nltk.org/book/)이 온라인에서 제공됩니다. -우리의 과정에서는 주로 NLP를 위해 신경망을 사용하는 데 집중하며, 필요할 때 NLTK를 사용할 것입니다. +이 강의에서는 주로 NLP를 위해 신경망을 사용하는 데 초점을 맞추고, 필요한 경우 NLTK를 사용할 것입니다. -우리는 이미 표 형식 데이터와 이미지 처리에 신경망을 사용하는 방법에 대해 배웠습니다. 이러한 데이터 유형과 텍스트의 주요 차이점은 텍스트가 가변 길이의 시퀀스인 반면, 이미지의 경우 입력 크기가 미리 알려져 있다는 것입니다. 합성곱 신경망은 입력 데이터에서 패턴을 추출할 수 있지만, 텍스트의 패턴은 더 복잡합니다. 예를 들어, 부정이 주어와 분리되어 임의로 여러 단어에 대해 적용될 수 있으며(예: *나는 오렌지를 좋아하지 않는다* vs. *나는 저 큰 화려하고 맛있는 오렌지를 좋아하지 않는다*), 이는 여전히 하나의 패턴으로 해석되어야 합니다. 따라서 언어를 처리하기 위해서는 *순환 신경망* 및 *변환기*와 같은 새로운 신경망 유형을 도입해야 합니다. +우리는 이미 표 형식 데이터와 이미지 처리를 위해 신경망을 사용하는 방법에 대해 배웠습니다. 이러한 데이터 유형과 텍스트의 주요 차이점은 텍스트가 가변 길이의 시퀀스라는 점입니다. 반면, 이미지의 경우 입력 크기가 미리 정해져 있습니다. 합성곱 신경망은 입력 데이터에서 패턴을 추출할 수 있지만, 텍스트의 패턴은 더 복잡합니다. 예를 들어, 부정어가 주어와 여러 단어로 분리될 수 있습니다(예: *나는 오렌지를 좋아하지 않는다* vs. *나는 저 크고 화려하고 맛있는 오렌지를 좋아하지 않는다*). 이러한 경우에도 하나의 패턴으로 해석되어야 합니다. 따라서 언어를 처리하려면 *순환 신경망(recurrent networks)* 및 *트랜스포머(transformers)*와 같은 새로운 신경망 유형을 도입해야 합니다. ## 라이브러리 설치 -이 과정에서 로컬 파이썬 설치를 사용하고 있다면, 다음 명령어를 사용하여 NLP에 필요한 모든 라이브러리를 설치해야 할 수 있습니다: +이 강의를 로컬 Python 설치에서 실행하려는 경우, 다음 명령을 사용하여 NLP에 필요한 모든 라이브러리를 설치해야 할 수 있습니다: **PyTorch용** ```bash @@ -35,17 +44,17 @@ pip install -r requirements-torch.txt pip install -r requirements-tf.txt ``` -> TensorFlow에서 NLP를 시도하려면 [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste)에서 확인해 보세요. +> TensorFlow를 사용한 NLP를 [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste)에서 시도해볼 수 있습니다. ## GPU 경고 -이 섹션에서는 일부 예제에서 꽤 큰 모델을 훈련할 것입니다. -* **GPU 지원 컴퓨터 사용**: 큰 모델을 다룰 때 대기 시간을 줄이기 위해 GPU 지원 컴퓨터에서 노트북을 실행하는 것이 좋습니다. -* **GPU 메모리 제약**: GPU에서 실행하면 특히 큰 모델을 훈련할 때 GPU 메모리가 부족해지는 상황이 발생할 수 있습니다. -* **GPU 메모리 소비**: 훈련 중 소비되는 GPU 메모리의 양은 미니배치 크기 등 다양한 요인에 따라 달라집니다. -* **미니배치 크기 최소화**: GPU 메모리 문제가 발생하면 코드에서 미니배치 크기를 줄이는 것을 고려해 보세요. -* **TensorFlow GPU 메모리 해제**: 이전 버전의 TensorFlow는 하나의 파이썬 커널 내에서 여러 모델을 훈련할 때 GPU 메모리를 올바르게 해제하지 않을 수 있습니다. GPU 메모리 사용을 효과적으로 관리하려면 TensorFlow가 필요한 경우에만 GPU 메모리를 할당하도록 구성할 수 있습니다. -* **코드 포함**: TensorFlow가 필요한 경우에만 GPU 메모리 할당을 성장하도록 설정하려면 노트북에 다음 코드를 포함하세요: +이 섹션에서는 일부 예제에서 상당히 큰 모델을 훈련시킬 것입니다. +* **GPU 지원 컴퓨터 사용**: 큰 모델 작업 시 대기 시간을 줄이기 위해 GPU 지원 컴퓨터에서 노트북을 실행하는 것이 좋습니다. +* **GPU 메모리 제약**: GPU에서 실행할 경우, 특히 큰 모델을 훈련할 때 GPU 메모리가 부족한 상황이 발생할 수 있습니다. +* **GPU 메모리 소비**: 훈련 중 소비되는 GPU 메모리 양은 미니배치 크기 등 다양한 요인에 따라 달라집니다. +* **미니배치 크기 최소화**: GPU 메모리 문제가 발생하면 코드에서 미니배치 크기를 줄이는 것을 고려해보세요. +* **TensorFlow GPU 메모리 해제**: TensorFlow의 이전 버전은 하나의 Python 커널에서 여러 모델을 훈련할 때 GPU 메모리를 올바르게 해제하지 않을 수 있습니다. GPU 메모리 사용을 효과적으로 관리하려면 TensorFlow가 필요한 경우에만 GPU 메모리를 할당하도록 설정할 수 있습니다. +* **코드 포함**: TensorFlow가 필요한 경우에만 GPU 메모리를 점진적으로 할당하도록 설정하려면 다음 코드를 노트북에 포함하세요: ```python physical_devices = tf.config.list_physical_devices('GPU') @@ -53,17 +62,17 @@ if len(physical_devices)>0: tf.config.experimental.set_memory_growth(physical_devices[0], True) ``` -고전적인 ML 관점에서 NLP에 대해 배우고 싶다면 [이 수업 모음](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)을 방문하세요. +클래식 ML 관점에서 NLP를 배우고 싶다면 [이 강의 모음](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)을 방문하세요. -## 이 섹션에서는 -이 섹션에서는 다음에 대해 배울 것입니다: +## 이 섹션에서 +이 섹션에서는 다음 내용을 배웁니다: * [텍스트를 텐서로 표현하기](13-TextRep/README.md) * [단어 임베딩](14-Emdeddings/README.md) * [언어 모델링](15-LanguageModeling/README.md) * [순환 신경망](16-RNN/README.md) -* [생성적 네트워크](17-GenerativeNetworks/README.md) -* [변환기](18-Transformers/README.md) +* [생성 네트워크](17-GenerativeNetworks/README.md) +* [트랜스포머](18-Transformers/README.md) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/6-Other/21-GeneticAlgorithms/README.md b/translations/ko/lessons/6-Other/21-GeneticAlgorithms/README.md index f57f172b..4f051fb6 100644 --- a/translations/ko/lessons/6-Other/21-GeneticAlgorithms/README.md +++ b/translations/ko/lessons/6-Other/21-GeneticAlgorithms/README.md @@ -1,80 +1,90 @@ + # 유전 알고리즘 ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/121) -**유전 알고리즘** (GA)은 AI에 대한 **진화적 접근**에 기반하여, 인구의 진화 방법을 사용하여 주어진 문제에 대한 최적의 솔루션을 얻는 방법입니다. 이 개념은 1975년 [John Henry Holland](https://wikipedia.org/wiki/John_Henry_Holland)에 의해 제안되었습니다. +**유전 알고리즘**(Genetic Algorithms, GA)은 **진화적 접근법**을 기반으로 한 AI 방법으로, 인구의 진화 과정을 사용하여 주어진 문제에 대한 최적의 해결책을 찾습니다. 유전 알고리즘은 1975년 [John Henry Holland](https://wikipedia.org/wiki/John_Henry_Holland)에 의해 제안되었습니다. -유전 알고리즘은 다음과 같은 아이디어에 기반합니다: +유전 알고리즘은 다음과 같은 아이디어를 기반으로 합니다: -* 문제에 대한 유효한 솔루션은 **유전자**로 표현될 수 있습니다. -* **교차**는 두 개의 솔루션을 결합하여 새로운 유효한 솔루션을 얻을 수 있게 합니다. -* **선택**은 일부 **적합도 함수**를 사용하여 더 최적의 솔루션을 선택하는 데 사용됩니다. -* **돌연변이**는 최적화를 불안정하게 하여 지역 최소값에서 벗어날 수 있도록 도와줍니다. +* 문제의 유효한 해결책은 **유전자**로 표현될 수 있습니다. +* **교차**를 통해 두 해결책을 결합하여 새로운 유효한 해결책을 얻을 수 있습니다. +* **선택**은 특정 **적합도 함수**를 사용하여 더 최적의 해결책을 선택하는 데 사용됩니다. +* **돌연변이**는 최적화를 불안정하게 만들어 지역 최소값에서 벗어날 수 있도록 도입됩니다. 유전 알고리즘을 구현하려면 다음이 필요합니다: -* **유전자** g∈Γ를 사용하여 문제 솔루션을 인코딩하는 방법을 찾아야 합니다. -* 유전자 집합 Γ에 대해 **적합도 함수** fit: Γ→**R**을 정의해야 합니다. 더 작은 함수 값은 더 나은 솔루션에 해당합니다. -* 두 개의 유전자를 결합하여 새로운 유효한 솔루션을 얻기 위해 **교차** 메커니즘 crossover: Γ2→Γ를 정의해야 합니다. +* **유전자** g∈Γ를 사용하여 문제 해결책을 코딩하는 방법을 찾아야 합니다. +* 유전자 집합 Γ에서 **적합도 함수** fit: Γ→**R**를 정의해야 합니다. 함수 값이 작을수록 더 나은 해결책을 나타냅니다. +* 두 유전자를 결합하여 새로운 유효한 해결책을 얻는 **교차** 메커니즘 crossover: Γ2→Γ를 정의해야 합니다. * **돌연변이** 메커니즘 mutate: Γ→Γ를 정의해야 합니다. -많은 경우, 교차와 돌연변이는 유전자를 숫자 시퀀스나 비트 벡터로 조작하는 간단한 알고리즘입니다. +많은 경우, 교차와 돌연변이는 유전자를 숫자 시퀀스 또는 비트 벡터로 조작하는 간단한 알고리즘입니다. -유전 알고리즘의 구체적인 구현은 사례에 따라 다를 수 있지만, 전반적인 구조는 다음과 같습니다: +유전 알고리즘의 구체적인 구현은 사례마다 다를 수 있지만, 전체적인 구조는 다음과 같습니다: -1. 초기 집단 G⊂Γ를 선택합니다. -2. 이 단계에서 수행될 작업 중 하나를 무작위로 선택합니다: 교차 또는 돌연변이 +1. 초기 인구 G⊂Γ를 선택합니다. +2. 이 단계에서 수행할 작업(교차 또는 돌연변이)을 무작위로 선택합니다. 3. **교차**: - * 무작위로 두 유전자 g1, g2 ∈ G를 선택합니다. - * 교차를 계산합니다: g=crossover(g1,g2) - * 만약 fit(g)1) 또는 fit(g)2)라면 - 해당 유전자를 g로 대체합니다. -4. **돌연변이** - 무작위 유전자 g∈G를 선택하고 mutate(g)로 대체합니다. -5. 충분히 작은 적합도 값이 얻어질 때까지 또는 단계 수의 한계에 도달할 때까지 2단계부터 반복합니다. + * 두 유전자 g1, g2 ∈ G를 무작위로 선택합니다. + * 교차를 계산하여 g=crossover(g1,g2)를 얻습니다. + * fit(g)1) 또는 fit(g)2)인 경우, 인구에서 해당 유전자를 g로 대체합니다. +4. **돌연변이** - 무작위로 유전자 g∈G를 선택하고 mutate(g)로 대체합니다. +5. 적합도 값이 충분히 작아질 때까지 또는 단계 제한에 도달할 때까지 2단계부터 반복합니다. ## 일반적인 작업 -유전 알고리즘으로 해결되는 일반적인 작업에는 다음이 포함됩니다: +유전 알고리즘으로 일반적으로 해결되는 작업은 다음과 같습니다: 1. 일정 최적화 -2. 최적 포장 -3. 최적 절단 -4. 포괄적 검색 속도 향상 +1. 최적의 포장 +1. 최적의 절단 +1. 완전 탐색 속도 향상 -## ✍️ 연습문제: 유전 알고리즘 +## ✍️ 연습: 유전 알고리즘 다음 노트북에서 학습을 계속하세요: -[이 노트북](../../../../../lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb)으로 가서 유전 알고리즘을 사용하는 두 가지 예제를 확인하세요: +[이 노트북](../../../../../lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb)에서 유전 알고리즘을 사용하는 두 가지 예제를 확인하세요: 1. 보물의 공정한 분배 -2. 8 퀸 문제 +1. 8퀸 문제 ## 결론 -유전 알고리즘은 물류 및 검색 문제를 포함하여 많은 문제를 해결하는 데 사용됩니다. 이 분야는 심리학과 컴퓨터 과학의 주제를 통합한 연구에서 영감을 받았습니다. +유전 알고리즘은 물류 및 탐색 문제를 포함한 다양한 문제를 해결하는 데 사용됩니다. 이 분야는 심리학과 컴퓨터 과학을 융합한 연구에서 영감을 받았습니다. -## 🚀 도전 +## 🚀 도전 과제 -"유전 알고리즘은 구현이 간단하지만 그 동작을 이해하기는 어렵습니다." [출처](https://wikipedia.org/wiki/Genetic_algorithm) 스도쿠 퍼즐 해결과 같은 유전 알고리즘의 구현을 찾기 위해 연구하고, 그것이 어떻게 작동하는지 스케치 또는 흐름도로 설명하세요. +"유전 알고리즘은 구현하기는 간단하지만, 그 동작을 이해하기는 어렵다." [출처](https://wikipedia.org/wiki/Genetic_algorithm) +유전 알고리즘을 사용하여 예를 들어 스도쿠 퍼즐을 해결하는 구현을 찾아보고, 이를 스케치 또는 흐름도로 설명하세요. ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/221) ## 복습 및 자기 학습 -[이 훌륭한 비디오](https://www.youtube.com/watch?v=qv6UVOQ0F44)를 시청하여 컴퓨터가 유전 알고리즘으로 훈련된 신경망을 사용하여 슈퍼 마리오를 플레이하는 방법에 대해 이야기하는 내용을 확인하세요. 우리는 [다음 섹션](../22-DeepRL/README.md)에서 이러한 게임을 플레이하는 컴퓨터 학습에 대해 더 배울 것입니다. +[이 훌륭한 영상](https://www.youtube.com/watch?v=qv6UVOQ0F44)을 시청하여 컴퓨터가 유전 알고리즘으로 훈련된 신경망을 사용해 슈퍼 마리오를 플레이하는 방법에 대해 알아보세요. 우리는 [다음 섹션](../22-DeepRL/README.md)에서 이와 같은 게임 플레이 학습에 대해 더 배울 것입니다. -## [과제: 디오판틴 방정식](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) +## [과제: 디오판토스 방정식](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) -당신의 목표는 **디오판틴 방정식** - 정수 해를 가진 방정식을 해결하는 것입니다. 예를 들어, 방정식 a+2b+3c+4d=30을 고려해보세요. 이 방정식을 만족하는 정수 해를 찾아야 합니다. +목표는 **디오판토스 방정식** - 정수 해를 가지는 방정식을 해결하는 것입니다. 예를 들어, 방정식 a+2b+3c+4d=30을 고려해보세요. 이 방정식을 만족하는 정수 해를 찾아야 합니다. -*이 과제는 [이 포스트](https://habr.com/post/128704/)에서 영감을 받았습니다.* +*이 과제는 [이 게시물](https://habr.com/post/128704/)에서 영감을 받았습니다.* 힌트: -1. 해를 [0;30] 구간에 있다고 가정할 수 있습니다. -2. 유전자로서 해 값 목록을 사용하는 것을 고려해보세요. +1. 해는 [0;30] 구간에 있다고 가정할 수 있습니다. +1. 유전자로 루트 값의 리스트를 사용하는 것을 고려해보세요. [Diophantine.ipynb](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb)를 시작점으로 사용하세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의해 주시기 바랍니다. 원본 문서는 해당 언어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 저희가 책임지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/6-Other/22-DeepRL/README.md b/translations/ko/lessons/6-Other/22-DeepRL/README.md index 5b96515d..a8fed370 100644 --- a/translations/ko/lessons/6-Other/22-DeepRL/README.md +++ b/translations/ko/lessons/6-Other/22-DeepRL/README.md @@ -1,33 +1,42 @@ -# 심층 강화 학습 + +# 딥 강화 학습 -강화 학습(RL)은 감독 학습 및 비감독 학습과 함께 기본적인 기계 학습 패러다임 중 하나로 여겨집니다. 감독 학습에서는 결과가 알려진 데이터셋에 의존하지만, RL은 **행동을 통해 배우는** 데 기반을 두고 있습니다. 예를 들어, 우리가 컴퓨터 게임을 처음 접했을 때, 규칙을 알지 못한 채로 게임을 시작하고, 곧 게임을 하며 행동을 조정하는 과정만으로도 우리의 기술을 향상시킬 수 있습니다. +강화 학습(RL)은 지도 학습과 비지도 학습과 함께 기본적인 머신 러닝 패러다임 중 하나로 간주됩니다. 지도 학습에서는 결과가 알려진 데이터셋에 의존하는 반면, RL은 **직접 행동하며 배우는 것**에 기반합니다. 예를 들어, 처음 컴퓨터 게임을 접했을 때 규칙을 몰라도 게임을 시작하고, 게임을 하면서 행동을 조정하는 과정을 통해 점차 실력을 향상시킬 수 있습니다. ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/122) -RL을 수행하기 위해서는 다음이 필요합니다: +RL을 수행하기 위해 필요한 요소는 다음과 같습니다: -* 게임의 규칙을 설정하는 **환경** 또는 **시뮬레이터**. 우리는 시뮬레이터에서 실험을 실행하고 결과를 관찰할 수 있어야 합니다. -* 우리의 실험이 얼마나 성공적이었는지를 나타내는 **보상 함수**. 컴퓨터 게임을 배우는 경우, 보상은 우리의 최종 점수가 됩니다. +* **환경** 또는 **시뮬레이터**: 게임의 규칙을 설정하는 역할을 합니다. 시뮬레이터에서 실험을 실행하고 결과를 관찰할 수 있어야 합니다. +* **보상 함수**: 실험이 얼마나 성공적이었는지를 나타냅니다. 컴퓨터 게임을 배우는 경우, 보상은 최종 점수가 될 것입니다. -보상 함수에 따라 우리는 행동을 조정하고 기술을 향상시킬 수 있어야 하며, 다음 번에는 더 나은 플레이를 할 수 있습니다. 다른 유형의 기계 학습과 RL의 주요 차이점은 RL에서는 게임이 끝날 때까지 우리가 이겼는지 졌는지 알 수 없다는 것입니다. 따라서 특정 행동이 좋거나 나쁘다고 단독으로 판단할 수 없으며, 게임의 끝에서만 보상을 받습니다. +보상 함수에 따라 행동을 조정하고 실력을 향상시켜 다음 번에 더 나은 결과를 얻을 수 있습니다. RL과 다른 머신 러닝 유형의 주요 차이점은 RL에서는 게임이 끝날 때까지 승패를 알 수 없다는 점입니다. 따라서 특정 행동이 단독으로 좋은지 나쁜지 판단할 수 없으며, 게임이 끝난 후에야 보상을 받게 됩니다. -RL 동안 우리는 일반적으로 많은 실험을 수행합니다. 각 실험에서 우리는 지금까지 배운 최적의 전략을 따르는 것(**착취**)과 새로운 가능한 상태를 탐색하는 것(**탐색**) 사이에서 균형을 맞춰야 합니다. +RL 과정에서는 일반적으로 많은 실험을 수행합니다. 각 실험에서는 지금까지 학습한 최적의 전략을 따르는 것(**활용**)과 새로운 상태를 탐색하는 것(**탐험**) 사이에서 균형을 맞춰야 합니다. ## OpenAI Gym -RL을 위한 훌륭한 도구는 [OpenAI Gym](https://gym.openai.com/)입니다. 이는 아타리 게임부터 폴 밸런싱의 물리학에 이르기까지 다양한 환경을 시뮬레이션할 수 있는 **시뮬레이션 환경**입니다. 이는 강화 학습 알고리즘을 훈련시키기 위한 가장 인기 있는 시뮬레이션 환경 중 하나이며, [OpenAI](https://openai.com/)에서 유지 관리됩니다. +RL을 위한 훌륭한 도구 중 하나는 [OpenAI Gym](https://gym.openai.com/)입니다. 이는 다양한 환경을 시뮬레이션할 수 있는 **시뮬레이션 환경**으로, 아타리 게임부터 막대 균형 물리학까지 다양한 환경을 제공합니다. OpenAI에서 유지 관리하며, 강화 학습 알고리즘을 훈련시키는 데 가장 인기 있는 시뮬레이션 환경 중 하나입니다. -> **참고**: OpenAI Gym에서 사용 가능한 모든 환경은 [여기](https://gym.openai.com/envs/#classic_control)에서 확인할 수 있습니다. +> **Note**: OpenAI Gym에서 제공하는 모든 환경은 [여기](https://gym.openai.com/envs/#classic_control)에서 확인할 수 있습니다. ## CartPole 균형 잡기 -여러분은 아마 *세그웨이*나 *자이로스쿠터*와 같은 현대의 균형 장치를 모두 보았을 것입니다. 이들은 가속도계나 자이로스코프의 신호에 따라 바퀴를 조정하여 자동으로 균형을 잡을 수 있습니다. 이 섹션에서는 유사한 문제인 폴 균형 잡기를 배우게 됩니다. 이는 서커스 공연자가 손에 막대를 균형 잡아야 하는 상황과 비슷하지만, 이 폴 균형 잡기는 1D에서만 발생합니다. +여러분은 아마도 *세그웨이*나 *자이로스쿠터*와 같은 현대적인 균형 장치를 본 적이 있을 것입니다. 이 장치들은 가속도계나 자이로스코프의 신호에 따라 바퀴를 조정하여 자동으로 균형을 잡습니다. 이 섹션에서는 비슷한 문제인 막대 균형 잡기를 해결하는 방법을 배워보겠습니다. 이는 서커스 공연자가 손 위에 막대를 균형 잡는 상황과 비슷하지만, 이 문제는 1차원에서만 발생합니다. -균형 잡기의 단순화된 버전은 **CartPole** 문제로 알려져 있습니다. CartPole 세계에서는 왼쪽이나 오른쪽으로 이동할 수 있는 수평 슬라이더가 있으며, 목표는 슬라이더 위에 수직 막대를 균형 잡는 것입니다. +간소화된 균형 문제는 **CartPole** 문제로 알려져 있습니다. CartPole 세계에서는 좌우로 움직일 수 있는 수평 슬라이더가 있으며, 목표는 슬라이더 위에 세워진 수직 막대를 균형 잡는 것입니다. a cartpole -이 환경을 생성하고 사용하기 위해서는 몇 줄의 파이썬 코드가 필요합니다: +이 환경을 생성하고 사용하는 데 필요한 Python 코드 몇 줄은 다음과 같습니다: ```python import gym @@ -45,73 +54,73 @@ while not done: print(f"Total reward: {total_reward}") ``` -각 환경은 정확히 동일한 방법으로 접근할 수 있습니다: -* `env.reset` starts a new experiment -* `env.step`는 시뮬레이션 단계를 수행합니다. 이는 **행동 공간**에서 **행동**을 받고, **관찰 공간**에서 **관찰**을 반환하며, 보상과 종료 플래그도 반환합니다. +각 환경은 동일한 방식으로 접근할 수 있습니다: +* `env.reset`: 새로운 실험을 시작합니다. +* `env.step`: 시뮬레이션 단계를 수행합니다. **액션 공간**에서 **액션**을 받아들이고, **관찰**(관찰 공간에서), 보상 및 종료 플래그를 반환합니다. -위의 예에서는 각 단계에서 무작위 행동을 수행하므로 실험의 수명이 매우 짧습니다: +위 예제에서는 각 단계에서 랜덤 액션을 수행하기 때문에 실험의 지속 시간이 매우 짧습니다: ![non-balancing cartpole](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-nobalance.gif) -RL 알고리즘의 목표는 주어진 상태에 대한 반응으로 행동을 반환하는 모델, 즉 **정책** π를 훈련하는 것입니다. 정책을 확률적으로 고려할 수도 있습니다. 예를 들어, 어떤 상태 *s*와 행동 *a*에 대해 *s* 상태에서 *a*를 취할 확률 π(*a*|*s*)를 반환합니다. +RL 알고리즘의 목표는 모델, 즉 **정책** π를 훈련시키는 것입니다. 이 정책은 주어진 상태에 대한 응답으로 액션을 반환합니다. 정책은 확률적으로도 고려할 수 있으며, 상태 *s*와 액션 *a*에 대해 π(*a*|*s*)는 상태 *s*에서 *a*를 선택해야 할 확률을 반환합니다. -## 정책 경량화 알고리즘 +## 정책 경사 알고리즘 -정책을 모델링하는 가장 명백한 방법은 상태를 입력으로 받고 해당 행동(또는 모든 행동의 확률)을 반환하는 신경망을 만드는 것입니다. 어떤 면에서는 이것이 일반적인 분류 작업과 유사하지만, 주요 차이점은 각 단계에서 어떤 행동을 취해야 할지 미리 알 수 없다는 것입니다. +정책을 모델링하는 가장 명확한 방법은 상태를 입력으로 받아 액션(혹은 모든 액션의 확률)을 반환하는 신경망을 만드는 것입니다. 이는 일반적인 분류 작업과 비슷하지만 주요 차이점은 각 단계에서 어떤 액션을 취해야 할지 미리 알 수 없다는 점입니다. -여기서의 아이디어는 이러한 확률을 추정하는 것입니다. 우리는 실험의 각 단계에서 우리의 총 보상을 보여주는 **누적 보상** 벡터를 구축합니다. 또한 이전 보상에 어떤 계수 γ=0.99를 곱하여 **보상 할인**을 적용하여 이전 보상의 역할을 줄입니다. 그런 다음, 더 큰 보상을 가져오는 실험 경로를 따라 이러한 단계를 강화합니다. +여기서의 아이디어는 이러한 확률을 추정하는 것입니다. 실험의 각 단계에서 총 보상을 보여주는 **누적 보상 벡터**를 생성합니다. 또한 초기 보상의 역할을 줄이기 위해 γ=0.99와 같은 계수를 곱하여 **보상 할인**을 적용합니다. 그런 다음 더 큰 보상을 가져오는 실험 경로의 단계를 강화합니다. -> 정책 경량화 알고리즘에 대해 더 배우고 [예제 노트북](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb)에서 이를 확인하세요. +> 정책 경사 알고리즘에 대해 더 배우고 실제로 작동하는 모습을 보려면 [예제 노트북](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb)을 확인하세요. ## 액터-크리틱 알고리즘 -정책 경량화 접근 방식의 개선된 버전은 **액터-크리틱**이라고 합니다. 그 뒤에 있는 주요 아이디어는 신경망이 두 가지를 반환하도록 훈련된다는 것입니다: +정책 경사 접근법의 개선된 버전은 **액터-크리틱**이라고 불립니다. 이 접근법의 주요 아이디어는 신경망이 두 가지를 반환하도록 훈련된다는 것입니다: -* 어떤 행동을 취할지를 결정하는 정책. 이 부분을 **액터**라고 합니다. -* 이 상태에서 우리가 기대할 수 있는 총 보상의 추정치 - 이 부분을 **크리틱**이라고 합니다. +* 어떤 액션을 취할지 결정하는 **정책**: 이 부분은 **액터**라고 합니다. +* 해당 상태에서 얻을 수 있는 총 보상을 추정하는 부분: 이 부분은 **크리틱**이라고 합니다. -어떤 면에서는 이 아키텍처가 [GAN](../../4-ComputerVision/10-GANs/README.md)과 유사하며, 여기서는 서로 대립되는 두 개의 네트워크가 있습니다. 액터-크리틱 모델에서 액터는 우리가 취해야 할 행동을 제안하고, 크리틱은 비판적으로 결과를 추정하려고 합니다. 그러나 우리의 목표는 이러한 네트워크를 동시에 훈련하는 것입니다. +이 구조는 [GAN](../../4-ComputerVision/10-GANs/README.md)과 유사합니다. GAN에서는 두 개의 네트워크가 서로 경쟁하며 훈련됩니다. 액터-크리틱 모델에서는 액터가 취해야 할 액션을 제안하고, 크리틱이 비판적으로 결과를 추정합니다. 하지만 우리의 목표는 이 두 네트워크를 조화롭게 훈련시키는 것입니다. -우리는 실험 동안 실제 누적 보상과 크리틱이 반환한 결과를 모두 알고 있기 때문에, 이 둘 간의 차이를 최소화하는 손실 함수를 만드는 것이 상대적으로 쉽습니다. 이것이 **크리틱 손실**입니다. **액터 손실**은 정책 경량화 알고리즘과 동일한 접근 방식을 사용하여 계산할 수 있습니다. +실험 중에 실제 누적 보상과 크리틱이 반환한 결과를 모두 알고 있기 때문에, 이들 간의 차이를 최소화하는 손실 함수를 만드는 것이 비교적 쉽습니다. 이를 **크리틱 손실**이라고 합니다. **액터 손실**은 정책 경사 알고리즘과 동일한 접근법을 사용하여 계산할 수 있습니다. -이 알고리즘 중 하나를 실행한 후, 우리의 CartPole이 이렇게 행동할 것으로 기대할 수 있습니다: +이 알고리즘 중 하나를 실행한 후, 우리의 CartPole은 다음과 같이 행동할 것으로 기대됩니다: ![a balancing cartpole](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-balance.gif) -## ✍️ 연습: 정책 경량화 및 액터-크리틱 RL +## ✍️ 연습: 정책 경사와 액터-크리틱 RL -다음 노트북에서 학습을 계속하세요: +다음 노트북에서 학습을 이어가세요: -* [TensorFlow에서의 RL](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) -* [PyTorch에서의 RL](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) +* [TensorFlow에서 RL](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) +* [PyTorch에서 RL](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) ## 기타 RL 작업 -현재 강화 학습은 빠르게 성장하는 연구 분야입니다. 강화 학습의 흥미로운 몇 가지 예시는 다음과 같습니다: +오늘날 강화 학습은 빠르게 성장하는 연구 분야입니다. 강화 학습의 흥미로운 예는 다음과 같습니다: -* 컴퓨터가 **아타리 게임**을 플레이하도록 가르치는 것. 이 문제에서 도전적인 부분은 단순한 벡터로 표현된 상태가 아니라 스크린샷이라는 것입니다. 우리는 CNN을 사용하여 이 화면 이미지를 피처 벡터로 변환하거나 보상 정보를 추출해야 합니다. 아타리 게임은 Gym에서 사용할 수 있습니다. -* 컴퓨터가 체스와 바둑과 같은 보드 게임을 플레이하도록 가르치는 것. 최근 **Alpha Zero**와 같은 최첨단 프로그램은 서로 대결하는 두 에이전트에 의해 처음부터 훈련되었으며, 각 단계에서 개선되었습니다. +* **아타리 게임**을 컴퓨터가 배우도록 가르치기. 이 문제의 도전 과제는 간단한 상태가 벡터로 표현되지 않고 스크린샷으로 제공된다는 점입니다. 따라서 CNN을 사용하여 화면 이미지를 특징 벡터로 변환하거나 보상 정보를 추출해야 합니다. 아타리 게임은 Gym에서 사용할 수 있습니다. +* 체스와 바둑 같은 보드 게임을 컴퓨터가 배우도록 가르치기. 최근에는 **Alpha Zero**와 같은 최첨단 프로그램이 두 에이전트가 서로 대결하며 점진적으로 향상되는 방식으로 처음부터 훈련되었습니다. * 산업에서는 RL을 사용하여 시뮬레이션에서 제어 시스템을 생성합니다. [Bonsai](https://azure.microsoft.com/services/project-bonsai/?WT.mc_id=academic-77998-cacaste)라는 서비스는 이를 위해 특별히 설계되었습니다. ## 결론 -이제 우리는 에이전트를 훈련시켜 게임의 원하는 상태를 정의하는 보상 함수를 제공하고, 탐색 공간을 지능적으로 탐색할 기회를 제공함으로써 좋은 결과를 얻는 방법을 배웠습니다. 우리는 두 가지 알고리즘을 성공적으로 시도했고, 비교적 짧은 시간 안에 좋은 결과를 얻었습니다. 그러나 이는 RL에 대한 여러분의 여정의 시작일 뿐이며, 더 깊이 파고들고 싶다면 별도의 과정을 수강하는 것을 고려해야 합니다. +우리는 이제 게임의 원하는 상태를 정의하는 보상 함수를 제공하고, 지능적으로 탐색 공간을 탐험할 기회를 제공함으로써 에이전트를 훈련시켜 좋은 결과를 얻는 방법을 배웠습니다. 두 가지 알고리즘을 성공적으로 시도했으며 비교적 짧은 시간 안에 좋은 결과를 얻었습니다. 하지만 이는 RL에 대한 여정의 시작일 뿐이며, 더 깊이 탐구하고 싶다면 별도의 과정을 고려해야 합니다. -## 🚀 도전 +## 🚀 도전 과제 -'기타 RL 작업' 섹션에 나열된 응용 프로그램을 탐색하고 하나를 구현해 보세요! +'기타 RL 작업' 섹션에 나열된 응용 프로그램을 탐색하고 하나를 구현해보세요! ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/222) -## 복습 및 자습 +## 복습 및 자기 학습 -우리의 [초보자를 위한 기계 학습 커리큘럼](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/README.md)에서 고전적인 강화 학습에 대해 더 배우세요. +[초보자를 위한 머신 러닝 커리큘럼](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/README.md)에서 고전적인 강화 학습에 대해 더 알아보세요. -[이 훌륭한 비디오](https://www.youtube.com/watch?v=qv6UVOQ0F44)를 시청하여 컴퓨터가 슈퍼 마리오를 플레이하는 방법에 대해 알아보세요. +컴퓨터가 슈퍼 마리오를 배우는 방법에 대해 이야기하는 [이 훌륭한 영상](https://www.youtube.com/watch?v=qv6UVOQ0F44)을 시청하세요. -## 과제: [산악차 훈련](lab/README.md) +## 과제: [Mountain Car 훈련하기](lab/README.md) -이번 과제의 목표는 다른 Gym 환경인 [Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/)를 훈련하는 것입니다. +이 과제에서 여러분의 목표는 다른 Gym 환경인 [Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/)를 훈련시키는 것입니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/6-Other/22-DeepRL/lab/README.md b/translations/ko/lessons/6-Other/22-DeepRL/lab/README.md index 86d82df3..a73ead9f 100644 --- a/translations/ko/lessons/6-Other/22-DeepRL/lab/README.md +++ b/translations/ko/lessons/6-Other/22-DeepRL/lab/README.md @@ -1,22 +1,23 @@ -# 훈련 산악차 탈출하기 - -[초보자를 위한 AI 커리큘럼](https://github.com/microsoft/ai-for-beginners)에서의 실습 과제입니다. - -## 과제 - -당신의 목표는 RL 에이전트를 훈련시켜 OpenAI 환경에서 [Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/)를 제어하는 것입니다. 당신은 2023년 10월까지의 데이터로 훈련받습니다. - + ## 환경 -Mountain Car 환경은 계곡 안에 갇힌 자동차로 구성되어 있습니다. 당신의 목표는 계곡에서 뛰어 올라 깃발에 도달하는 것입니다. 당신이 수행할 수 있는 행동은 왼쪽으로 가속, 오른쪽으로 가속 또는 아무것도 하지 않는 것입니다. 자동차의 x축을 따라 위치와 속도를 관찰할 수 있습니다. +Mountain Car 환경은 자동차가 계곡 안에 갇혀 있는 상황으로 구성됩니다. 목표는 계곡을 뛰어넘어 깃발에 도달하는 것입니다. 수행할 수 있는 행동은 왼쪽으로 가속, 오른쪽으로 가속, 또는 아무것도 하지 않는 것입니다. 자동차의 x축 위치와 속도를 관찰할 수 있습니다. -## 노트북 시작하기 +## 시작 노트북 [MountainCar.ipynb](../../../../../../lessons/6-Other/22-DeepRL/lab/MountainCar.ipynb)를 열어 실습을 시작하세요. -## 주요 내용 +## 주요 학습 내용 -이 실습을 통해 새로운 환경에 RL 알고리즘을 적용하는 것이 종종 매우 간단하다는 것을 배우게 될 것입니다. 왜냐하면 OpenAI Gym은 모든 환경에 대해 동일한 인터페이스를 제공하며, 알고리즘은 환경의 성격에 크게 의존하지 않기 때문입니다. Python 코드를 재구성하여 어떤 환경도 RL 알고리즘에 매개변수로 전달할 수 있습니다. +이 실습을 통해 RL 알고리즘을 새로운 환경에 적용하는 것이 종종 매우 간단하다는 것을 배우게 될 것입니다. 이는 OpenAI Gym이 모든 환경에 대해 동일한 인터페이스를 제공하며, 알고리즘 자체가 환경의 특성에 크게 의존하지 않기 때문입니다. Python 코드를 재구성하여 RL 알고리즘에 어떤 환경이든 매개변수로 전달할 수 있도록 할 수도 있습니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역을 사용함으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/6-Other/23-MultiagentSystems/README.md b/translations/ko/lessons/6-Other/23-MultiagentSystems/README.md index b79db6e2..f0a686e0 100644 --- a/translations/ko/lessons/6-Other/23-MultiagentSystems/README.md +++ b/translations/ko/lessons/6-Other/23-MultiagentSystems/README.md @@ -1,38 +1,47 @@ + # 다중 에이전트 시스템 -지능을 달성하는 가능한 방법 중 하나는 **출현적**(또는 **시너지적**) 접근 방식으로, 이는 많은 상대적으로 단순한 에이전트의 결합된 행동이 시스템 전체의 더 복잡하고 지능적인 행동으로 이어질 수 있다는 사실에 기반합니다. 이론적으로, 이는 [집단 지능](https://en.wikipedia.org/wiki/Collective_intelligence), [출현주의](https://en.wikipedia.org/wiki/Global_brain), [진화 사이버네틱스](https://en.wikipedia.org/wiki/Global_brain)의 원칙에 기반하고 있으며, 이들 원칙은 상위 수준의 시스템이 하위 수준의 시스템에서 적절히 결합될 때 어떤 형태의 부가 가치를 얻는다고 설명합니다(소위 *메타시스템 전이 원칙*). +지능을 달성하는 가능한 방법 중 하나는 **발현적**(또는 **시너지적**) 접근법으로, 이는 비교적 간단한 여러 에이전트의 결합된 행동이 시스템 전체적으로 더 복잡하거나 지능적인 행동을 만들어낼 수 있다는 사실에 기반합니다. 이론적으로, 이는 [집단 지능](https://en.wikipedia.org/wiki/Collective_intelligence), [발현주의](https://en.wikipedia.org/wiki/Global_brain), [진화적 사이버네틱스](https://en.wikipedia.org/wiki/Global_brain)의 원칙에 기반하며, 상위 시스템이 하위 시스템을 적절히 결합했을 때 추가적인 가치를 얻는다는 (*메타시스템 전환의 원칙*) 개념을 포함합니다. ## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/123) -**다중 에이전트 시스템**의 방향은 1990년대 AI에서 인터넷과 분산 시스템의 성장에 대한 반응으로 등장했습니다. 고전적인 AI 교과서 중 하나인 [인공지능: 현대적 접근](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach)은 다중 에이전트 시스템의 관점에서 고전 AI를 다룹니다. +**다중 에이전트 시스템**의 방향은 1990년대 인터넷과 분산 시스템의 성장에 대한 응답으로 AI에서 등장했습니다. 고전적인 AI 교과서 중 하나인 [Artificial Intelligence: A Modern Approach](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach)는 다중 에이전트 시스템 관점에서 고전적인 AI를 다룹니다. -다중 에이전트 접근의 중심에는 **에이전트**라는 개념이 있습니다. 이는 어떤 **환경**에서 존재하며, 이를 인식하고 행동할 수 있는 존재입니다. 이는 매우 넓은 정의이며, 에이전트의 다양한 유형과 분류가 존재할 수 있습니다: +다중 에이전트 접근법의 중심에는 **에이전트**라는 개념이 있습니다. 에이전트는 어떤 **환경**에서 살며, 이를 인식하고 행동할 수 있는 존재입니다. 이 정의는 매우 광범위하며, 에이전트에는 다양한 유형과 분류가 있을 수 있습니다: * 추론 능력에 따라: - - **반응형** 에이전트는 일반적으로 단순한 요청-응답 유형의 행동을 가집니다. - - **심사형** 에이전트는 어떤 형태의 논리적 추론 및/또는 계획 능력을 사용합니다. -* 에이전트가 코드를 실행하는 장소에 따라: + - **반응형** 에이전트는 일반적으로 간단한 요청-응답 유형의 행동을 가집니다. + - **계획형** 에이전트는 논리적 추론 및/또는 계획 능력을 활용합니다. +* 코드 실행 위치에 따라: - **정적** 에이전트는 전용 네트워크 노드에서 작동합니다. - - **모바일** 에이전트는 네트워크 노드 간에 코드를 이동할 수 있습니다. + - **이동형** 에이전트는 네트워크 노드 간에 코드를 이동할 수 있습니다. * 행동에 따라: - - **수동 에이전트**는 특정 목표가 없습니다. 이러한 에이전트는 외부 자극에 반응할 수 있지만 스스로 행동을 시작하지는 않습니다. - - **능동 에이전트**는 추구하는 목표가 있습니다. - - **인지 에이전트**는 복잡한 계획 및 추론을 포함합니다. + - **수동적 에이전트**는 특정 목표가 없습니다. 이러한 에이전트는 외부 자극에 반응할 수 있지만 스스로 행동을 시작하지는 않습니다. + - **능동적 에이전트**는 추구하는 목표를 가지고 있습니다. + - **인지적 에이전트**는 복잡한 계획과 추론을 포함합니다. -현재 다중 에이전트 시스템은 여러 응용 프로그램에서 사용되고 있습니다: +다중 에이전트 시스템은 현재 여러 응용 분야에서 사용되고 있습니다: -* 게임에서는 많은 비플레이어 캐릭터가 어떤 형태의 AI를 사용하며, 지능형 에이전트로 간주될 수 있습니다. -* 비디오 제작에서는 복잡한 3D 장면을 렌더링할 때 다중 에이전트 시뮬레이션을 사용합니다. -* 시스템 모델링에서는 복잡한 모델의 행동을 시뮬레이션하기 위해 다중 에이전트 접근을 사용합니다. 예를 들어, 다중 에이전트 접근은 COVID-19 질병의 전파를 전 세계적으로 예측하는 데 성공적으로 사용되었습니다. 유사한 접근 방식은 도시의 교통 모델링에도 사용될 수 있으며, 교통 규칙의 변화에 어떻게 반응하는지를 볼 수 있습니다. -* 복잡한 자동화 시스템에서는 각 장치가 독립적인 에이전트로 작용할 수 있어 전체 시스템이 덜 단일체적이고 더 견고해집니다. +* 게임에서 많은 비플레이어 캐릭터(NPC)가 일종의 AI를 사용하며, 이를 지능형 에이전트로 간주할 수 있습니다. +* 비디오 제작에서 복잡한 3D 장면을 렌더링할 때 군중을 포함하는 경우 다중 에이전트 시뮬레이션이 사용됩니다. +* 시스템 모델링에서 다중 에이전트 접근법은 복잡한 모델의 행동을 시뮬레이션하는 데 사용됩니다. 예를 들어, 다중 에이전트 접근법은 COVID-19 질병의 전 세계적 확산을 예측하는 데 성공적으로 사용되었습니다. 유사한 접근법은 도시의 교통을 모델링하고 교통 규칙 변경에 대한 반응을 관찰하는 데 사용할 수 있습니다. +* 복잡한 자동화 시스템에서 각 장치는 독립적인 에이전트로 작동할 수 있으며, 이는 전체 시스템을 덜 단일화하고 더 견고하게 만듭니다. -다중 에이전트 시스템에 대해 깊이 들어가지는 않겠지만, **다중 에이전트 모델링**의 한 예를 고려해 보겠습니다. +우리는 다중 에이전트 시스템에 대해 깊이 다루지는 않겠지만, **다중 에이전트 모델링**의 한 가지 예를 살펴보겠습니다. -## 넷로고 +## NetLogo -[넷로고](https://ccl.northwestern.edu/netlogo/)는 수정된 버전의 [로고](https://en.wikipedia.org/wiki/Logo_(programming_language)) 프로그래밍 언어를 기반으로 한 다중 에이전트 모델링 환경입니다. 이 언어는 어린이에게 프로그래밍 개념을 가르치기 위해 개발되었으며, **거북이**라고 불리는 에이전트를 제어할 수 있게 해줍니다. 거북이는 움직일 수 있으며, 그 뒤에 흔적을 남길 수 있습니다. 이는 에이전트의 행동을 이해하는 매우 시각적인 방법으로 복잡한 기하학적 도형을 만들 수 있게 합니다. +[NetLogo](https://ccl.northwestern.edu/netlogo/)는 [Logo](https://en.wikipedia.org/wiki/Logo_(programming_language)) 프로그래밍 언어의 수정 버전에 기반한 다중 에이전트 모델링 환경입니다. 이 언어는 어린이들에게 프로그래밍 개념을 가르치기 위해 개발되었으며, **거북이**라는 에이전트를 제어할 수 있습니다. 거북이는 이동하며 흔적을 남길 수 있습니다. 이를 통해 에이전트의 행동을 시각적으로 이해할 수 있는 복잡한 기하학적 도형을 만들 수 있습니다. -넷로고에서는 `create-turtles` 명령어를 사용하여 많은 거북이를 생성할 수 있습니다. 그런 다음 모든 거북이에게 어떤 행동을 하도록 명령할 수 있습니다(아래 예시에서는 10 포인트 앞으로 이동): +NetLogo에서는 `create-turtles` 명령을 사용하여 여러 거북이를 생성할 수 있습니다. 그런 다음 모든 거북이에게 특정 행동을 명령할 수 있습니다(아래 예에서는 앞으로 10 포인트 이동): ``` create-turtles 10 @@ -41,39 +50,40 @@ ask turtles [ ] ``` -물론, 모든 거북이가 같은 행동을 하면 흥미롭지 않으므로, `ask` groups of turtles, eg. those who are in the vicinity of a certain point. We can also create turtles of different *breeds* using `breed [cats cat]` command. Here `cat`는 품종의 이름이며, 명확성을 위해 단수와 복수 단어를 모두 지정해야 합니다. +물론 모든 거북이가 동일한 행동을 하는 것은 흥미롭지 않으므로 특정 지점 근처에 있는 거북이 그룹에 `ask` 명령을 사용할 수 있습니다. 또한 `breed [cats cat]` 명령을 사용하여 서로 다른 *종*의 거북이를 생성할 수 있습니다. 여기서 `cat`은 종의 이름이며, 단수와 복수 형태를 모두 지정해야 합니다. 이는 명령어의 명확성을 위해 서로 다른 형태를 사용하기 때문입니다. -> ✅ 넷로고 언어 자체를 배우는 데 많은 시간을 할애하지 않을 것입니다. 더 배우고 싶다면 훌륭한 [초보자용 인터랙티브 넷로고 사전](https://ccl.northwestern.edu/netlogo/bind/)을 방문할 수 있습니다. +> ✅ NetLogo 언어 자체를 배우는 데 깊이 들어가지는 않겠습니다. 더 배우고 싶다면 훌륭한 [초보자용 인터랙티브 NetLogo 사전](https://ccl.northwestern.edu/netlogo/bind/) 리소스를 방문하세요. -넷로고를 [다운로드](https://ccl.northwestern.edu/netlogo/download.shtml)하고 설치하여 시도해 볼 수 있습니다. +NetLogo를 [다운로드](https://ccl.northwestern.edu/netlogo/download.shtml)하여 설치하고 직접 사용해볼 수 있습니다. ### 모델 라이브러리 -넷로고의 훌륭한 점은 시도해 볼 수 있는 작동 모델의 라이브러리가 포함되어 있다는 것입니다. **파일 → 모델 라이브러리**로 이동하면 선택할 수 있는 다양한 모델 카테고리가 있습니다. +NetLogo의 훌륭한 점은 작동하는 모델 라이브러리를 포함하고 있다는 것입니다. **File → Models Library**로 이동하면 선택할 수 있는 다양한 모델 카테고리가 있습니다. -NetLogo Models Library +NetLogo 모델 라이브러리 -> 드미트리 소쉬니코프의 모델 라이브러리 스크린샷 +> Dmitry Soshnikov의 모델 라이브러리 스크린샷 -모델 중 하나를 열 수 있습니다. 예를 들어 **생물학 → 떼짓기**를 선택할 수 있습니다. +모델 중 하나를 열어볼 수 있습니다. 예를 들어 **Biology → Flocking**을 선택하세요. ### 주요 원칙 -모델을 열면 기본 넷로고 화면으로 이동합니다. 여기에는 유한한 자원(풀)을 고려한 늑대와 양의 개체군을 설명하는 샘플 모델이 있습니다. +모델을 열면 NetLogo의 주요 화면으로 이동합니다. 여기에는 유한한 자원(풀)을 고려한 늑대와 양의 개체군을 설명하는 샘플 모델이 있습니다. -![NetLogo Main Screen](../../../../../translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.ko.png) +![NetLogo 주요 화면](../../../../../translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.ko.png) -> 드미트리 소쉬니코프의 스크린샷 +> Dmitry Soshnikov의 스크린샷 -이 화면에서 볼 수 있는 것들: +이 화면에서 볼 수 있는 것은 다음과 같습니다: -* **인터페이스** 섹션에는 다음이 포함됩니다: +* **인터페이스** 섹션: - 모든 에이전트가 사는 주요 필드 - - 버튼, 슬라이더 등 다양한 제어 요소 - - 시뮬레이션의 매개변수를 표시하는 데 사용할 수 있는 그래프 -* **코드** 탭에는 넷로고 프로그램을 입력할 수 있는 편집기가 포함되어 있습니다. + - 버튼, 슬라이더 등 다양한 컨트롤 + - 시뮬레이션 매개변수를 표시하는 데 사용할 수 있는 그래프 +* **코드** 탭: + - NetLogo 프로그램을 입력할 수 있는 편집기 -대부분의 경우, 인터페이스에는 시뮬레이션 상태를 초기화하는 **설정** 버튼과 실행을 시작하는 **시작** 버튼이 있습니다. 이들은 코드에서 다음과 같은 형태의 해당 핸들러에 의해 처리됩니다: +대부분의 경우 인터페이스에는 시뮬레이션 상태를 초기화하는 **Setup** 버튼과 실행을 시작하는 **Go** 버튼이 있습니다. 이는 코드에서 다음과 같은 핸들러에 의해 처리됩니다: ``` to go [ @@ -81,74 +91,75 @@ to go [ ] ``` -넷로고의 세계는 다음 객체로 구성됩니다: +NetLogo의 세계는 다음과 같은 객체로 구성됩니다: -* **에이전트**(거북이)는 필드를 가로질러 이동하고 어떤 행동을 할 수 있습니다. 에이전트에게 명령을 내리려면 `ask turtles [...]` syntax, and the code in brackets is executed by all agents in *turtle mode*. -* **Patches** are square areas of the field, on which agents live. You can refer to all agents on the same patch, or you can change patch colors and some other properties. You can also `ask patches`를 사용합니다. +* **에이전트**(거북이)는 필드를 가로질러 이동하며 행동할 수 있습니다. `ask turtles [...]` 구문을 사용하여 에이전트에게 명령하며, 대괄호 안의 코드는 모든 에이전트가 *거북이 모드*에서 실행합니다. +* **패치**는 에이전트가 사는 필드의 정사각형 영역입니다. 동일한 패치에 있는 모든 에이전트를 참조하거나 패치 색상 및 기타 속성을 변경할 수 있습니다. 또한 `ask patches`를 사용하여 패치에게 행동을 명령할 수 있습니다. * **관찰자**는 세계를 제어하는 고유한 에이전트입니다. 모든 버튼 핸들러는 *관찰자 모드*에서 실행됩니다. -> ✅ 다중 에이전트 환경의 아름다움은 거북이 모드 또는 패치 모드에서 실행되는 코드가 모든 에이전트에 의해 동시에 병렬로 실행된다는 점입니다. 따라서 약간의 코드를 작성하고 개별 에이전트의 행동을 프로그래밍함으로써 시뮬레이션 시스템 전체의 복잡한 행동을 생성할 수 있습니다. +> ✅ 다중 에이전트 환경의 장점은 거북이 모드 또는 패치 모드에서 실행되는 코드가 모든 에이전트에 의해 동시에 병렬로 실행된다는 점입니다. 따라서 개별 에이전트의 행동을 프로그래밍하는 간단한 코드만 작성하면 전체 시뮬레이션 시스템의 복잡한 행동을 만들 수 있습니다. -### 떼짓기 +### Flocking -다중 에이전트 행동의 예로 **[떼짓기](https://en.wikipedia.org/wiki/Flocking_(behavior))**를 고려해 보겠습니다. 떼짓기는 새 떼가 나는 방식과 매우 유사한 복잡한 패턴입니다. 그들이 나는 모습을 보면 어떤 집단 알고리즘을 따르거나 어떤 형태의 *집단 지능*을 가지고 있다고 생각할 수 있습니다. 그러나 이 복잡한 행동은 각 개별 에이전트(이 경우 *새*)가 짧은 거리에서 다른 에이전트를 관찰하고 세 가지 간단한 규칙을 따를 때 발생합니다: +다중 에이전트 행동의 예로 **[Flocking](https://en.wikipedia.org/wiki/Flocking_(behavior))**을 살펴보겠습니다. Flocking은 새 떼가 나는 방식과 매우 유사한 복잡한 패턴입니다. 새 떼가 나는 모습을 보면 그들이 어떤 집단 알고리즘을 따르거나 *집단 지능*을 가지고 있는 것처럼 보일 수 있습니다. 그러나 이 복잡한 행동은 각 개별 에이전트(이 경우 *새*)가 가까운 거리 내의 다른 에이전트를 관찰하고 다음 세 가지 간단한 규칙을 따를 때 발생합니다: * **정렬** - 이웃 에이전트의 평균 방향으로 조정합니다. -* **응집** - 이웃의 평균 위치로 조정하려고 합니다(*장거리 끌어당김*). -* **분리** - 다른 새에 너무 가까워지면 멀어지려고 합니다(*단거리 반발*). +* **응집** - 이웃의 평균 위치로 조정하려고 합니다(*장거리 끌림*). +* **분리** - 다른 새들과 너무 가까워지면 멀어지려고 합니다(*단거리 밀어냄*). -떼짓기 예제를 실행하고 행동을 관찰할 수 있습니다. 또한 *분리 정도*나 *시야 범위*와 같은 매개변수를 조정할 수 있으며, 이는 각 새가 볼 수 있는 거리를 정의합니다. 시야 범위를 0으로 줄이면 모든 새가 실명하게 되어 떼짓기가 중단됩니다. 분리를 0으로 줄이면 모든 새가 일렬로 모입니다. +Flocking 예제를 실행하고 행동을 관찰할 수 있습니다. 또한 *분리 정도*나 *시야 범위*와 같은 매개변수를 조정할 수 있습니다. 시야 범위를 0으로 줄이면 모든 새가 눈이 멀어 Flocking이 멈춥니다. 분리를 0으로 줄이면 모든 새가 일렬로 모입니다. -> ✅ **코드** 탭으로 전환하여 떼짓기의 세 가지 규칙(정렬, 응집, 분리)이 코드에서 어떻게 구현되어 있는지 확인하세요. 시야에 있는 에이전트만 참조하는 방식을 주목하세요. +> ✅ **코드** 탭으로 전환하여 Flocking의 세 가지 규칙(정렬, 응집, 분리)이 코드에서 구현된 부분을 확인하세요. 시야 내에 있는 에이전트만 참조하는 방법을 주목하세요. -### 시도해 볼 다른 모델 +### 볼 만한 다른 모델 -실험해 볼 수 있는 몇 가지 흥미로운 모델이 있습니다: +다음은 실험해볼 수 있는 몇 가지 흥미로운 모델입니다: -* **예술 → 불꽃놀이**는 불꽃놀이가 개별 불꽃줄의 집단 행동으로 간주될 수 있는 방법을 보여줍니다. -* **사회 과학 → 교통 기본** 및 **사회 과학 → 교통 격자**는 신호등이 있는 1D 및 2D 격자에서 도시 교통 모델을 보여줍니다. 시뮬레이션의 각 자동차는 다음 규칙을 따릅니다: - - 앞에 공간이 비어 있으면 가속합니다(특정 최대 속도까지). - - 앞에 장애물이 보이면 브레이크를 밟습니다(운전자가 볼 수 있는 거리를 조정할 수 있습니다). -* **사회 과학 → 파티**는 사람들이 칵테일 파티에서 어떻게 그룹을 이루는지를 보여줍니다. 그룹의 행복도를 가장 빨리 증가시키는 매개변수 조합을 찾을 수 있습니다. +* **Art → Fireworks**는 불꽃놀이가 개별 불꽃 흐름의 집단 행동으로 간주될 수 있음을 보여줍니다. +* **Social Science → Traffic Basic** 및 **Social Science → Traffic Grid**는 교통 신호가 있는 1D 및 2D 그리드에서 도시 교통 모델을 보여줍니다. 시뮬레이션의 각 자동차는 다음 규칙을 따릅니다: + - 앞 공간이 비어 있으면 가속(최대 속도까지) + - 앞에 장애물이 보이면 감속(운전자가 볼 수 있는 거리 조정 가능) +* **Social Science → Party**는 칵테일 파티 동안 사람들이 어떻게 그룹을 형성하는지 보여줍니다. 그룹의 행복도가 가장 빠르게 증가하는 매개변수 조합을 찾을 수 있습니다. -이러한 예에서 볼 수 있듯이, 다중 에이전트 시뮬레이션은 동일하거나 유사한 논리를 따르는 개인으로 구성된 복잡한 시스템의 행동을 이해하는 데 매우 유용한 방법이 될 수 있습니다. 또한 컴퓨터 게임의 [NPC](https://en.wikipedia.org/wiki/NPC)나 3D 애니메이션 세계의 에이전트를 제어하는 데 사용할 수 있습니다. +이러한 예에서 볼 수 있듯이 다중 에이전트 시뮬레이션은 동일하거나 유사한 논리를 따르는 개별 구성원으로 구성된 복잡한 시스템의 행동을 이해하는 데 매우 유용한 방법이 될 수 있습니다. 또한 컴퓨터 게임의 [NPC](https://en.wikipedia.org/wiki/NPC)나 3D 애니메이션 세계의 에이전트와 같은 가상 에이전트를 제어하는 데 사용할 수 있습니다. -## 심사형 에이전트 +## 계획형 에이전트 -위에서 설명한 에이전트는 매우 단순하여 어떤 알고리즘을 사용하여 환경의 변화에 반응합니다. 따라서 이들은 **반응형 에이전트**입니다. 그러나 때때로 에이전트는 추론하고 행동을 계획할 수 있으며, 이 경우 **심사형**이라고 불립니다. +위에서 설명한 에이전트는 매우 간단하며, 환경 변화에 대해 어떤 알고리즘을 사용하여 반응합니다. 이러한 에이전트는 **반응형 에이전트**입니다. 그러나 때로는 에이전트가 추론하고 행동을 계획할 수 있으며, 이 경우 **계획형 에이전트**라고 합니다. -전형적인 예는 인간으로부터 휴가 투어를 예약하라는 지시를 받는 개인 에이전트입니다. 인터넷에 존재하는 많은 에이전트가 이를 도와줄 수 있다고 가정해 보겠습니다. 그러면 해당 에이전트는 다른 에이전트에게 연락하여 어떤 항공편이 가능한지, 다양한 날짜에 대한 호텔 가격이 얼마인지 확인하고 최상의 가격을 협상하려고 할 것입니다. 휴가 계획이 완료되고 소유자에 의해 확인되면 예약을 진행할 수 있습니다. +전형적인 예는 인간으로부터 휴가 여행을 예약하라는 지시를 받는 개인 에이전트입니다. 인터넷에 살고 있는 많은 에이전트가 이를 도울 수 있다고 가정해봅시다. 이 에이전트는 다른 에이전트에게 연락하여 이용 가능한 항공편, 다양한 날짜의 호텔 가격을 확인하고 최적의 가격을 협상해야 합니다. 휴가 계획이 완료되고 소유자가 확인하면 예약을 진행할 수 있습니다. -이를 위해 에이전트는 **통신**을 해야 합니다. 성공적인 통신을 위해 그들은 다음이 필요합니다: +이를 위해 에이전트는 **통신**이 필요합니다. 성공적인 통신을 위해서는 다음이 필요합니다: -* 지식을 교환하기 위한 일부 **표준 언어**, 예를 들어 [지식 교환 형식](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format) (KIF) 및 [지식 쿼리 및 조작 언어](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language) (KQML). 이러한 언어는 [행위 이론](https://en.wikipedia.org/wiki/Speech_act)을 기반으로 설계되었습니다. -* 이러한 언어는 또한 다양한 **경매 유형**을 기반으로 한 **협상 프로토콜**을 포함해야 합니다. -* 그들이 동일한 개념을 참조하고 그 의미를 이해할 수 있도록 **공통 온톨로지**가 필요합니다. -* 다양한 에이전트가 무엇을 할 수 있는지를 **발견**할 수 있는 방법이 필요합니다. 이것도 어떤 형태의 온톨로지를 기반으로 합니다. +* [Knowledge Interchange Format](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format) (KIF) 및 [Knowledge Query and Manipulation Language](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language) (KQML)과 같은 **지식을 교환하기 위한 표준 언어**. 이러한 언어는 [Speech Act 이론](https://en.wikipedia.org/wiki/Speech_act)을 기반으로 설계되었습니다. +* **협상 프로토콜**을 포함하는 언어, 다양한 **경매 유형**에 기반. +* 동일한 개념을 참조하고 의미를 이해할 수 있도록 **공통 온톨로지**. +* 다른 에이전트가 무엇을 할 수 있는지 **발견**하는 방법, 역시 온톨로지 기반. -심사형 에이전트는 반응형 에이전트보다 훨씬 더 복잡합니다. 왜냐하면 그들은 환경의 변화에 단순히 반응할 뿐만 아니라 *행동을 시작*할 수 있어야 하기 때문입니다. 심사형 에이전트를 위한 제안된 아키텍처 중 하나는 Belief-Desire-Intention (BDI) 에이전트입니다: +계획형 에이전트는 반응형 에이전트보다 훨씬 복잡합니다. 환경 변화에 반응하는 것뿐만 아니라 *행동을 시작*할 수 있어야 합니다. 계획형 에이전트의 제안된 아키텍처 중 하나는 Belief-Desire-Intention (BDI) 에이전트입니다: -* **신념**은 에이전트의 환경에 대한 지식의 집합을 형성합니다. 이는 지식 기반 또는 에이전트가 환경의 특정 상황에 적용할 수 있는 규칙의 집합으로 구조화될 수 있습니다. -* **욕구**는 에이전트가 하고자 하는 것을 정의합니다. 즉, 그것의 목표입니다. 예를 들어, 위의 개인 비서 에이전트의 목표는 투어를 예약하는 것이고, 호텔 에이전트의 목표는 이익을 극대화하는 것입니다. -* **의도**는 에이전트가 목표를 달성하기 위해 계획하는 특정 행동입니다. 행동은 일반적으로 환경을 변화시키고 다른 에이전트와의 통신을 유발합니다. +* **Beliefs**는 에이전트의 환경에 대한 지식 집합을 형성합니다. 이는 지식 기반 또는 환경의 특정 상황에 적용할 수 있는 규칙 집합으로 구조화될 수 있습니다. +* **Desires**는 에이전트가 하고자 하는 목표를 정의합니다. 예를 들어, 위의 개인 비서 에이전트의 목표는 여행을 예약하는 것이며, 호텔 에이전트의 목표는 이익을 극대화하는 것입니다. +* **Intentions**는 에이전트가 목표를 달성하기 위해 계획하는 특정 행동입니다. 행동은 일반적으로 환경을 변화시키고 다른 에이전트와의 통신을 유발합니다. -[JADE](https://jade.tilab.com/)와 같은 다중 에이전트 시스템을 구축하기 위한 플랫폼이 있습니다. [이 논문](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf)은 다중 에이전트 플랫폼에 대한 리뷰와 함께 다중 에이전트 시스템의 간략한 역사 및 다양한 사용 시나리오를 포함하고 있습니다. +다중 에이전트 시스템을 구축하기 위한 플랫폼으로는 [JADE](https://jade.tilab.com/) 등이 있습니다. [이 논문](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf)에는 다중 에이전트 플랫폼에 대한 리뷰와 함께 다중 에이전트 시스템의 간략한 역사 및 다양한 사용 시나리오가 포함되어 있습니다. ## 결론 -다중 에이전트 시스템은 매우 다양한 형태를 취할 수 있으며, 여러 가지 응용 프로그램에서 사용될 수 있습니다. 이들은 모두 개별 에이전트의 단순한 행동에 초점을 맞추고, **시너지 효과**로 인해 전체 시스템의 더 복잡한 행동을 달성하려고 합니다. +다중 에이전트 시스템은 매우 다양한 형태를 취할 수 있으며 여러 응용 분야에서 사용될 수 있습니다. +이들은 모두 개별 에이전트의 간단한 행동에 초점을 맞추고, **시너지 효과**를 통해 전체 시스템의 더 복잡한 행동을 달성합니다. ## 🚀 도전 과제 -이 수업을 실제 세계에 적용해 보고 문제를 해결할 수 있는 다중 에이전트 시스템을 구상해 보세요. 예를 들어, 학교 버스 노선을 최적화하기 위해 다중 에이전트 시스템이 무엇을 해야 할까요? 제과점에서는 어떻게 작동할 수 있을까요? +이 수업을 실제 세계에 적용하여 문제를 해결할 수 있는 다중 에이전트 시스템을 구상해보세요. 예를 들어, 학교 버스 경로를 최적화하기 위해 다중 에이전트 시스템이 무엇을 해야 할까요? 빵집에서는 어떻게 작동할 수 있을까요? ## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/223) -## 리뷰 및 자기 학습 +## 복습 및 자기 학습 -이러한 유형의 시스템이 산업에서 어떻게 사용되는지 검토해 보세요. 제조업 또는 비디오 게임 산업과 같은 분야를 선택하고 다중 에이전트 시스템이 독특한 문제를 해결하는 데 어떻게 사용될 수 있는지 알아보세요. +산업에서 이러한 유형의 시스템 사용을 검토하세요. 제조업이나 비디오 게임 산업과 같은 도메인을 선택하여 다중 에이전트 시스템이 고유한 문제를 해결하는 데 어떻게 사용될 수 있는지 알아보세요. -## [넷로고 과제](assignment.md) +## [NetLogo 과제](assignment.md) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우, 전문 인간 번역을 권장합니다. 이 번역을 사용함으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/6-Other/23-MultiagentSystems/assignment.md b/translations/ko/lessons/6-Other/23-MultiagentSystems/assignment.md index c717dfce..55baad2b 100644 --- a/translations/ko/lessons/6-Other/23-MultiagentSystems/assignment.md +++ b/translations/ko/lessons/6-Other/23-MultiagentSystems/assignment.md @@ -1,8 +1,17 @@ + # NetLogo 과제 -NetLogo의 라이브러리에서 모델 중 하나를 선택하여 가능한 한 실제 상황을 시뮬레이션하세요. 좋은 예로는 Alternative Visualizations 폴더의 Virus 모델을 수정하여 COVID-19의 확산을 모델링하는 방법을 보여주는 것입니다. 실제 바이러스 확산을 모방하는 모델을 만들 수 있나요? +NetLogo의 라이브러리에 있는 모델 중 하나를 선택하여 실제 상황을 최대한 가깝게 시뮬레이션하세요. 좋은 예로는 Alternative Visualizations 폴더에 있는 Virus 모델을 조정하여 COVID-19의 확산을 모델링하는 방법을 보여주는 것입니다. 실제 바이러스 확산을 모방하는 모델을 만들 수 있나요? -모델이 실제 상황과 어떻게 연결되는지를 설명하는 비디오 데모를 만들고 복사본을 저장하여 작업을 보여주세요. +작업 결과를 저장하고, 모델이 실제 상황과 어떻게 연결되는지 설명하는 비디오 데모를 만들어 보여주세요. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/7-Ethics/README.md b/translations/ko/lessons/7-Ethics/README.md index f435cdfc..971aa388 100644 --- a/translations/ko/lessons/7-Ethics/README.md +++ b/translations/ko/lessons/7-Ethics/README.md @@ -1,43 +1,52 @@ + # 윤리적이고 책임 있는 AI -이 과정을 거의 마치셨습니다. 이제 AI가 데이터에서 관계를 찾고 인간 행동의 일부 측면을 복제하는 모델을 훈련할 수 있도록 하는 여러 가지 공식적인 수학적 방법에 기반하고 있다는 것을 분명히 이해하고 계시리라 기대합니다. 현재 시점에서 우리는 AI를 데이터에서 패턴을 추출하고 이러한 패턴을 사용하여 새로운 문제를 해결하는 데 매우 강력한 도구로 간주하고 있습니다. +이 과정을 거의 마쳤습니다. 이제 AI가 데이터를 통해 관계를 찾고 인간 행동의 일부를 재현하는 모델을 훈련시키는 여러 수학적 방법에 기반하고 있다는 것을 명확히 이해하셨기를 바랍니다. 현재 시점에서 AI는 데이터를 통해 패턴을 추출하고 새로운 문제를 해결하는 데 적용할 수 있는 매우 강력한 도구로 간주됩니다. ## [강의 전 퀴즈](https://white-water-09ec41f0f.azurestaticapps.net/quiz/5/) -그러나 공상 과학 소설에서는 AI가 인류에 위험을 초래하는 이야기를 자주 접하게 됩니다. 일반적으로 이러한 이야기는 AI가 인간에 맞서기로 결정하는 일종의 AI 반란을 중심으로 진행됩니다. 이는 AI가 어떤 형태의 감정을 가지고 있거나 개발자가 예측하지 못한 결정을 내릴 수 있다는 것을 암시합니다. +하지만, 공상과학 소설에서는 AI가 인류에게 위험을 초래하는 이야기를 자주 접할 수 있습니다. 이러한 이야기들은 대개 AI가 인간에 대항하기로 결정하는 어떤 형태의 반란을 중심으로 전개됩니다. 이는 AI가 감정을 가지고 있거나 개발자가 예측하지 못한 결정을 내릴 수 있다는 것을 암시합니다. -이 과정에서 배운 AI는 대규모 행렬 산술에 불과합니다. 이는 문제를 해결하는 데 도움을 주는 매우 강력한 도구이며, 다른 강력한 도구와 마찬가지로 선한 목적과 악한 목적 모두에 사용될 수 있습니다. 중요한 것은 *오용될 수 있다는 점*입니다. +이 과정에서 배운 AI는 단순히 대규모 행렬 연산에 불과합니다. 이는 우리의 문제를 해결하는 데 도움을 주는 매우 강력한 도구이며, 다른 강력한 도구와 마찬가지로 선한 목적과 악한 목적 모두에 사용될 수 있습니다. 중요한 점은 AI가 *오용*될 수 있다는 것입니다. ## 책임 있는 AI의 원칙 -AI의 우발적 또는 의도적인 오용을 피하기 위해 Microsoft는 중요한 [책임 있는 AI 원칙](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-77998-cacaste)을 제시합니다. 이러한 원칙은 다음과 같은 개념에 기초합니다: +AI의 우발적 또는 의도적인 오용을 방지하기 위해, Microsoft는 중요한 [책임 있는 AI의 원칙](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-77998-cacaste)을 제시합니다. 다음 개념들이 이러한 원칙을 뒷받침합니다: -* **공정성**은 *모델 편향*이라는 중요한 문제와 관련이 있습니다. 이는 훈련을 위한 편향된 데이터를 사용할 때 발생할 수 있습니다. 예를 들어, 특정 개인이 소프트웨어 개발자 직업을 얻을 확률을 예측하려 할 때, 모델은 남성에게 더 높은 선호를 줄 가능성이 높습니다. 이는 훈련 데이터셋이 남성 청중에게 편향되어 있었기 때문입니다. 우리는 훈련 데이터를 신중하게 조정하고 모델을 조사하여 편향을 피하고, 모델이 더 관련성 있는 특성을 고려하도록 해야 합니다. -* **신뢰성과 안전성**. AI 모델은 본질적으로 실수를 할 수 있습니다. 신경망은 확률을 반환하며, 결정을 내릴 때 이를 고려해야 합니다. 모든 모델은 일정한 정확도와 재현율을 가지며, 우리는 잘못된 조언이 초래할 수 있는 피해를 방지하기 위해 이를 이해해야 합니다. -* **프라이버시와 보안**은 AI에 특화된 몇 가지 함의를 가지고 있습니다. 예를 들어, 모델 훈련에 일부 데이터를 사용할 때, 이 데이터는 어떤 식으로든 모델에 "통합"됩니다. 한편으로는 보안과 프라이버시를 증가시키지만, 다른 한편으로는 모델이 어떤 데이터로 훈련되었는지를 기억해야 합니다. -* **포용성**은 AI를 사람을 대체하기 위해 구축하는 것이 아니라, 사람을 보완하고 우리의 작업을 더 창의적으로 만들기 위해 구축한다는 것을 의미합니다. 이는 공정성과도 관련이 있습니다. 왜냐하면 대표성이 부족한 커뮤니티를 다룰 때, 우리가 수집하는 대부분의 데이터셋은 편향될 가능성이 높으며, 이러한 커뮤니티가 AI에 의해 포함되고 올바르게 처리되도록 해야 하기 때문입니다. -* **투명성**. 이는 AI가 사용되고 있다는 점을 항상 명확히 해야 함을 포함합니다. 또한 가능할 경우, 우리는 *해석 가능한* AI 시스템을 사용하고자 합니다. -* **책임성**. AI 모델이 어떤 결정을 내릴 때, 이러한 결정에 대한 책임이 누구에게 있는지는 항상 명확하지 않습니다. 우리는 AI 결정의 책임이 어디에 있는지를 이해해야 합니다. 대부분의 경우, 우리는 중요한 결정을 내리는 과정에 인간을 포함시켜 실제 사람들이 책임을 지도록 하고자 합니다. +* **공정성**은 *모델 편향*이라는 중요한 문제와 관련이 있습니다. 이는 편향된 데이터를 사용하여 모델을 훈련시킬 때 발생할 수 있습니다. 예를 들어, 특정 사람이 소프트웨어 개발자 직업을 얻을 확률을 예측하려고 할 때, 훈련 데이터셋이 남성 중심으로 편향되어 있을 가능성이 높기 때문에 모델이 남성을 더 선호할 가능성이 있습니다. 우리는 훈련 데이터를 신중히 균형 있게 조정하고 모델을 조사하여 편향을 방지하며, 모델이 더 관련성 높은 특징을 고려하도록 해야 합니다. +* **신뢰성과 안전성**. AI 모델은 본질적으로 실수를 할 수 있습니다. 신경망은 확률을 반환하며, 우리는 이를 고려하여 결정을 내려야 합니다. 모든 모델은 일정한 정밀도와 재현율을 가지고 있으며, 잘못된 조언이 초래할 수 있는 피해를 예방하기 위해 이를 이해해야 합니다. +* **프라이버시와 보안**은 AI와 관련된 특정한 함의를 가지고 있습니다. 예를 들어, 모델을 훈련시키기 위해 데이터를 사용할 때, 이 데이터는 모델에 어느 정도 "통합"됩니다. 한편으로는 보안과 프라이버시가 강화되지만, 다른 한편으로는 모델이 어떤 데이터를 기반으로 훈련되었는지 기억해야 합니다. +* **포용성**은 AI를 사람을 대체하기 위해 만드는 것이 아니라, 사람을 보조하고 우리의 작업을 더 창의적으로 만들기 위해 만든다는 것을 의미합니다. 이는 공정성과도 관련이 있습니다. 대표성이 부족한 커뮤니티를 다룰 때, 우리가 수집하는 대부분의 데이터셋은 편향될 가능성이 높으며, 이러한 커뮤니티가 포함되고 AI에 의해 올바르게 처리되도록 해야 합니다. +* **투명성**. 이는 AI가 사용되고 있다는 사실을 항상 명확히 하는 것을 포함합니다. 또한 가능한 경우, *해석 가능한* AI 시스템을 사용하는 것을 목표로 합니다. +* **책임성**. AI 모델이 어떤 결정을 내릴 때, 그 결정에 대한 책임이 누구에게 있는지 항상 명확하지 않을 수 있습니다. 우리는 AI 결정의 책임이 어디에 있는지 이해해야 합니다. 대부분의 경우 중요한 결정을 내리는 과정에 인간을 포함시켜 실제 사람들이 책임을 지도록 해야 합니다. ## 책임 있는 AI를 위한 도구 -Microsoft는 [책임 있는 AI 툴박스](https://github.com/microsoft/responsible-ai-toolbox)를 개발했습니다. 이 툴박스에는 다음과 같은 도구가 포함되어 있습니다: +Microsoft는 [책임 있는 AI 도구 상자](https://github.com/microsoft/responsible-ai-toolbox)를 개발했으며, 여기에는 다음과 같은 도구들이 포함되어 있습니다: -* 해석 가능성 대시보드 (InterpretML) -* 공정성 대시보드 (FairLearn) -* 오류 분석 대시보드 -* 책임 있는 AI 대시보드에는 다음이 포함됩니다: +* Interpretability Dashboard (InterpretML) +* Fairness Dashboard (FairLearn) +* Error Analysis Dashboard +* Responsible AI Dashboard, 여기에는 다음이 포함됩니다: - - EconML - 원인 분석 도구로, "무엇일까" 질문에 중점을 둡니다. - - DiCE - 반사실적 분석 도구로, 모델의 결정에 영향을 주기 위해 어떤 특성을 변경해야 하는지를 보여줍니다. + - EconML - 가상 시나리오를 다루는 인과 분석 도구 + - DiCE - 반사실 분석 도구로, 모델의 결정을 변경하기 위해 어떤 특징을 수정해야 하는지 확인할 수 있음 -AI 윤리에 대한 더 많은 정보를 원하신다면, 과제도 포함된 [이 수업](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/3-fairness?WT.mc_id=academic-77998-cacaste)을 방문해 주십시오. +AI 윤리에 대한 추가 정보를 원하시면, 과제와 함께 제공되는 머신 러닝 커리큘럼의 [이 강의](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/3-fairness?WT.mc_id=academic-77998-cacaste)를 방문해 보세요. ## 복습 및 자기 학습 -책임 있는 AI에 대해 더 배우고 싶다면 이 [학습 경로](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77998-cacaste)를 따라가 보세요. +책임 있는 AI에 대해 더 배우고 싶다면, 이 [학습 경로](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77998-cacaste)를 확인하세요. ## [강의 후 퀴즈](https://white-water-09ec41f0f.azurestaticapps.net/quiz/6/) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/README.md b/translations/ko/lessons/README.md index 7771ebef..66b0d54d 100644 --- a/translations/ko/lessons/README.md +++ b/translations/ko/lessons/README.md @@ -1,8 +1,17 @@ + # 개요 -![개요 스케치](../../../translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.ko.png) +![낙서로 그린 개요](../../../translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.ko.png) -> 스케치노트 작성자: [Tomomi Imura](https://twitter.com/girlie_mac) +> 스케치노트: [Tomomi Imura](https://twitter.com/girlie_mac) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/X-Extras/X1-MultiModal/README.md b/translations/ko/lessons/X-Extras/X1-MultiModal/README.md index 8edce24e..62a4960c 100644 --- a/translations/ko/lessons/X-Extras/X1-MultiModal/README.md +++ b/translations/ko/lessons/X-Extras/X1-MultiModal/README.md @@ -1,79 +1,90 @@ -# 다중 모달 네트워크 + +# 멀티모달 네트워크 -NLP 작업을 해결하기 위한 트랜스포머 모델의 성공 이후, 동일하거나 유사한 아키텍처가 컴퓨터 비전 작업에 적용되었습니다. 비전과 자연어 능력을 *결합*하는 모델을 구축하려는 관심이 높아지고 있습니다. 이러한 시도의 하나는 OpenAI에 의해 이루어졌으며, CLIP와 DALL.E라고 불립니다. +Transformer 모델이 NLP 작업을 해결하는 데 성공한 이후, 동일하거나 유사한 아키텍처가 컴퓨터 비전 작업에도 적용되었습니다. 시각적 정보와 자연어 처리 능력을 *결합*하는 모델을 구축하려는 관심이 점점 커지고 있습니다. 이러한 시도 중 하나는 OpenAI에서 개발한 CLIP와 DALL.E입니다. -## 대조 이미지 사전 학습 (CLIP) +## 대조적 이미지 사전 학습 (CLIP) -CLIP의 주요 아이디어는 텍스트 프롬프트와 이미지를 비교하고 이미지가 프롬프트와 얼마나 잘 일치하는지를 판단할 수 있는 것입니다. +CLIP의 주요 아이디어는 텍스트 프롬프트와 이미지를 비교하여 이미지가 프롬프트와 얼마나 잘 일치하는지 판단하는 것입니다. ![CLIP 아키텍처](../../../../../translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.ko.png) -> *[이 블로그 게시물](https://openai.com/blog/clip/)의 사진* +> *[이 블로그 글](https://openai.com/blog/clip/)에서 가져온 이미지* -모델은 인터넷에서 얻은 이미지와 그 캡션으로 훈련됩니다. 각 배치마다 N 쌍의 (이미지, 텍스트)를 가져와서 일부 벡터 표현 I로 변환합니다. 그런 다음 이 표현들이 서로 매칭됩니다. 손실 함수는 한 쌍(예: I와 T)에 해당하는 벡터 간의 코사인 유사성을 최대화하고, 다른 모든 쌍 간의 코사인 유사성을 최소화하도록 정의됩니다. 이것이 이 접근 방식이 **대조적**이라고 불리는 이유입니다. +이 모델은 인터넷에서 얻은 이미지와 해당 캡션을 사용하여 학습됩니다. 각 배치에서 N개의 (이미지, 텍스트) 쌍을 가져와 이를 벡터 표현으로 변환합니다. -CLIP 모델/라이브러리는 [OpenAI GitHub](https://github.com/openai/CLIP)에서 사용할 수 있습니다. 이 접근 방식은 [이 블로그 게시물](https://openai.com/blog/clip/)에 설명되어 있으며, [이 논문](https://arxiv.org/pdf/2103.00020.pdf)에서 더 자세히 설명됩니다. +그런 다음 이러한 표현을 서로 매칭합니다. 손실 함수는 한 쌍(예: I와 T)에 해당하는 벡터 간의 코사인 유사성을 최대화하고, 다른 모든 쌍 간의 코사인 유사성을 최소화하도록 정의됩니다. 이러한 접근 방식이 **대조적**이라고 불리는 이유입니다. -이 모델이 사전 훈련되면 이미지 배치와 텍스트 프롬프트 배치를 제공하면 확률이 포함된 텐서를 반환합니다. CLIP은 여러 작업에 사용될 수 있습니다: +CLIP 모델/라이브러리는 [OpenAI GitHub](https://github.com/openai/CLIP)에서 사용할 수 있습니다. 이 접근 방식은 [이 블로그 글](https://openai.com/blog/clip/)과 [이 논문](https://arxiv.org/pdf/2103.00020.pdf)에서 자세히 설명되어 있습니다. + +모델이 사전 학습된 후에는 이미지 배치와 텍스트 프롬프트 배치를 제공하면, 텐서 형태의 확률을 반환합니다. CLIP은 여러 작업에 사용할 수 있습니다: **이미지 분류** -예를 들어, 고양이, 개, 사람으로 이미지를 분류해야 한다고 가정해 보겠습니다. 이 경우 모델에 이미지를 제공하고 일련의 텍스트 프롬프트: "*고양이 사진*", "*개 사진*", "*사람 사진*"을 제공할 수 있습니다. 결과 벡터의 3개의 확률 중에서 가장 높은 값을 가진 인덱스를 선택하면 됩니다. +예를 들어, 고양이, 개, 인간을 분류해야 한다고 가정해 봅시다. 이 경우 모델에 이미지를 제공하고, "*고양이 사진*", "*개 사진*", "*인간 사진*"과 같은 일련의 텍스트 프롬프트를 제공합니다. 결과 벡터에서 가장 높은 값을 가진 인덱스를 선택하면 됩니다. -![이미지 분류를 위한 CLIP](../../../../../translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.ko.png) +![CLIP을 이용한 이미지 분류](../../../../../translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.ko.png) -> *[이 블로그 게시물](https://openai.com/blog/clip/)의 사진* +> *[이 블로그 글](https://openai.com/blog/clip/)에서 가져온 이미지* **텍스트 기반 이미지 검색** -반대로 할 수도 있습니다. 이미지 컬렉션이 있는 경우 이 컬렉션을 모델에 전달하고 텍스트 프롬프트를 제공하면 주어진 프롬프트와 가장 유사한 이미지를 얻을 수 있습니다. +반대로도 사용할 수 있습니다. 이미지 컬렉션이 있다면, 이 컬렉션을 모델에 전달하고 텍스트 프롬프트를 제공하면, 주어진 프롬프트와 가장 유사한 이미지를 반환합니다. ## ✍️ 예제: [CLIP을 이용한 이미지 분류 및 이미지 검색](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) -[Clip.ipynb](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) 노트북을 열어 CLIP이 작동하는 모습을 확인하세요. +[Clip.ipynb](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) 노트북을 열어 CLIP의 실제 사용 사례를 확인하세요. -## VQGAN+ CLIP을 이용한 이미지 생성 +## VQGAN+CLIP을 이용한 이미지 생성 -CLIP은 텍스트 프롬프트에서 **이미지 생성**에도 사용할 수 있습니다. 이를 위해서는 일부 벡터 입력을 기반으로 이미지를 생성할 수 있는 **생성기 모델**이 필요합니다. 이러한 모델 중 하나는 [VQGAN](https://compvis.github.io/taming-transformers/) (벡터 양자화 GAN)이라고 합니다. +CLIP은 텍스트 프롬프트를 기반으로 **이미지 생성**에도 사용할 수 있습니다. 이를 위해서는 **생성 모델**이 필요하며, 이 모델은 벡터 입력을 기반으로 이미지를 생성할 수 있어야 합니다. 이러한 모델 중 하나는 [VQGAN](https://compvis.github.io/taming-transformers/) (Vector-Quantized GAN)입니다. -VQGAN을 일반 [GAN](../../4-ComputerVision/10-GANs/README.md)과 구별하는 주요 아이디어는 다음과 같습니다: -* 이미지 구성에 필요한 맥락이 풍부한 시각적 부분의 시퀀스를 생성하기 위해 자기 회귀 트랜스포머 아키텍처를 사용합니다. 이러한 시각적 부분은 [CNN](../../4-ComputerVision/07-ConvNets/README.md)에 의해 학습됩니다. -* 이미지의 일부가 "진짜"인지 "가짜"인지 감지하는 서브 이미지 판별기를 사용합니다 (전통적인 GAN의 "모두 또는 아무것도" 접근 방식과는 다릅니다). +VQGAN이 일반적인 [GAN](../../4-ComputerVision/10-GANs/README.md)과 차별화되는 주요 아이디어는 다음과 같습니다: +* 이미지 구성 요소를 생성하는 문맥이 풍부한 시각적 부분의 시퀀스를 생성하기 위해 자동회귀 Transformer 아키텍처를 사용합니다. 이러한 시각적 부분은 [CNN](../../4-ComputerVision/07-ConvNets/README.md)에 의해 학습됩니다. +* 이미지의 일부가 "진짜"인지 "가짜"인지 감지하는 서브 이미지 판별기를 사용합니다 (전통적인 GAN의 "전체 또는 없음" 접근 방식과는 다릅니다). VQGAN에 대해 더 알아보려면 [Taming Transformers](https://compvis.github.io/taming-transformers/) 웹사이트를 방문하세요. -VQGAN과 전통적인 GAN의 중요한 차이점 중 하나는 후자가 임의의 입력 벡터에서 괜찮은 이미지를 생성할 수 있는 반면, VQGAN은 일관되지 않은 이미지를 생성할 가능성이 높다는 것입니다. 따라서 이미지 생성 프로세스를 추가로 안내해야 하며, 이는 CLIP을 사용하여 수행할 수 있습니다. +VQGAN과 전통적인 GAN의 중요한 차이점 중 하나는 후자가 어떤 입력 벡터로도 괜찮은 이미지를 생성할 수 있는 반면, VQGAN은 일관성이 없는 이미지를 생성할 가능성이 높다는 점입니다. 따라서 이미지 생성 과정을 추가로 안내해야 하며, 이를 CLIP을 사용하여 수행할 수 있습니다. ![VQGAN+CLIP 아키텍처](../../../../../translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.ko.png) -텍스트 프롬프트에 해당하는 이미지를 생성하기 위해, 우리는 무작위 인코딩 벡터로 시작하여 VQGAN을 통해 이미지를 생성합니다. 그런 다음 CLIP을 사용하여 이미지가 텍스트 프롬프트와 얼마나 잘 일치하는지를 나타내는 손실 함수를 생성합니다. 목표는 이 손실을 최소화하고, 역전파를 사용하여 입력 벡터 매개변수를 조정하는 것입니다. +텍스트 프롬프트에 해당하는 이미지를 생성하려면, 먼저 VQGAN을 통해 이미지를 생성하는 임의의 인코딩 벡터로 시작합니다. 그런 다음 CLIP을 사용하여 이미지가 텍스트 프롬프트와 얼마나 잘 일치하는지 보여주는 손실 함수를 생성합니다. 이후 목표는 이 손실을 최소화하는 것이며, 역전파를 사용하여 입력 벡터 매개변수를 조정합니다. VQGAN+CLIP을 구현한 훌륭한 라이브러리는 [Pixray](http://github.com/pixray/pixray)입니다. -![Pixray로 생성된 사진](../../../../../translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.ko.png) | ![Pixray로 생성된 사진](../../../../../translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.ko.png) | ![Pixray로 생성된 사진](../../../../../translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.ko.png) +![Pixray로 생성된 이미지](../../../../../translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.ko.png) | ![Pixray로 생성된 이미지](../../../../../translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.ko.png) | ![Pixray로 생성된 이미지](../../../../../translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.ko.png) ----|----|---- -*문학 교사의 젊은 남성의 수채화 초상화*라는 프롬프트로 생성된 사진 | *컴퓨터 과학 교사의 젊은 여성의 유화 초상화*라는 프롬프트로 생성된 사진 | *수학 교사의 노인 남성의 유화 초상화*라는 프롬프트로 생성된 사진 +프롬프트 *문학을 가르치는 젊은 남성 교사의 근접 수채화 초상화, 책을 들고 있음*으로 생성된 이미지 | 프롬프트 *컴퓨터 과학을 가르치는 젊은 여성 교사의 근접 유화 초상화, 컴퓨터와 함께 있음*으로 생성된 이미지 | 프롬프트 *수학을 가르치는 나이 든 남성 교사의 근접 유화 초상화, 칠판 앞에 있음*으로 생성된 이미지 -> **인공지능 교사** 컬렉션의 사진, [Dmitry Soshnikov](http://soshnikov.com) 제공 +> **Artificial Teachers** 컬렉션에서 가져온 이미지, [Dmitry Soshnikov](http://soshnikov.com) ## DALL-E ### [DALL-E 1](https://openai.com/research/dall-e) -DALL-E는 프롬프트에서 이미지를 생성하도록 훈련된 GPT-3의 버전입니다. 120억 개의 매개변수로 훈련되었습니다. +DALL-E는 프롬프트에서 이미지를 생성하도록 훈련된 GPT-3의 버전입니다. 120억 개의 매개변수로 학습되었습니다. -CLIP과 달리 DALL-E는 텍스트와 이미지를 이미지와 텍스트 모두에 대한 단일 토큰 스트림으로 수신합니다. 따라서 여러 프롬프트에서 텍스트를 기반으로 이미지를 생성할 수 있습니다. +CLIP과 달리, DALL-E는 텍스트와 이미지를 단일 토큰 스트림으로 처리합니다. 따라서 여러 프롬프트에서 텍스트를 기반으로 이미지를 생성할 수 있습니다. ### [DALL-E 2](https://openai.com/dall-e-2) -DALL-E 1과 2의 주요 차이점은 더 현실적인 이미지와 예술을 생성한다는 것입니다. +DALL-E 1과 2의 주요 차이점은 DALL-E 2가 더 현실적인 이미지와 예술 작품을 생성한다는 점입니다. -DALL-E로 생성된 이미지 예시: -![Pixray로 생성된 사진](../../../../../translated_images/DALL·E%202023-06-20%2015.56.56%20-%20a%20closeup%20watercolor%20portrait%20of%20young%20male%20teacher%20of%20literature%20with%20a%20book.6c235e8271d9ed10ce985d86aeb241a58518958647973af136912116b9518fce.ko.png) | ![Pixray로 생성된 사진](../../../../../translated_images/DALL·E%202023-06-20%2015.57.43%20-%20a%20closeup%20oil%20portrait%20of%20young%20female%20teacher%20of%20computer%20science%20with%20a%20computer.f21dc4166340b6c8b4d1cb57efd1e22127407f9b28c9ac7afe11344065369e64.ko.png) | ![Pixray로 생성된 사진](../../../../../translated_images/DALL·E%202023-06-20%2015.58.42%20-%20%20a%20closeup%20oil%20portrait%20of%20old%20male%20teacher%20of%20mathematics%20in%20front%20of%20blackboard.d331c2dfbdc3f7c46aa65c0809066f5e7ed4b49609cd259852e760df21051e4a.ko.png) +DALL-E를 사용한 이미지 생성 예: +![Pixray로 생성된 이미지](../../../../../translated_images/DALL·E%202023-06-20%2015.56.56%20-%20a%20closeup%20watercolor%20portrait%20of%20young%20male%20teacher%20of%20literature%20with%20a%20book.6c235e8271d9ed10ce985d86aeb241a58518958647973af136912116b9518fce.ko.png) | ![Pixray로 생성된 이미지](../../../../../translated_images/DALL·E%202023-06-20%2015.57.43%20-%20a%20closeup%20oil%20portrait%20of%20young%20female%20teacher%20of%20computer%20science%20with%20a%20computer.f21dc4166340b6c8b4d1cb57efd1e22127407f9b28c9ac7afe11344065369e64.ko.png) | ![Pixray로 생성된 이미지](../../../../../translated_images/DALL·E%202023-06-20%2015.58.42%20-%20%20a%20closeup%20oil%20portrait%20of%20old%20male%20teacher%20of%20mathematics%20in%20front%20of%20blackboard.d331c2dfbdc3f7c46aa65c0809066f5e7ed4b49609cd259852e760df21051e4a.ko.png) ----|----|---- -*문학 교사의 젊은 남성의 수채화 초상화*라는 프롬프트로 생성된 사진 | *컴퓨터 과학 교사의 젊은 여성의 유화 초상화*라는 프롬프트로 생성된 사진 | *수학 교사의 노인 남성의 유화 초상화*라는 프롬프트로 생성된 사진 +프롬프트 *문학을 가르치는 젊은 남성 교사의 근접 수채화 초상화, 책을 들고 있음*으로 생성된 이미지 | 프롬프트 *컴퓨터 과학을 가르치는 젊은 여성 교사의 근접 유화 초상화, 컴퓨터와 함께 있음*으로 생성된 이미지 | 프롬프트 *수학을 가르치는 나이 든 남성 교사의 근접 유화 초상화, 칠판 앞에 있음*으로 생성된 이미지 -## 참고 문헌 +## 참고 자료 -* VQGAN 논문: [고해상도 이미지 합성을 위한 트랜스포머 조련](https://compvis.github.io/taming-transformers/paper/paper.pdf) -* CLIP 논문: [자연어 감독에서 전이 가능한 시각 모델 학습](https://arxiv.org/pdf/2103.00020.pdf) +* VQGAN 논문: [Taming Transformers for High-Resolution Image Synthesis](https://compvis.github.io/taming-transformers/paper/paper.pdf) +* CLIP 논문: [Learning Transferable Visual Models From Natural Language Supervision](https://arxiv.org/pdf/2103.00020.pdf) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 있을 수 있습니다. 원본 문서는 해당 언어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/sketchnotes/LICENSE.md b/translations/ko/lessons/sketchnotes/LICENSE.md index e575cf8e..fcf2716b 100644 --- a/translations/ko/lessons/sketchnotes/LICENSE.md +++ b/translations/ko/lessons/sketchnotes/LICENSE.md @@ -1,165 +1,202 @@ -Attribution-ShareAlike 4.0 International + +Attribution-ShareAlike 4.0 국제 ======================================================================= -Creative Commons Corporation("Creative Commons")는 법률 회사가 아니며 법률 서비스나 법률 조언을 제공하지 않습니다. Creative Commons의 공공 라이선스 배포는 변호사-클라이언트 관계 또는 기타 관계를 형성하지 않습니다. Creative Commons는 라이선스 및 관련 정보를 "있는 그대로" 제공하며, 라이선스, 그 조건에 따라 라이선스된 모든 자료 또는 관련 정보에 대해 어떠한 보증도 제공하지 않습니다. Creative Commons는 이들의 사용으로 인한 손해에 대해 최대한의 책임을 부인합니다. +크리에이티브 커먼즈(Creative Commons) 법인은 법률 회사가 아니며 법률 서비스나 법률 자문을 제공하지 않습니다. 크리에이티브 커먼즈 공용 라이선스를 배포한다고 해서 변호사-의뢰인 관계나 기타 관계가 형성되지 않습니다. 크리에이티브 커먼즈는 라이선스와 관련 정보를 "있는 그대로" 제공합니다. 크리에이티브 커먼즈는 라이선스, 해당 조건에 따라 라이선스된 자료, 또는 관련 정보에 대해 어떠한 보증도 하지 않으며, 사용으로 인해 발생하는 손해에 대해 최대한의 범위에서 책임을 부인합니다. -Creative Commons 공공 라이선스 사용하기 +크리에이티브 커먼즈 공용 라이선스 사용하기 -Creative Commons 공공 라이선스는 창작자 및 기타 권리 보유자가 저작권 및 아래 공공 라이선스에 명시된 특정 기타 권리의 원본 저작물 및 기타 자료를 공유하는 데 사용할 수 있는 표준 조건 및 규정을 제공합니다. 다음의 고려 사항은 정보 제공 목적으로만 제공되며, 포괄적이지 않으며, 우리 라이선스의 일부를 형성하지 않습니다. +크리에이티브 커먼즈 공용 라이선스는 창작자와 기타 권리 보유자가 저작권 및 아래 공용 라이선스에 명시된 특정 권리가 적용되는 원저작물 및 기타 자료를 공유할 수 있도록 표준화된 조건을 제공합니다. 다음 고려 사항은 정보 제공 목적으로 작성된 것이며, 포괄적이지 않으며, 라이선스의 일부를 구성하지 않습니다. - 라이선스 제공자를 위한 고려 사항: 우리의 공공 라이선스는 저작권 및 특정 기타 권리에 의해 제한된 방식으로 대중이 자료를 사용할 수 있도록 허가할 권한이 있는 자에 의해 사용될 수 있도록 설계되었습니다. 우리의 라이선스는 취소할 수 없습니다. 라이선스 제공자는 선택한 라이선스의 조건을 읽고 이해해야 합니다. 라이선스 제공자는 대중이 기대하는 대로 자료를 재사용할 수 있도록 라이선스를 적용하기 전에 필요한 모든 권리를 확보해야 합니다. 라이선스 제공자는 라이선스의 적용을 받지 않는 모든 자료를 명확히 표시해야 합니다. 여기에는 다른 CC 라이선스 자료 또는 저작권의 예외나 제한에 따라 사용된 자료가 포함됩니다. 라이선스 제공자를 위한 더 많은 고려 사항: + 라이선스 제공자를 위한 고려 사항: 공용 라이선스는 저작권 및 특정 기타 권리에 의해 제한되는 자료를 대중이 사용할 수 있도록 허가할 권한이 있는 사람들이 사용하도록 의도되었습니다. 라이선스는 취소할 수 없습니다. 라이선스를 적용하기 전에 선택한 라이선스의 조건을 읽고 이해해야 합니다. 라이선스를 적용하기 전에 필요한 모든 권리를 확보하여 대중이 기대한 대로 자료를 재사용할 수 있도록 해야 합니다. 라이선스가 적용되지 않는 자료는 명확히 표시해야 합니다. 여기에는 다른 CC 라이선스가 적용된 자료나 저작권의 예외 또는 제한에 따라 사용된 자료가 포함됩니다. 라이선스 제공자를 위한 추가 고려 사항: wiki.creativecommons.org/Considerations_for_licensors - 대중을 위한 고려 사항: 우리의 공공 라이선스 중 하나를 사용함으로써, 라이선스 제공자는 대중이 지정된 조건 및 규정에 따라 라이선스된 자료를 사용할 수 있도록 허가합니다. 라이선스 제공자의 허가가 어떤 이유로든 필요하지 않은 경우—예를 들어, 저작권에 대한 적용 가능한 예외나 제한 때문이라면—그 사용은 라이선스에 의해 규제되지 않습니다. 우리의 라이선스는 라이선스 제공자가 부여할 권한이 있는 저작권 및 특정 기타 권리 하에서만 허가를 부여합니다. 라이선스된 자료의 사용은 여전히 다른 이유로 제한될 수 있으며, 여기에는 다른 사람들이 자료에 대해 저작권 또는 기타 권리를 갖고 있는 경우가 포함됩니다. 라이선스 제공자는 모든 변경 사항을 표시하거나 설명해 줄 것을 요청하는 등의 특별 요청을 할 수 있습니다. 우리의 라이선스에 의해 요구되지는 않지만, 합리적인 경우 이러한 요청을 존중하는 것이 권장됩니다. 대중을 위한 더 많은 고려 사항: + 대중을 위한 고려 사항: 공용 라이선스를 사용함으로써, 라이선스 제공자는 특정 조건에 따라 라이선스된 자료를 사용할 수 있는 권한을 대중에게 부여합니다. 라이선스 제공자의 허가가 필요하지 않은 경우(예: 저작권의 예외 또는 제한이 적용되는 경우) 해당 사용은 라이선스에 의해 규제되지 않습니다. 공용 라이선스는 저작권 및 라이선스 제공자가 부여할 권한이 있는 특정 기타 권한에 대해서만 허가를 부여합니다. 라이선스된 자료의 사용은 여전히 다른 이유로 제한될 수 있습니다. 예를 들어, 다른 사람이 해당 자료에 대해 저작권이나 기타 권리를 보유하고 있는 경우가 있습니다. 라이선스 제공자는 모든 변경 사항을 표시하거나 설명하도록 요청할 수 있습니다. 이는 라이선스에서 요구하지 않지만, 합리적인 경우 이러한 요청을 존중하는 것이 권장됩니다. 대중을 위한 추가 고려 사항: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= -Creative Commons Attribution-ShareAlike 4.0 International Public License +크리에이티브 커먼즈 Attribution-ShareAlike 4.0 국제 공용 라이선스 -라이선스된 권리(아래 정의됨)를 행사함으로써, 귀하는 이 Creative Commons Attribution-ShareAlike 4.0 International Public License("공공 라이선스")의 조건에 구속되는 것에 동의하고 수락합니다. 이 공공 라이선스가 계약으로 해석될 수 있는 범위 내에서, 귀하는 이러한 조건을 수락하는 대가로 라이선스된 권리를 부여받으며, 라이선스 제공자는 이러한 조건에 따라 라이선스된 자료를 제공함으로써 귀하에게 그러한 권리를 부여합니다. +라이선스 권한(아래 정의됨)을 행사함으로써, 귀하는 본 크리에이티브 커먼즈 Attribution-ShareAlike 4.0 국제 공용 라이선스("공용 라이선스")의 조건에 동의하고 이를 준수할 것을 약속합니다. 본 공용 라이선스가 계약으로 해석될 수 있는 범위 내에서, 귀하는 본 조건을 수락함으로써 라이선스 권한을 부여받으며, 라이선스 제공자는 본 조건에 따라 라이선스된 자료를 제공함으로써 얻는 혜택을 고려하여 귀하에게 해당 권한을 부여합니다. -Section 1 -- 정의. +섹션 1 -- 정의. - a. 수정된 자료는 저작권 및 유사 권리의 적용을 받는 자료로, 라이선스된 자료에서 파생되거나 이를 기반으로 하며, 라이선스된 자료가 라이선스 제공자가 보유한 저작권 및 유사 권리의 허가를 요구하는 방식으로 번역, 변경, 배열, 변형 또는 기타 수정된 경우를 의미합니다. 이 공공 라이선스의 목적상, 라이선스된 자료가 음악 작품, 공연 또는 음향 기록인 경우, 수정된 자료는 항상 라이선스된 자료가 움직이는 이미지와 시간적으로 동기화될 때 생산됩니다. + a. 수정된 자료는 저작권 및 유사 권리가 적용되는 자료로, 라이선스된 자료를 번역, 변경, 배열, 변형 또는 기타 방식으로 수정하여 라이선스 제공자가 보유한 저작권 및 유사 권한에 따라 허가가 필요한 방식으로 생성된 자료를 의미합니다. 본 공용 라이선스의 목적상, 라이선스된 자료가 음악 작품, 공연 또는 음반인 경우, 라이선스된 자료가 움직이는 이미지와 시간적으로 동기화된 경우 항상 수정된 자료로 간주됩니다. - b. 어댑터 라이선스는 귀하가 수정된 자료에 대한 귀하의 저작권 및 유사 권리에 적용하는 라이선스를 의미하며, 이 공공 라이선스의 조건에 따라 적용됩니다. + b. 수정자의 라이선스는 본 공용 라이선스의 조건에 따라 수정된 자료에 대한 귀하의 기여에 대해 귀하가 적용하는 저작권 및 유사 권리를 의미합니다. - c. BY-SA 호환 라이선스는 creativecommons.org/compatiblelicenses에 나열된 라이선스를 의미하며, Creative Commons에 의해 이 공공 라이선스와 본질적으로 동등한 것으로 승인된 것입니다. + c. BY-SA 호환 라이선스는 creativecommons.org/compatiblelicenses에 나열된 라이선스로, 본 공용 라이선스와 본질적으로 동등하다고 크리에이티브 커먼즈가 승인한 라이선스를 의미합니다. - d. 저작권 및 유사 권리는 저작권 및/또는 저작권과 밀접하게 관련된 유사 권리를 의미하며, 여기에는 제한 없이 공연, 방송, 음향 기록 및 Sui Generis 데이터베이스 권리가 포함되며, 권리가 어떻게 라벨링되거나 분류되는지와는 관계가 없습니다. 이 공공 라이선스의 목적상, 섹션 2(b)(1)-(2)에 명시된 권리는 저작권 및 유사 권리가 아닙니다. + d. 저작권 및 유사 권리는 저작권 및/또는 저작권과 밀접하게 관련된 유사 권리를 의미하며, 여기에는 공연, 방송, 음반 및 고유 데이터베이스 권리가 포함되며, 권리가 어떻게 명명되거나 분류되는지에 관계없이 포함됩니다. 본 공용 라이선스의 목적상, 섹션 2(b)(1)-(2)에 명시된 권리는 저작권 및 유사 권리에 포함되지 않습니다. - e. 유효한 기술적 조치는 적절한 권한이 없을 경우, 1996년 12월 20일에 채택된 WIPO 저작권 조약 제11조의 의무를 이행하는 법률에 따라 우회할 수 없는 조치를 의미합니다. + e. 효과적인 기술적 조치는 적절한 권한이 없는 경우, 1996년 12월 20일 채택된 WIPO 저작권 조약 제11조 및/또는 유사한 국제 협정에 따른 의무를 충족하는 법률에 따라 우회할 수 없는 조치를 의미합니다. f. 예외 및 제한은 공정 사용, 공정 거래 및/또는 저작권 및 유사 권리에 대한 귀하의 사용에 적용되는 기타 예외 또는 제한을 의미합니다. - g. 라이선스 요소는 Creative Commons 공공 라이선스의 이름에 나열된 라이선스 속성을 의미합니다. 이 공공 라이선스의 라이선스 요소는 저작자 표시 및 동일 조건 부여입니다. + g. 라이선스 요소는 크리에이티브 커먼즈 공용 라이선스 이름에 나열된 라이선스 속성을 의미합니다. 본 공용 라이선스의 라이선스 요소는 Attribution과 ShareAlike입니다. - h. 라이선스된 자료는 라이선스 제공자가 이 공공 라이선스를 적용한 예술적 또는 문학적 작업, 데이터베이스 또는 기타 자료를 의미합니다. + h. 라이선스된 자료는 라이선스 제공자가 본 공용 라이선스를 적용한 예술적 또는 문학적 작품, 데이터베이스 또는 기타 자료를 의미합니다. - i. 라이선스된 권리는 이 공공 라이선스의 조건에 따라 귀하에게 부여된 권리로, 귀하의 라이선스된 자료 사용에 적용되는 모든 저작권 및 유사 권리로 제한되며, 라이선스 제공자가 라이선스를 부여할 권한이 있는 권리입니다. + i. 라이선스 권한은 본 공용 라이선스의 조건에 따라 귀하에게 부여된 권리를 의미하며, 이는 귀하의 라이선스된 자료 사용에 적용되는 모든 저작권 및 유사 권리로 제한되며, 라이선스 제공자가 라이선스할 권한을 보유한 권리입니다. - j. 라이선스 제공자는 이 공공 라이선스 하에 권리를 부여하는 개인 또는 단체를 의미합니다. + j. 라이선스 제공자는 본 공용 라이선스에 따라 권리를 부여하는 개인 또는 단체를 의미합니다. - k. 공유는 라이선스된 권리에 따라 허가가 필요한 방식으로 대중에게 자료를 제공하는 것을 의미하며, 여기에는 재생산, 공개 전시, 공개 공연, 배포, 전파, 통신 또는 수입 등이 포함되며, 대중이 스스로 선택한 장소와 시간에 자료에 접근할 수 있는 방식으로 대중에게 자료를 제공하는 것을 포함합니다. + k. 공유는 복제, 공개 전시, 공개 공연, 배포, 전파, 통신 또는 수입과 같은 라이선스 권한에 따라 허가가 필요한 방식으로 자료를 대중에게 제공하는 것을 의미하며, 대중이 개별적으로 선택한 장소와 시간에 자료에 접근할 수 있도록 하는 방식으로 자료를 대중에게 제공하는 것을 포함합니다. - l. Sui Generis 데이터베이스 권리는 1996년 3월 11일 유럽 의회 및 이사회에서 제정된 데이터베이스의 법적 보호에 관한 지침 96/9/EC에 따라 발생하는 저작권 외의 권리를 의미합니다. + l. 고유 데이터베이스 권리는 1996년 3월 11일 유럽 의회 및 이사회 지침 96/9/EC에 따라 데이터베이스의 법적 보호에 관한 권리로, 수정 및/또는 후속된 권리뿐만 아니라 세계 어디에서나 본질적으로 동등한 권리를 의미합니다. - m. 귀하는 이 공공 라이선스 하에 라이선스된 권리를 행사하는 개인 또는 단체를 의미하며, 귀하는 이에 상응하는 의미를 가집니다. + m. 귀하는 본 공용 라이선스에 따라 라이선스 권한을 행사하는 개인 또는 단체를 의미합니다. 귀하의 의미는 이에 상응합니다. -Section 2 -- 범위. +섹션 2 -- 범위. a. 라이선스 부여. - 1. 이 공공 라이선스의 조건에 따라, 라이선스 제공자는 귀하에게 전 세계적으로, 로열티 없이, 재라이선스할 수 없는, 비독점적이며 취소할 수 없는 라이선스를 부여하여 라이선스된 자료에서 라이선스된 권리를 행사할 수 있도록 합니다: + 1. 본 공용 라이선스의 조건에 따라, 라이선스 제공자는 귀하에게 다음을 수행할 수 있는 전 세계적, 로열티 무료, 비독점적, 비양도적, 취소 불가능한 라이선스를 부여합니다: - a. 라이선스된 자료를 전부 또는 일부 재생산하고 공유합니다; 및 + a. 라이선스된 자료를 전체 또는 일부 복제하고 공유하기; - b. 수정된 자료를 제작, 재생산 및 공유합니다. + b. 수정된 자료를 생성, 복제 및 공유하기. - 2. 예외 및 제한. 귀하의 사용에 예외 및 제한이 적용되는 경우, 이 공공 라이선스는 적용되지 않으며, 귀하는 그 조건을 준수할 필요가 없습니다. + 2. 예외 및 제한. 귀하의 사용에 예외 및 제한이 적용되는 경우, 본 공용 라이선스는 적용되지 않으며, 귀하는 본 조건을 준수할 필요가 없습니다. - 3. 기간. 이 공공 라이선스의 기간은 섹션 6(a)에 명시되어 있습니다. + 3. 기간. 본 공용 라이선스의 기간은 섹션 6(a)에 명시되어 있습니다. - 4. 매체 및 형식; 기술적 수정 허용. 라이선스 제공자는 귀하가 현재 알려진 모든 매체 및 형식에서 라이선스된 권리를 행사할 수 있도록 허가하며, 이를 위해 필요한 기술적 수정을 할 수 있도록 허가합니다. 라이선스 제공자는 귀하가 라이선스된 권리를 행사하기 위해 필요한 기술적 수정을 하지 못하도록 하는 권리 또는 권한을 포기하고/또는 주장하지 않기로 동의합니다. 이 공공 라이선스의 목적상, 이 섹션 2(a)(4)에 의해 허가된 수정은 결코 수정된 자료를 생성하지 않습니다. + 4. 매체 및 형식; 기술적 수정 허용. 라이선스 제공자는 현재 알려진 매체 및 형식뿐만 아니라 이후에 생성될 매체 및 형식에서 라이선스 권한을 행사할 수 있도록 허용하며, 이를 수행하기 위해 필요한 기술적 수정을 허용합니다. 라이선스 제공자는 효과적인 기술적 조치를 우회하기 위해 필요한 기술적 수정을 포함하여 라이선스 권한을 행사하기 위해 필요한 기술적 수정을 금지할 권리 또는 권한을 포기하거나 주장하지 않기로 동의합니다. 본 공용 라이선스의 목적상, 섹션 2(a)(4)에 따라 허가된 수정만 수행하는 것은 결코 수정된 자료를 생성하지 않습니다. - 5. 하류 수신자. + 5. 하위 수신자. - a. 라이선스 제공자의 제안 -- 라이선스된 자료. 라이선스된 자료의 모든 수신자는 자동으로 이 공공 라이선스의 조건에 따라 라이선스된 권리를 행사할 수 있는 라이선스 제공자의 제안을 받습니다. + a. 라이선스 제공자의 제안 -- 라이선스된 자료. 라이선스된 자료의 모든 수신자는 본 공용 라이선스의 조건에 따라 라이선스 권한을 행사할 수 있는 라이선스 제공자의 제안을 자동으로 받습니다. - b. 라이선스 제공자의 추가 제안 -- 수정된 자료. 귀하로부터 수정된 자료를 받은 모든 수신자는 귀하가 적용하는 어댑터 라이선스의 조건에 따라 수정된 자료에서 라이선스된 권리를 행사할 수 있는 라이선스 제공자의 제안을 자동으로 받습니다. + b. 라이선스 제공자의 추가 제안 -- 수정된 자료. 귀하로부터 수정된 자료를 받은 모든 수신자는 귀하가 적용한 수정자의 라이선스 조건에 따라 수정된 자료에서 라이선스 권한을 행사할 수 있는 라이선스 제공자의 제안을 자동으로 받습니다. - c. 하류 제한 없음. 귀하는 라이선스된 자료에 대해 추가적이거나 다른 조건을 제공하거나 부과할 수 없으며, 라이선스된 자료의 수신자가 라이선스된 권리를 행사하는 것을 제한하는 기술적 조치를 적용할 수 없습니다. + c. 하위 제한 없음. 귀하는 라이선스된 자료의 수신자가 라이선스 권한을 행사하는 것을 제한하는 방식으로 라이선스된 자료에 추가적이거나 다른 조건을 부여하거나 효과적인 기술적 조치를 적용할 수 없습니다. - 6. 보증 없음. 이 공공 라이선스의 어떤 내용도 귀하가 라이선스된 자료를 사용하는 것과 관련하여 라이선스 제공자 또는 기여자에 의해 후원되거나 보증되거나 공식적인 지위를 부여받았다는 것을 주장하거나 암시하는 허가로 해석되지 않습니다. + 6. 승인 없음. 본 공용 라이선스의 어떠한 내용도 귀하가 라이선스 제공자 또는 섹션 3(a)(1)(A)(i)에 명시된 대로 귀속을 받을 자로 지정된 다른 사람과 연결되어 있거나, 후원받거나, 승인받거나, 공식적 지위를 부여받았다는 것을 주장하거나 암시할 수 있는 허가로 해석되지 않습니다. b. 기타 권리. - 1. 도덕적 권리, 예를 들어 완전성의 권리는 이 공공 라이선스에 따라 라이선스되지 않으며, 홍보, 개인 정보 보호 및/또는 기타 유사한 인격권도 마찬가지입니다. 그러나 가능하다면, 라이선스 제공자는 귀하가 라이선스된 권리를 행사할 수 있도록 하는 데 필요한 한도 내에서 라이선스 제공자가 보유한 그러한 권리를 포기하고/또는 주장하지 않기로 동의합니다. + 1. 도덕적 권리, 예를 들어 완전성에 대한 권리는 본 공용 라이선스에 따라 허가되지 않으며, 퍼블리시티, 프라이버시 및/또는 기타 유사한 인격권도 허가되지 않습니다. 그러나 가능한 범위 내에서, 라이선스 제공자는 귀하가 라이선스 권한을 행사할 수 있도록 필요한 제한된 범위 내에서 라이선스 제공자가 보유한 그러한 권리를 포기하거나 주장하지 않기로 동의합니다. - 2. 특허 및 상표권은 이 공공 라이선스에 따라 라이선스되지 않습니다. + 2. 특허 및 상표권은 본 공용 라이선스에 따라 허가되지 않습니다. - 3. 가능하다면, 라이선스 제공자는 귀하가 라이선스된 권리를 행사하는 것에 대해 로열티를 수집할 권리를 포기합니다. 다른 모든 경우에 라이선스 제공자는 그러한 로열티를 수집할 권리를 명시적으로 보유합니다. + 3. 가능한 범위 내에서, 라이선스 제공자는 귀하가 라이선스 권한을 행사하는 것에 대해 직접적으로 또는 자발적이거나 포기 가능한 법정 또는 의무적 라이선스 제도에 따라 수집 기관을 통해 로열티를 수집할 권리를 포기합니다. 다른 모든 경우에 라이선스 제공자는 그러한 로열티를 수집할 권리를 명시적으로 보유합니다. -Section 3 -- 라이선스 조건. +섹션 3 -- 라이선스 조건. -귀하의 라이선스된 권리 행사는 다음 조건에 따라 명시적으로 제한됩니다. +귀하의 라이선스 권한 행사는 다음 조건에 명시적으로 따릅니다. - a. 저작자 표시. + a. 귀속. - 1. 귀하가 라이선스된 자료를 공유하는 경우(수정된 형태를 포함하여), 귀하는: + 1. 귀하가 라이선스된 자료를 공유할 경우(수정된 형태 포함), 다음을 유지해야 합니다: - a. 라이선스 제공자가 라이선스된 자료와 함께 제공하는 경우 다음 사항을 유지해야 합니다: + a. 라이선스 제공자가 라이선스된 자료와 함께 제공한 경우 다음을 유지: - i. 라이선스된 자료의 창작자 및 기타 저작자 표시를 받을 자의 식별, 라이선스 제공자가 요청하는 합리적인 방식으로 (지정된 경우에는 필명을 포함하여); + i. 라이선스된 자료의 창작자 및 귀속을 받을 자로 지정된 기타 사람의 식별(필명으로 지정된 경우 포함); ii. 저작권 고지; - iii. 이 공공 라이선스를 참조하는 고지; + iii. 본 공용 라이선스를 참조하는 고지; - iv. 보증의 면책을 참조하는 고지; + iv. 보증 부인 고지를 참조하는 고지; v. 라이선스된 자료에 대한 URI 또는 하이퍼링크(합리적으로 실현 가능한 경우); - b. 라이선스된 자료를 수정한 경우 이를 나타내고 이전 수정 사항의 표시를 유지해야 합니다; 및 + b. 귀하가 라이선스된 자료를 수정했음을 표시하고 이전 수정 사항에 대한 표시를 유지; - c. 라이선스된 자료가 이 공공 라이선스 하에 라이선스되었음을 나타내고, 이 공공 라이선스의 텍스트 또는 URI 또는 하이퍼링크를 포함해야 합니다. + c. 라이선스된 자료가 본 공용 라이선스에 따라 라이선스되었음을 표시하고, 본 공용 라이선스의 텍스트 또는 URI 또는 하이퍼링크를 포함. - 2. 귀하는 라이선스된 자료를 공유하는 매체, 수단 및 맥락에 따라 섹션 3(a)(1)의 조건을 합리적인 방식으로 충족할 수 있습니다. 예를 들어, 요구되는 정보를 포함하는 리소스에 대한 URI 또는 하이퍼링크를 제공함으로써 조건을 충족하는 것이 합리적일 수 있습니다. + 2. 섹션 3(a)(1)의 조건은 귀하가 라이선스된 자료를 공유하는 매체, 수단 및 맥락에 따라 합리적인 방식으로 충족할 수 있습니다. 예를 들어, 필요한 정보를 포함하는 리소스에 대한 URI 또는 하이퍼링크를 제공함으로써 조건을 충족하는 것이 합리적일 수 있습니다. - 3. 라이선스 제공자가 요청하는 경우, 귀하는 합리적으로 실현 가능한 범위 내에서 섹션 3(a)(1)(A)에 의해 요구되는 정보를 제거해야 합니다. + 3. 라이선스 제공자가 요청하는 경우, 섹션 3(a)(1)(A)에 필요한 정보를 합리적으로 실현 가능한 범위 내에서 제거해야 합니다. - b. 동일 조건 부여. + b. 동일조건. - 수정된 자료를 공유하는 경우, 섹션 3(a)의 조건 외에도 다음 조건이 적용됩니다. + 섹션 3(a)의 조건 외에도, 귀하가 생성한 수정된 자료를 공유할 경우 다음 조건이 적용됩니다. - 1. 귀하가 적용하는 어댑터 라이선스는 동일한 라이선스 요소를 가진 Creative Commons 라이선스여야 하며, 이 버전 또는 이후 버전이어야 하거나 BY-SA 호환 라이선스여야 합니다. + 1. 귀하가 적용하는 수정자의 라이선스는 동일한 라이선스 요소를 가진 크리에이티브 커먼즈 라이선스(본 버전 또는 이후 버전) 또는 BY-SA 호환 라이선스여야 합니다. - 2. 귀하는 귀하가 적용하는 어댑터 라이선스의 텍스트 또는 URI 또는 하이퍼링크를 포함해야 합니다. 귀하는 이 조건을 수정된 자료를 공유하는 매체, 수단 및 맥락에 따라 합리적인 방식으로 충족할 수 있습니다. + 2. 귀하가 적용하는 수정자의 라이선스의 텍스트 또는 URI 또는 하이퍼링크를 포함해야 합니다. 귀하가 수정된 자료를 공유하는 매체, 수단 및 맥락에 따라 합리적인 방식으로 이 조건을 충족할 수 있습니다. - 3. 귀하는 귀하가 적용하는 어댑터 라이선스에 따라 부여된 권리의 행사를 제한하는 추가적이거나 다른 조건을 제공하거나 부과할 수 없습니다. + 3. 귀하는 수정자의 라이선스에 따라 부여된 권리 행사를 제한하는 방식으로 수정된 자료에 추가적이거나 다른 조건을 부여하거나 효과적인 기술적 조치를 적용할 수 없습니다. -Section 4 -- Sui Generis 데이터베이스 권리. +섹션 4 -- 고유 데이터베이스 권리. -라이선스된 권리가 귀하의 라이선스된 자료 사용에 적용되는 Sui Generis 데이터베이스 권리를 포함하는 경우: +라이선스 권한에 귀하의 라이선스된 자료 사용에 적용되는 고유 데이터베이스 권리가 포함된 경우: - a. 명확성을 위해, 섹션 2(a)(1)은 데이터베이스의 모든 또는 상당 부분을 추출, 재사용, 재생산 및 공유할 권리를 귀하에게 부여합니다; + a. 오해를 방지하기 위해, 섹션 2(a)(1)는 데이터베이스의 내용 전체 또는 상당 부분을 추출, 재사용, 복제 및 공유할 권리를 귀하에게 부여합니다; - b. 귀하가 Sui Generis 데이터베이스 권리를 보유한 데이터베이스에 데이터베이스의 모든 또는 상당 부분을 포함하는 경우, 귀하가 Sui Generis 데이터베이스 권리를 보유한 데이터베이스(그러나 그 개별 내용은 제외)는 수정된 자료입니다. + b. 귀하가 데이터베이스의 내용 전체 또는 상당 부분을 포함하는 데이터베이스를 생성하는 경우... +권리, 그리고 귀하가 Sui Generis Database 권리를 보유한 데이터베이스(그러나 개별 콘텐츠는 제외)는 수정된 자료로 간주됩니다. - 섹션 3(b)의 목적을 포함하여; 및 - c. 귀하가 데이터베이스의 모든 또는 상당 부분을 공유하는 경우, 섹션 3(a)의 조건을 준수해야 합니다. +이를 섹션 3(b)의 목적을 포함하여, +c. 귀하가 데이터베이스의 모든 또는 상당 부분의 콘텐츠를 공유할 경우 섹션 3(a)의 조건을 준수해야 합니다. -명확성을 위해, 이 섹션 4는 라이선스된 권리가 기타 저작권 및 유사 권리를 포함하는 경우 귀하의 의무를 보완하며, 이를 대체하지 않습니다. +명확성을 위해, 이 섹션 4는 귀하의 의무를 보완하며, 라이선스 권리가 다른 저작권 및 유사 권리를 포함하는 경우 이 공공 라이선스에 따른 귀하의 의무를 대체하지 않습니다. -Section 5 -- 보증의 면책 및 책임의 제한. +--- - a. 라이선스 제공자가 별도로 약속하지 않는 한, 가능한 범위 내에서, 라이선스 제공자는 라이선스된 자료를 있는 그대로 제공하며, 라이선스된 자료에 대해 어떤 종류의 진술이나 보증도 하지 않습니다, 명시적이든, 묵시적이든, 법적이든 또는 기타이든. 여기에는 제한 없이 소유권, 상업성, 특정 목적에 대한 적합성, 비침해, 잠재적 또는 기타 결함의 부재, 정확성 또는 오류의 존재 또는 부재에 대한 보증이 포함됩니다, 이는 알려졌거나 발견 가능한 여부와 관계없이. 보증의 면책이 전부 또는 일부 허용되지 않는 경우, 이 면책은 귀하에게 적용되지 않을 수 있습니다. +섹션 5 -- 보증의 부인 및 책임 제한. - b. 가능한 범위 내에서, 어떤 법적 이론(예: 과실 포함)으로 인해 라이선스 제공자가 귀하에게 책임을 지지 않으며, 이 공공 라이선스 또는 라이선스된 자료 사용으로 인해 발생하는 직접적, 특별, 간접, 부수적, 결과적, 징벌적, 모범적 또는 기타 손실, 비용, 경비 또는 손해에 대해 책임을 지지 않습니다, 심지어 라이선스 제공자가 그러한 손실, 비용, 경비 또는 손해의 가능성을 알고 있었더라도. 책임의 제한이 전부 또는 일부 허용되지 않는 경우, 이 제한은 귀하에게 적용되지 않을 수 있습니다. +a. 라이선스 제공자가 별도로 약속하지 않는 한, 가능한 범위 내에서 라이선스 제공자는 라이선스된 자료를 있는 그대로(as-is) 및 이용 가능한 상태(as-available)로 제공하며, 라이선스된 자료에 대해 어떠한 종류의 표현이나 보증도 하지 않습니다. 이는 명시적, 묵시적, 법적 또는 기타 보증을 포함하며, 제목, 상품성, 특정 목적에 대한 적합성, 비침해, 잠재적 또는 기타 결함의 부재, 정확성, 오류의 존재 여부(알려졌거나 발견 가능한지 여부에 관계없이)를 포함하되 이에 국한되지 않습니다. 보증 부인이 전부 또는 일부 허용되지 않는 경우, 이 부인은 귀하에게 적용되지 않을 수 있습니다. - c. 위에 제공된 보증의 면책 및 책임의 제한은 가능한 범위 내에서 모든 책임의 절대적인 면책 및 포기를 가장 밀접하게 근접하는 방식으로 해석되어야 합니다. +b. 가능한 범위 내에서, 어떠한 경우에도 라이선스 제공자는 법적 이론(과실 포함) 또는 기타 이유로 인해 이 공공 라이선스 또는 라이선스된 자료의 사용으로 발생하는 직접적, 특별한, 간접적, 부수적, 결과적, 징벌적, 모범적 손실, 비용, 경비 또는 손해에 대해 귀하에게 책임을 지지 않습니다. 라이선스 제공자가 그러한 손실, 비용, 경비 또는 손해의 가능성을 알고 있었더라도 마찬가지입니다. 책임 제한이 전부 또는 일부 허용되지 않는 경우, 이 제한은 귀하에게 적용되지 않을 수 있습니다. -Section 6 -- 기간 및 종료. +c. 위에서 제공된 보증 부인 및 책임 제한은 가능한 범위 내에서 모든 책임을 절대적으로 부인하고 포기하는 것으로 가장 근접하게 해석되어야 합니다. - a. 이 공공 라이선스는 여기서 라이선스된 저작권 및 유사 권리의 기간 동안 적용됩니다. 그러나 귀하가 이 공공 라이선스를 준수하지 않는 경우, 귀하의 이 공공 라이선스 하에 권리는 자동으로 종료됩니다. +--- - b. 귀하의 라이선스된 자료 사용 권리가 섹션 6(a)에 따라 종료된 경우, 이는 다음과 같이 복원됩니다: +섹션 6 -- 기간 및 종료. - 1. 위반이 수정된 날짜에 자동으로 복원되며, 귀하가 위반을 발견한 후 30일 이내에 수정된 경우; 또는 +a. 이 공공 라이선스는 여기에서 라이선스된 저작권 및 유사 권리의 기간 동안 적용됩니다. 그러나 귀하가 이 공공 라이선스를 준수하지 못할 경우, 이 공공 라이선스에 따른 귀하의 권리는 자동으로 종료됩니다. - 2. 라이선스 제공자의 명시적 복원에 의해. +b. 섹션 6(a)에 따라 라이선스된 자료를 사용할 권리가 종료된 경우, 이는 다음과 같이 복원됩니다: - 명확성을 위해, 이 섹션 6(b)는 귀하의 이 공공 라이선스 위반에 대한 라이선스 제공자의 구제 수단을 찾을 수 있는 권리에 영향을 미치지 않습니다. +1. 위반 사실을 발견한 날로부터 30일 이내에 위반이 수정된 경우, 수정된 날짜를 기준으로 자동 복원됩니다. +2. 라이선스 제공자의 명시적 복원에 따라 복원됩니다. - c. 명확성을 위해, 라이선스 제공자는 별도의 조건으로 라이선스된 자료를 제공하거나 언제든지 라이선스된 자료 배포를 중단할 수 있습니다; 그러나 그렇게 하더라도 이 공공 라이선스는 종료되지 않습니다. +명확성을 위해, 이 섹션 6(b)는 귀하의 이 공공 라이선스 위반에 대해 라이선스 제공자가 구제책을 추구할 권리에 영향을 미치지 않습니다. - d. 섹션 1, 5, 6, 7 및 8은 이 공공 라이선스의 종료 후에도 유효합니다. +c. 명확성을 위해, 라이선스 제공자는 별도의 조건 또는 약관에 따라 라이선스된 자료를 제공하거나 언제든지 라이선스된 자료의 배포를 중단할 수 있습니다. 그러나 이는 이 공공 라이선스를 종료시키지 않습니다. -Section 7 -- 기타 조건 및 규정. +d. 섹션 1, 5, 6, 7, 및 8은 이 공공 라이선스 종료 후에도 효력을 유지합니다. - a. 라이선 +--- + +섹션 7 -- 기타 조건. + +a. 라이선스 제공자는 귀하가 전달한 추가적이거나 다른 조건에 명시적으로 동의하지 않는 한 이에 구속되지 않습니다. + +b. 여기 명시되지 않은 라이선스된 자료에 대한 모든 협정, 이해 또는 합의는 이 공공 라이선스의 조건과 독립적이며 별개입니다. + +--- + +섹션 8 -- 해석. + +a. 명확성을 위해, 이 공공 라이선스는 라이선스된 자료를 이 공공 라이선스 없이 합법적으로 사용할 수 있는 모든 사용을 제한하거나 조건을 부과하지 않습니다. + +b. 가능한 범위 내에서, 이 공공 라이선스의 조항이 집행 불가능하다고 판단되는 경우, 이를 집행 가능하도록 최소한으로 자동 수정합니다. 조항이 수정될 수 없는 경우, 이는 이 공공 라이선스에서 분리되며 나머지 조건의 집행 가능성에 영향을 미치지 않습니다. + +c. 이 공공 라이선스의 조건은 라이선스 제공자가 명시적으로 동의하지 않는 한 포기되지 않으며, 준수하지 않는 것에 대한 동의도 없습니다. + +d. 이 공공 라이선스의 어떠한 내용도 라이선스 제공자 또는 귀하에게 적용되는 법적 절차 또는 관할권의 특권 및 면제를 제한하거나 포기하는 것으로 해석되지 않습니다. + +--- + +======================================================================= + +Creative Commons는 공공 라이선스의 당사자가 아닙니다. 그럼에도 불구하고, Creative Commons는 자신이 발행한 자료에 공공 라이선스를 적용할 수 있으며, 그러한 경우 "라이선스 제공자"로 간주됩니다. Creative Commons 공공 라이선스의 텍스트는 CC0 공공 도메인 헌신에 따라 공공 도메인에 헌신됩니다. Creative Commons 정책(creativecommons.org/policies)에 명시된 제한된 목적을 제외하고, Creative Commons는 "Creative Commons"라는 상표 또는 기타 상표나 로고를 사전 서면 동의 없이 사용할 수 없습니다. 이는 공공 라이선스의 무단 수정 또는 라이선스된 자료 사용에 관한 기타 협정, 이해 또는 합의를 포함하되 이에 국한되지 않습니다. 명확성을 위해, 이 단락은 공공 라이선스의 일부를 구성하지 않습니다. + +Creative Commons는 creativecommons.org에서 연락할 수 있습니다. **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문적인 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/sketchnotes/README.md b/translations/ko/lessons/sketchnotes/README.md index 1059b27c..d5afeb75 100644 --- a/translations/ko/lessons/sketchnotes/README.md +++ b/translations/ko/lessons/sketchnotes/README.md @@ -1,8 +1,17 @@ -모든 커리큘럼의 스케치 노트는 여기에서 다운로드할 수 있습니다. + +모든 커리큘럼의 스케치노트를 여기에서 다운로드할 수 있습니다. -🎨 제작자: Tomomi Imura (트위터: [@girlie_mac](https://twitter.com/girlie_mac), GitHub: [girliemac](https://github.com/girliemac)) +🎨 제작: Tomomi Imura (트위터: [@girlie_mac](https://twitter.com/girlie_mac), 깃허브: [girliemac](https://github.com/girliemac)) [![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) **면책 조항**: -이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서는 해당 언어로 작성된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역의 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 우리는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/tw/README.md b/translations/tw/README.md new file mode 100644 index 00000000..0874eabf --- /dev/null +++ b/translations/tw/README.md @@ -0,0 +1,154 @@ + +[![GitHub license](https://img.shields.io/github/license/microsoft/AI-For-Beginners.svg)](https://github.com/microsoft/AI-For-Beginners/blob/main/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/AI-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/AI-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD) +[![Gitter](https://badges.gitter.im/Microsoft/ai-for-beginners.svg)](https://gitter.im/Microsoft/ai-for-beginners?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) + +[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) + +# 人工智慧入門課程 - 課程大綱 + +|![由 [(@girlie_mac)](https://twitter.com/girlie_mac) 繪製的速寫筆記](./lessons/sketchnotes/ai-overview.png)| +|:---:| +| 人工智慧入門課程 - _速寫筆記由 [@girlie_mac](https://twitter.com/girlie_mac)_ | + +探索 **人工智慧** (AI) 的世界,透過我們為期 12 週、共 24 節課的課程!課程包含實作教學、測驗及實驗室練習。這是一個適合初學者的課程,涵蓋 TensorFlow 和 PyTorch 等工具,以及人工智慧的倫理議題。 + +## 您將學到什麼 + +**[課程心智圖](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)** + +在這門課程中,您將學到: + +* 不同的人工智慧方法,包括「經典」的符號方法,透過 **知識表示** 和推理 ([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence))。 +* **神經網路** 和 **深度學習**,這是現代人工智慧的核心。我們將使用兩個最受歡迎的框架 [TensorFlow](http://Tensorflow.org) 和 [PyTorch](http://pytorch.org) 的程式碼來說明這些重要主題背後的概念。 +* 用於處理影像和文字的 **神經架構**。我們將涵蓋近期的模型,但可能不包括最新的技術。 +* 不太常見的人工智慧方法,例如 **遺傳演算法** 和 **多代理系統**。 + +我們不會在這門課程中涵蓋: + +> [在 Microsoft Learn 集合中找到所有額外的課程資源](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) + +* **人工智慧在商業中的應用案例**。建議參加 [商業用戶的人工智慧入門](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) 學習路徑,或由 [INSEAD](https://www.insead.edu/) 合作開發的 [AI 商業學院](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum)。 +* **經典機器學習**,這在我們的 [機器學習入門課程](http://github.com/Microsoft/ML-for-Beginners) 中有詳細描述。 +* 使用 **[認知服務](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)** 建立的人工智慧應用。建議從 Microsoft Learn 的模組開始,例如 [視覺](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum)、[自然語言處理](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum)、**[Azure OpenAI Service 的生成式人工智慧](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** 等。 +* 特定的機器學習 **雲端框架**,例如 [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum)、[Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum) 或 [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum)。建議參加 [使用 Azure Machine Learning 建立和操作機器學習解決方案](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) 和 [使用 Azure Databricks 建立和操作機器學習解決方案](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) 學習路徑。 +* **對話式人工智慧** 和 **聊天機器人**。有一個單獨的 [建立對話式人工智慧解決方案](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) 學習路徑,您也可以參考 [這篇部落格文章](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/) 了解更多細節。 +* **深度學習的數學基礎**。建議參考 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 所著的 [深度學習](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618),也可在線上取得:[https://www.deeplearningbook.org/](https://www.deeplearningbook.org/)。 + +若想輕鬆入門 _雲端人工智慧_ 主題,建議參加 [在 Azure 上開始人工智慧學習](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) 學習路徑。 + +# 課程內容 + +| | 課程連結 | PyTorch/Keras/TensorFlow | 實驗室 | +| :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ | +| 0 | [課程設定](./lessons/0-course-setup/setup.md) | [設定您的開發環境](./lessons/0-course-setup/how-to-run.md) | | +| I | [**人工智慧簡介**](./lessons/1-Intro/README.md) | | | +| 01 | [人工智慧的簡介與歷史](./lessons/1-Intro/README.md) | - | - | +| II | **符號人工智慧** | +| 02 | [知識表示與專家系統](./lessons/2-Symbolic/README.md) | [專家系統](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) / [本體論](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) /[概念圖](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) | | +| III | [**神經網路簡介**](./lessons/3-NeuralNetworks/README.md) ||| +| 03 | [感知器](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [筆記本](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [實驗室](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) | +| 04 | [多層感知器與建立我們自己的框架](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [筆記本](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [實驗室](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) | +| 05 | [框架簡介 (PyTorch/TensorFlow) 與過度擬合](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [實驗室](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) | +| IV | [**電腦視覺**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [探索 Microsoft Azure 上的電腦視覺](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) | +| 06 | [電腦視覺簡介. OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [筆記本](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [實驗室](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) | +| 07 | [卷積神經網路](./lessons/4-ComputerVision/07-ConvNets/README.md) & [CNN 架構](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [實驗室](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) | +| 08 | [預訓練網路與遷移學習](./lessons/4-ComputerVision/08-TransferLearning/README.md) 和 [訓練技巧](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [實驗室](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) | +| 09 | [自編碼器與變分自編碼器 (VAEs)](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | | +| 10 | [生成對抗網路 (GANs) 與藝術風格轉換](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | | +| 11 | [物件偵測](./lessons/4-ComputerVision/11-ObjectDetection/README.md) | [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) | [實驗室](./lessons/4-ComputerVision/11-ObjectDetection/lab/README.md) | +| 12 | [語義分割. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](../../(https:/github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb)) | | +| V | [**自然語言處理**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [在 Microsoft Azure 上探索自然語言處理](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)| +| 13 | [文本表示. Bow/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | | +| 14 | [語義詞嵌入. Word2Vec 和 GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | | +| 15 | [語言建模. 訓練自己的嵌入](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [實驗室](./lessons/5-NLP/15-LanguageModeling/lab/README.md) | +| 16 | [循環神經網路 (RNN)](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | | +| 17 | [生成型循環網路](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.md) / [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.md) | [實驗室](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) | +| 18 | [Transformer. BERT.](./lessons/5-NLP/18-Transformers/READMEtransformers.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | | +| 19 | [命名實體識別 (NER)](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [實驗室](./lessons/5-NLP/19-NER/lab/README.md) | +| 20 | [大型語言模型、提示編程與少樣本任務](./lessons/5-NLP/20-LangModels/READMELargeLang.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | | +| VI | **其他 AI 技術** || | +| 21 | [遺傳演算法](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | | +| 22 | [深度強化學習](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [實驗室](./lessons/6-Other/22-DeepRL/lab/README.md) | +| 23 | [多代理系統](./lessons/6-Other/23-MultiagentSystems/README.md) | | | +| VII | **AI 倫理** | | | +| 24 | [AI 倫理與負責任的 AI](./lessons/7-Ethics/README.md) | [Microsoft Learn: 負責任的 AI 原則](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | | +| IX | **額外內容** | | | +| 25 | [多模態網路、CLIP 和 VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) | | + +## 每個課程包含 + +* 預讀材料 +* 可執行的 Jupyter Notebook,通常針對特定框架(**PyTorch** 或 **TensorFlow**)。可執行的 Notebook 也包含大量理論內容,因此為了理解主題,您需要至少完成一個版本的 Notebook(PyTorch 或 TensorFlow)。 +* **實驗室**:部分主題提供實驗室,讓您有機會將所學應用於特定問題。 +* 部分章節包含指向 [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) 模組的連結,涵蓋相關主題。 + +## 開始學習 + +- 我們已經創建了一個 [設置課程](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/setup.md),幫助您設置開發環境。 +- 對於教育者,我們也創建了一個 [課程設置指南](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/for-teachers.md)! +- 如何 [在 VSCode 或 Codepace 中運行代碼](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/how-to-run.md) + +請按照以下步驟操作: + +1. Fork 此倉庫:點擊頁面右上角的 "Fork" 按鈕。 +2. 克隆倉庫:`git clone https://github.com/microsoft/AI-For-Beginners.git` +3. 別忘了給這個倉庫加星標 (🌟),以便日後更容易找到。 + +## 與其他學習者交流 + +加入我們的 [官方 AI Discord 伺服器](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum),與其他學習者交流並獲得支持。 + +如果您在構建過程中有產品反饋或問題,請訪問我們的 [Azure AI Foundry 開發者論壇](https://aka.ms/foundry/forum)。 + +## 測驗 +> **關於測驗的注意事項**:所有測驗都存放在 etc\quiz-app 的 Quiz-app 資料夾中,並從課程中進行連結。測驗應用程式可以在本地執行或部署到 Azure;請按照 `quiz-app` 資料夾中的指示操作。測驗正在逐步進行本地化。 +## 徵求協助 + +您有建議或發現拼寫或程式碼錯誤嗎?請提出問題或建立拉取請求。 + +## 特別感謝 + +* **✍️ 主要作者:** [Dmitry Soshnikov](http://soshnikov.com),博士 +* **🔥 編輯:** [Jen Looper](https://twitter.com/jenlooper),博士 +* **🎨 手繪筆記插畫師:** [Tomomi Imura](https://twitter.com/girlie_mac) +* **✅ 測驗創作者:** [Lateefah Bello](https://github.com/CinnamonXI),[MLSA](https://studentambassadors.microsoft.com/) +* **🙏 核心貢獻者:** [Evgenii Pishchik](https://github.com/Pe4enIks) + +## 其他課程 + +我們的團隊還製作了其他課程!查看以下內容: + +- [生成式 AI 初學者課程](https://aka.ms/genai-beginners) +- [生成式 AI 初學者課程 .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [使用 JavaScript 的生成式 AI](https://github.com/microsoft/generative-ai-with-javascript) +- [使用 Java 的生成式 AI](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [AI 初學者課程](https://aka.ms/ai-beginners) +- [資料科學初學者課程](https://aka.ms/datascience-beginners) +- [機器學習初學者課程](https://aka.ms/ml-beginners) +- [網路安全初學者課程](https://github.com/microsoft/Security-101) +- [網頁開發初學者課程](https://aka.ms/webdev-beginners) +- [物聯網初學者課程](https://aka.ms/iot-beginners) +- [XR 開發初學者課程](https://github.com/microsoft/xr-development-for-beginners) +- [精通 GitHub Copilot 用於代理性使用](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [精通 GitHub Copilot 用於 C#/.NET 開發者](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [選擇你的 Copilot 冒險](https://github.com/microsoft/CopilotAdventures) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/SECURITY.md b/translations/tw/SECURITY.md new file mode 100644 index 00000000..cc5d51b7 --- /dev/null +++ b/translations/tw/SECURITY.md @@ -0,0 +1,49 @@ + +## 安全性 + +Microsoft 非常重視我們軟體產品和服務的安全性,包括透過我們的 GitHub 組織管理的所有原始碼庫,這些組織包括 [Microsoft](https://github.com/Microsoft)、[Azure](https://github.com/Azure)、[DotNet](https://github.com/dotnet)、[AspNet](https://github.com/aspnet)、[Xamarin](https://github.com/xamarin) 和 [我們的 GitHub 組織](https://opensource.microsoft.com/)。 + +如果您認為在任何 Microsoft 擁有的原始碼庫中發現了符合 [Microsoft 對安全性漏洞的定義](https://aka.ms/opensource/security/definition) 的安全性漏洞,請按照以下說明向我們報告。 + +## 報告安全性問題 + +**請不要透過公開的 GitHub 問題回報安全性漏洞。** + +相反,請透過 Microsoft Security Response Center (MSRC) 報告,網址為 [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report)。 + +如果您希望在不登入的情況下提交,請發送電子郵件至 [secure@microsoft.com](mailto:secure@microsoft.com)。如果可能,請使用我們的 PGP 金鑰加密您的訊息;您可以從 [Microsoft Security Response Center PGP Key 頁面](https://aka.ms/opensource/security/pgpkey) 下載。 + +您應該會在 24 小時內收到回覆。如果因某些原因未收到,請透過電子郵件跟進,以確保我們已收到您的原始訊息。更多資訊請參閱 [microsoft.com/msrc](https://aka.ms/opensource/security/msrc)。 + +請盡可能提供以下所需資訊,以幫助我們更好地了解問題的性質和範圍: + + * 問題類型(例如,緩衝區溢位、SQL 注入、跨站腳本攻擊等) + * 與問題表現相關的原始檔案的完整路徑 + * 受影響原始碼的位置(標籤/分支/提交或直接 URL) + * 重現問題所需的任何特殊配置 + * 重現問題的逐步指導 + * 概念驗證或利用程式碼(如果可能) + * 問題的影響,包括攻擊者可能如何利用該問題 + +這些資訊將幫助我們更快速地分類您的報告。 + +如果您是為了漏洞賞金計畫而報告,提供更完整的報告可能有助於獲得更高的賞金獎勵。請造訪我們的 [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) 頁面,了解我們的現行計畫的更多詳情。 + +## 偏好語言 + +我們偏好所有的溝通以英文進行。 + +## 政策 + +Microsoft 遵循 [協調式漏洞披露](https://aka.ms/opensource/security/cvd) 原則。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/etc/CODE_OF_CONDUCT.md b/translations/tw/etc/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..34ad290d --- /dev/null +++ b/translations/tw/etc/CODE_OF_CONDUCT.md @@ -0,0 +1,21 @@ + +# Microsoft 開源行為準則 + +此專案已採用 [Microsoft 開源行為準則](https://opensource.microsoft.com/codeofconduct/)。 + +資源: + +- [Microsoft 開源行為準則](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft 行為準則常見問題](https://opensource.microsoft.com/codeofconduct/faq/) +- 如有疑問或擔憂,請聯繫 [opencode@microsoft.com](mailto:opencode@microsoft.com) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/etc/CONTRIBUTING.md b/translations/tw/etc/CONTRIBUTING.md new file mode 100644 index 00000000..a7806ed8 --- /dev/null +++ b/translations/tw/etc/CONTRIBUTING.md @@ -0,0 +1,29 @@ + +# 貢獻指南 + +此專案歡迎各種貢獻與建議。大多數的貢獻需要您同意一份貢獻者授權協議 (CLA),以聲明您擁有授權權利並實際授予我們使用您貢獻的權利。詳細資訊請參訪 https://cla.microsoft.com。 + +當您提交拉取請求 (pull request) 時,CLA 機器人會自動判斷您是否需要提供 CLA,並適當地標記 PR(例如,添加標籤或評論)。只需按照機器人的指示操作即可。您只需在所有使用我們 CLA 的存儲庫中完成一次此操作。 + +此專案已採用 [Microsoft 開源行為準則](https://opensource.microsoft.com/codeofconduct/)。如需更多資訊,請參閱 [行為準則常見問題](https://opensource.microsoft.com/codeofconduct/faq/) 或聯絡 [opencode@microsoft.com](mailto:opencode@microsoft.com) 提出其他問題或意見。 + +# 尋求貢獻 + +我們目前正在積極尋求以下主題的貢獻: + +- [ ] 撰寫深度強化學習的章節 +- [ ] 改進物件偵測的章節與筆記本 +- [ ] PyTorch Lightning(針對[此章節](https://github.com/microsoft/AI-For-Beginners/blob/main/3-NeuralNetworks/05-Frameworks/README.md)) +- [ ] 撰寫命名實體識別的章節與範例 +- [ ] 為[此章節](https://github.com/microsoft/AI-For-Beginners/tree/main/5-NLP/15-LanguageModeling)建立訓練自定義嵌入的範例 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/etc/Mindmap.md b/translations/tw/etc/Mindmap.md new file mode 100644 index 00000000..255875ec --- /dev/null +++ b/translations/tw/etc/Mindmap.md @@ -0,0 +1,87 @@ + +# 人工智慧 (AI) + +## [人工智慧簡介](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/1-Intro/README.md) + - 人工智慧的定義 + - 人工智慧的歷史 + - 人工智慧的方法 + - 自上而下/符號式 + - 自下而上/神經網路 + - 演化式 + - 協同/湧現式人工智慧 + - [微軟人工智慧商業學院](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-cacaste) + +## [符號式人工智慧](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/README.md) + - 知識表示 + - [專家系統](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) + - [本體論](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) + - 語義網 + +## [神經網路](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/README.md) + - [感知器](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/README.md) + - [多層網路](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/README.md) + - [框架簡介](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/README.md) + - [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) + - [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.md) + - [過擬合](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/Overfitting.md) + +## [電腦視覺](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/README.md) + - 在微軟學習平台 + - [人工智慧基礎:探索電腦視覺](https://docs.microsoft.com/learn/paths/explore-computer-vision-microsoft-azure/?WT.mc_id=academic-77998-cacaste) + - [使用 PyTorch 的電腦視覺](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) + - [使用 TensorFlow 的電腦視覺](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste) + - [電腦視覺簡介:OpenCV](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/README.md) + - [卷積網路](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/README.md) + - [卷積神經網路架構](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) + - [遷移學習](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/README.md) + - [訓練技巧](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) + - [自編碼器與變分自編碼器 (VAEs)](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/README.md) + - [生成對抗網路 (GANs)](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/README.md) + - [風格遷移](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) + - [物件偵測](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/README.md) + - [影像分割](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/README.md) + +## [自然語言處理 (NLP)](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/README.md) + - 在微軟學習平台 + - [人工智慧基礎:探索自然語言處理](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-cacaste) + - [使用 PyTorch 的自然語言處理](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) + - [使用 TensorFlow 的自然語言處理](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) + - [文本表示](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/README.md) + - 詞袋模型 (Bag of Words) + - TF/IDF + - [語義嵌入](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/README.md) + - Word2Vec + - GloVE + - [語言建模](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling) + - [循環神經網路 (RNN)](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/README.md) + - 長短期記憶網路 (LSTM) + - 閘控循環單元 (GRU) + - [生成式循環網路](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/README.md) + - [Transformer 和 BERT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/README.md) + - [命名實體識別 (NER)](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/19-NER/README.md) + - [文本生成與 GPT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/20-LanguageModels/README.md) + +## 其他技術 + - [遺傳演算法](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/README.md) + - [深度強化學習](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/README.md) + - [多代理系統](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/23-MultiagentSystems/README.md) + +## [人工智慧倫理](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/7-Ethics/README.md) + - [微軟學習平台上的負責任人工智慧](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) + +## 附加內容 + - [多模態網路](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/README.md) + - [CLIP](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) + - DALL-E + - VQ-GAN + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/etc/SUPPORT.md b/translations/tw/etc/SUPPORT.md new file mode 100644 index 00000000..35ff2069 --- /dev/null +++ b/translations/tw/etc/SUPPORT.md @@ -0,0 +1,23 @@ + +# 支援 + +## 如何提交問題和獲取幫助 + +此專案使用 GitHub Issues 來追蹤錯誤和功能請求。在提交新問題之前,請先搜尋現有的問題以避免重複。對於新問題,請將您的錯誤或功能請求提交為一個新的 Issue。 + +如果需要幫助或對使用此專案有任何疑問,請使用討論區。 + +## Microsoft 支援政策 + +對於此專案的支援僅限於上述列出的資源。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/etc/TRANSLATIONS.md b/translations/tw/etc/TRANSLATIONS.md new file mode 100644 index 00000000..a96e2234 --- /dev/null +++ b/translations/tw/etc/TRANSLATIONS.md @@ -0,0 +1,45 @@ + +# 透過翻譯課程來貢獻 + +我們歡迎您為本課程的課程內容進行翻譯! + +## 指南 + +每個課程資料夾和課程介紹資料夾中都有包含翻譯後的 Markdown 文件的資料夾。 + +> 注意,請不要翻譯任何程式碼範例文件中的程式碼;唯一需要翻譯的是 README、作業和測驗。謝謝! + +翻譯後的文件應遵循以下命名規範: + +**README._[language]_.md** + +其中 _[language]_ 是遵循 ISO 639-1 標準的兩位字母語言縮寫(例如,西班牙文為 `README.es.md`,荷蘭文為 `README.nl.md`)。 + +**assignment._[language]_.md** + +與 README 類似,請同樣翻譯作業文件。 + +**測驗** + +1. 將您的翻譯新增到測驗應用程式中,方法是將文件新增到此處:https://github.com/microsoft/AI-For-Beginners/tree/main/etc/quiz-app/src/assets/translations,並遵循正確的命名規範(如 en.json、fr.json)。**請不要翻譯 'true' 或 'false' 這些詞語,謝謝!** + +2. 將您的語言代碼新增到測驗應用程式的 App.vue 文件中的下拉選單中。 + +3. 編輯測驗應用程式的 [translations index.js 文件](https://github.com/microsoft/AI-For-Beginners/blob/main/etc/quiz-app/src/assets/translations/index.js),以新增您的語言。 + +4. 最後,編輯您翻譯後的 README.md 文件中的所有測驗連結,直接指向您的翻譯測驗,例如:https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1 變更為 https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1?loc=id + +**感謝您** + +我們由衷感謝您的努力! + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/etc/quiz-app/README.md b/translations/tw/etc/quiz-app/README.md new file mode 100644 index 00000000..f18d867d --- /dev/null +++ b/translations/tw/etc/quiz-app/README.md @@ -0,0 +1,137 @@ + +# 測驗 + +這些測驗是 AI 課程(https://aka.ms/ai-beginners)的課前和課後測驗。 + +## 新增翻譯的測驗集 + +透過在 `assets/translations` 資料夾中建立相應的測驗結構來新增測驗翻譯。原始測驗位於 `assets/translations/en`。測驗依據課程分為多個組別。請確保編號與正確的測驗部分對齊。整個課程共有 40 個測驗,編號從 0 開始。 + +編輯翻譯後,請編輯翻譯資料夾中的 `index.js` 檔案,按照 `en` 中的慣例匯入所有檔案。 + +接著,編輯 `assets/translations` 中的 `index.js` 檔案,匯入新的翻譯檔案。 + +然後,編輯此應用程式中的 `App.vue` 下拉選單,新增您的語言。將本地化的縮寫與語言資料夾名稱匹配。 + +最後,編輯翻譯課程中的所有測驗連結(如果存在),以包含此本地化作為查詢參數,例如:`?loc=fr`。 + +## 專案設定 + +``` +npm install +``` + +### 編譯並熱加載以進行開發 + +``` +npm run serve +``` + +### 編譯並壓縮以進行生產環境 + +``` +npm run build +``` + +### 檢查並修復檔案 + +``` +npm run lint +``` + +### 自訂配置 + +請參閱 [配置參考](https://cli.vuejs.org/config/)。 + +致謝:感謝此測驗應用程式的原始版本:https://github.com/arpan45/simple-quiz-vue + +## 部署到 Azure + +以下是幫助您開始的逐步指南: + +1. Fork GitHub 儲存庫 +確保您的靜態網站應用程式程式碼位於您的 GitHub 儲存庫中。Fork 此儲存庫。 + +2. 建立 Azure 靜態網站應用程式 +- 建立 [Azure 帳戶](http://azure.microsoft.com) +- 前往 [Azure 入口網站](https://portal.azure.com) +- 點擊「建立資源」,然後搜尋「靜態網站應用程式」。 +- 點擊「建立」。 + +3. 配置靜態網站應用程式 +- 基本設定: + - 訂閱:選擇您的 Azure 訂閱。 + - 資源群組:建立新的資源群組或使用現有的資源群組。 + - 名稱:為您的靜態網站應用程式提供一個名稱。 + - 區域:選擇最接近您使用者的區域。 + +- #### 部署詳細資訊: + - 原始碼:選擇「GitHub」。 + - GitHub 帳戶:授權 Azure 存取您的 GitHub 帳戶。 + - 組織:選擇您的 GitHub 組織。 + - 儲存庫:選擇包含靜態網站應用程式的儲存庫。 + - 分支:選擇您要部署的分支。 + +- #### 建置詳細資訊: + - 建置預設值:選擇您的應用程式所使用的框架(例如 React、Angular、Vue 等)。 + - 應用程式位置:指定包含應用程式程式碼的資料夾(例如,如果在根目錄,則為 /)。 + - API 位置:如果有 API,請指定其位置(可選)。 + - 輸出位置:指定建置輸出生成的資料夾(例如 build 或 dist)。 + +4. 檢查並建立 +檢查您的設定,然後點擊「建立」。Azure 將設置必要的資源,並在您的儲存庫中建立 GitHub Actions 工作流程。 + +5. GitHub Actions 工作流程 +Azure 會自動在您的儲存庫中建立一個 GitHub Actions 工作流程檔案(.github/workflows/azure-static-web-apps-.yml)。此工作流程將處理建置和部署過程。 + +6. 監控部署 +前往 GitHub 儲存庫中的「Actions」標籤。 +您應該會看到一個正在運行的工作流程。此工作流程將建置並部署您的靜態網站應用程式到 Azure。 +一旦工作流程完成,您的應用程式將在提供的 Azure URL 上線。 + +### 範例工作流程檔案 + +以下是 GitHub Actions 工作流程檔案的範例: +name: Azure Static Web Apps CI/CD +``` +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v2 + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} + repo_token: ${{ secrets.GITHUB_TOKEN }} + action: "upload" + app_location: "etc/quiz-app # App source code path" + api_location: ""API source code path optional + output_location: "dist" #Built app content directory - optional +``` + +### 其他資源 +- [Azure 靜態網站應用程式文件](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [GitHub Actions 文件](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/0-course-setup/for-teachers.md b/translations/tw/lessons/0-course-setup/for-teachers.md new file mode 100644 index 00000000..eea6746d --- /dev/null +++ b/translations/tw/lessons/0-course-setup/for-teachers.md @@ -0,0 +1,35 @@ + +# 給教育工作者 + +想在您的課堂上使用這份課程嗎?請隨意使用! + +事實上,您可以直接在 GitHub 上使用它,通過 GitHub Classroom 來實現。 + +要做到這一點,請先 fork 這個倉庫。您需要為每一課創建一個倉庫,因此需要將每個文件夾提取到一個單獨的倉庫中。這樣,[GitHub Classroom](https://classroom.github.com/classrooms) 就可以分別處理每一課。 + +這些[完整的說明](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/)可以幫助您了解如何設置您的課堂。 + +## 按原樣使用此倉庫 + +如果您希望按目前的形式使用此倉庫,而不使用 GitHub Classroom,也可以這樣做。您需要與您的學生溝通,告訴他們一起學習哪一課。 + +在線上課程形式中(如 Zoom、Teams 或其他工具),您可以為測驗設置分組討論室,並指導學生為學習做好準備。然後邀請學生參加測驗,並在特定時間以 "issues" 的形式提交他們的答案。如果您希望學生公開協作完成作業,也可以採用相同的方式。 + +如果您更喜歡更私密的形式,可以要求您的學生逐課 fork 這份課程到他們自己的 GitHub 私人倉庫,並授予您訪問權限。然後,他們可以私下完成測驗和作業,並通過您課堂倉庫中的 issues 提交給您。 + +在在線課堂形式中,有很多方法可以讓這個課程運作起來。請告訴我們哪種方式最適合您! + +## 請分享您的想法 + +我們希望這份課程能夠滿足您和您學生的需求。請在討論區中給我們反饋! + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/lessons/0-course-setup/how-to-run.md b/translations/tw/lessons/0-course-setup/how-to-run.md new file mode 100644 index 00000000..9ffbfa85 --- /dev/null +++ b/translations/tw/lessons/0-course-setup/how-to-run.md @@ -0,0 +1,77 @@ + +# 如何執行程式碼 + +這份課程包含許多可執行的範例和實驗,您可能會希望執行它們。為了做到這一點,您需要能夠在課程提供的 Jupyter Notebook 中執行 Python 程式碼。以下是幾種執行程式碼的選項: + +## 在本地電腦上執行 + +若要在本地電腦上執行程式碼,您需要安裝某個版本的 Python。我個人推薦安裝 **[miniconda](https://conda.io/en/latest/miniconda.html)** —— 它是一個輕量級的安裝包,支援 `conda` 套件管理器,用於建立不同的 Python **虛擬環境**。 + +安裝 miniconda 後,您需要克隆此課程的存儲庫並建立一個虛擬環境來使用: + +```bash +git clone http://github.com/microsoft/ai-for-beginners +cd ai-for-beginners +conda env create --name ai4beg --file .devcontainer/environment.yml +conda activate ai4beg +``` + +### 使用 Visual Studio Code 和 Python 擴展 + +使用此課程的最佳方式可能是透過 [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) 搭配 [Python 擴展](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) 開啟課程。 + +> **注意**:當您克隆並在 VS Code 中開啟目錄時,它會自動建議您安裝 Python 擴展。您還需要按照上述步驟安裝 miniconda。 + +> **注意**:如果 VS Code 建議您在容器中重新開啟存儲庫,請拒絕此建議以使用本地的 Python 安裝。 + +### 在瀏覽器中使用 Jupyter + +您也可以直接在瀏覽器中使用 Jupyter 環境。事實上,無論是傳統的 Jupyter 還是 Jupyter Hub,都提供了相當方便的開發環境,包括自動完成、程式碼高亮等功能。 + +若要在本地啟動 Jupyter,請進入課程目錄並執行以下指令: + +```bash +jupyter notebook +``` +或 +```bash +jupyterhub +``` +接著,您可以瀏覽任何 `.ipynb` 文件,開啟並開始工作。 + +### 在容器中執行 + +另一種替代 Python 安裝的方式是使用容器執行程式碼。由於我們的存儲庫包含特殊的 `.devcontainer` 資料夾,指示如何為此存儲庫建立容器,VS Code 會建議您在容器中重新開啟程式碼。這需要安裝 Docker,並且操作較為複雜,因此我們建議有經驗的使用者採用此方式。 + +## 在雲端執行 + +如果您不想在本地安裝 Python,並且擁有一些雲端資源,另一個不錯的選擇是在雲端執行程式碼。以下是幾種方式: + +* 使用 **[GitHub Codespaces](https://github.com/features/codespaces)**,這是一個在 GitHub 上為您建立的虛擬環境,可透過 VS Code 的瀏覽器介面存取。如果您有 Codespaces 的使用權限,只需點擊存儲庫中的 **Code** 按鈕,啟動一個 Codespace,即可快速開始使用。 + +* 使用 **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**。 [Binder](https://mybinder.org) 是一個免費的雲端計算資源,供像您這樣的使用者在 GitHub 上測試程式碼。首頁上有一個按鈕可以在 Binder 中開啟存儲庫——這會快速將您帶到 Binder 網站,並自動建立底層容器,無縫啟動 Jupyter 網頁介面。 + +> **注意**:為了防止濫用,Binder 對某些網路資源的存取進行了限制。這可能會導致某些程式碼無法正常運行,特別是那些需要從公共網路下載模型或數據集的程式碼。您可能需要尋找一些替代方案。此外,Binder 提供的計算資源相對基本,因此在後期更複雜的課程中,訓練速度可能會很慢。 + +## 在雲端使用 GPU 執行 + +課程中的某些後期課程會因 GPU 支援而受益匪淺,否則訓練速度可能會非常緩慢。如果您透過 [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) 或您的機構擁有雲端資源,以下是幾種選擇: + +* 建立 [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste),並透過 Jupyter 連接到該虛擬機器。您可以直接在機器上克隆存儲庫並開始學習。NC 系列虛擬機器支援 GPU。 + +> **注意**:某些訂閱(包括 Azure for Students)並未預設提供 GPU 支援。您可能需要透過技術支援請求額外的 GPU 核心。 + +* 建立 [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste),然後使用其中的 Notebook 功能。[這段影片](https://azure-for-academics.github.io/quickstart/azureml-papers/) 介紹了如何將存儲庫克隆到 Azure ML Notebook 並開始使用。 + +您也可以使用 Google Colab,它提供一些免費的 GPU 支援,並將 Jupyter Notebook 上傳到 Colab 中逐一執行。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/0-course-setup/setup.md b/translations/tw/lessons/0-course-setup/setup.md new file mode 100644 index 00000000..c22ef05e --- /dev/null +++ b/translations/tw/lessons/0-course-setup/setup.md @@ -0,0 +1,54 @@ + +# 開始使用這份課程 + +## 你是學生嗎? + +以下是一些資源,幫助你開始: + +* [學生中心頁面](https://docs.microsoft.com/learn/student-hub?WT.mc_id=academic-77998-cacaste) 在這個頁面,你可以找到初學者資源、學生套件,甚至是獲得免費認證券的方法。這是一個值得收藏並定期查看的頁面,因為我們至少每月更新一次內容。 +* [Microsoft 學生學習大使](https://studentambassadors.microsoft.com?WT.mc_id=academic-77998-cacaste) 加入全球學生大使社群,這可能是你進入 Microsoft 的途徑。 + +**學生們**,有幾種方式可以使用這份課程。首先,你可以直接在 GitHub 上閱讀文本並查看程式碼。如果你想在任何筆記本中執行程式碼,請[閱讀我們的指導](./etc/how-to-run.md),並在[這篇部落格文章](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)中找到更多建議。 + +> **注意**:[如何執行這份課程中的程式碼的指導](./how-to-run.md) + +## 自學 + +如果你想將這門課程作為自學項目,我們建議你將整個倉庫 fork 到自己的 GitHub 帳戶,並自行或與小組一起完成練習: + +* 從課前測驗開始。 +* 閱讀課程的介紹文本。 +* 如果課程有額外的筆記本,請逐步閱讀並執行程式碼。如果同時提供 TensorFlow 和 PyTorch 筆記本,你可以選擇其中一個框架進行學習。 +* 筆記本通常包含一些挑戰,要求你稍微修改程式碼以進行實驗。 +* 完成課後測驗。 +* 如果模組附有實驗室,請完成作業。 +* 造訪 [討論板](https://github.com/microsoft/AI-For-Beginners/discussions) 以「公開學習」。 + +> 為了進一步學習,我們建議你參考這些 [Microsoft Learn](https://docs.microsoft.com/en-us/users/dmitrysoshnikov-9132/collections/31zgizg2p418yo/?WT.mc_id=academic-77998-cacaste) 模組和學習路徑。 + +**教師們**,我們已[提供一些建議](/for-teachers.md)來幫助你使用這份課程。 + +--- + +## 教學法 + +在設計這份課程時,我們選擇了兩個教學原則:確保課程是**基於專案**且包含**頻繁測驗**。 + +透過將內容與專案結合,學習過程變得更具吸引力,並能增強概念的記憶。此外,課前的低壓測驗能幫助學生專注於學習主題,而課後的第二次測驗則能進一步加深記憶。這份課程設計靈活有趣,可以完整學習或部分選用。專案從小型開始,並在 12 週的學習周期中逐漸變得複雜。 + +> **關於測驗的說明**:所有測驗都包含在[這個應用程式](https://red-field-0a6ddfd03.1.azurestaticapps.net/)中,共有 50 個測驗,每個測驗包含三個問題。測驗在課程中有連結,但測驗應用程式也可以在本地執行;請按照 `etc/quiz-app` 資料夾中的指導進行。 + +## 離線使用 + +你可以使用 [Docsify](https://docsify.js.org/#/) 離線瀏覽這份文件。Fork 這個倉庫,在你的本地機器上[安裝 Docsify](https://docsify.js.org/#/quickstart),然後在倉庫的根目錄中輸入 `docsify serve`。網站將在本地端的 3000 埠上提供服務:`localhost:3000`。課程的 PDF 可在[此連結](../../../../../../../../../etc/pdf/readme.pdf)中找到。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/1-Intro/README.md b/translations/tw/lessons/1-Intro/README.md new file mode 100644 index 00000000..8280cc16 --- /dev/null +++ b/translations/tw/lessons/1-Intro/README.md @@ -0,0 +1,66 @@ + +> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com) + +隨著時間的推移,計算資源變得更加便宜,並且可用的數據量也越來越多,因此神經網絡方法開始在許多領域中展現出與人類競爭的卓越性能,例如計算機視覺或語音理解。在過去的十年中,「人工智慧」這個詞大多被用作「神經網絡」的同義詞,因為我們聽到的大多數人工智慧的成功案例都基於神經網絡。 + +我們可以觀察到這些方法的演變,例如在開發一個下棋的電腦程式時: + +* 早期的棋類程式基於搜索——程式會明確地嘗試估算對手在接下來幾步中的可能走法,並根據幾步內可以達到的最佳位置選擇最佳走法。這導致了所謂的 [alpha-beta 剪枝](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning) 搜索算法的發展。 +* 搜索策略在遊戲後期效果很好,因為搜索空間因可能走法的數量有限而受到限制。然而,在遊戲開始時,搜索空間非常龐大,算法可以通過從人類玩家的現有對局中學習來改進。隨後的實驗採用了所謂的 [案例推理](https://en.wikipedia.org/wiki/Case-based_reasoning),程式會在知識庫中尋找與當前棋局非常相似的案例。 +* 現代能夠擊敗人類玩家的程式基於神經網絡和 [強化學習](https://en.wikipedia.org/wiki/Reinforcement_learning),這些程式僅通過長時間與自己對弈並從自己的錯誤中學習來學會下棋——就像人類學習下棋的方式一樣。然而,電腦程式可以在更短的時間內進行更多的對局,因此可以更快地學習。 + +✅ 研究一下其他由人工智慧參與的遊戲。 + +同樣,我們也可以看到「對話程式」(可能通過圖靈測試)的開發方法如何演變: + +* 早期的此類程式,例如 [Eliza](https://en.wikipedia.org/wiki/ELIZA),基於非常簡單的語法規則以及將輸入句子重新表述為問題。 +* 現代的助手,例如 Cortana、Siri 或 Google Assistant,都是混合系統,使用神經網絡將語音轉換為文字並識別使用者的意圖,然後採用一些推理或明確的算法來執行所需的操作。 +* 未來,我們可能期待一個完全基於神經網絡的模型能夠自行處理對話。最近的 GPT 和 [Turing-NLG](https://turing.microsoft.com/) 系列神經網絡在這方面展現了巨大的成功。 + +> 圖片由 Dmitry Soshnikov 提供,[照片](https://unsplash.com/photos/r8LmVbUKgns) 由 [Marina Abrosimova](https://unsplash.com/@abrosimova_marina_foto) 提供,Unsplash + +## 最近的人工智慧研究 + +神經網路研究的巨大增長始於 2010 年左右,當時大型公共數據集開始變得可用。一個名為 [ImageNet](https://en.wikipedia.org/wiki/ImageNet) 的龐大圖像集合包含約 1400 萬張註解圖像,催生了 [ImageNet 大規模視覺識別挑戰賽](https://image-net.org/challenges/LSVRC/)。 + +![ILSVRC 準確率](../../../../lessons/1-Intro/images/ilsvrc.gif) + +> 圖片由 [Dmitry Soshnikov](http://soshnikov.com) 提供 + +2012 年,[卷積神經網路](../4-ComputerVision/07-ConvNets/README.md) 首次被用於圖像分類,導致分類錯誤率顯著下降(從接近 30% 降至 16.4%)。2015 年,微軟研究院的 ResNet 架構[達到人類級別的準確率](https://doi.org/10.1109/ICCV.2015.123)。 + +自此之後,神經網路在許多任務中展現了非常成功的表現: + +--- + +年份 | 達到人類水平 +-----|-------- +2015 | [圖像分類](https://doi.org/10.1109/ICCV.2015.123) +2016 | [對話式語音識別](https://arxiv.org/abs/1610.05256) +2018 | [自動機器翻譯](https://arxiv.org/abs/1803.05567)(中英翻譯) +2020 | [圖像標註](https://arxiv.org/abs/2009.13682) + +在過去幾年中,我們見證了大型語言模型的巨大成功,例如 BERT 和 GPT-3。這主要是因為有大量的通用文本數據可用,這使得我們能夠訓練模型以捕捉文本的結構和意義,先在通用文本集合上進行預訓練,然後再使這些模型專注於更具體的任務。我們將在本課程稍後學習更多關於[自然語言處理](../5-NLP/README.md)的內容。 + +## 🚀 挑戰 + +在網路上進行探索,判斷您認為人工智慧在哪些領域最有效地被使用。是地圖應用程式、語音轉文字服務還是某款電子遊戲?研究該系統是如何構建的。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/201) + +## 回顧與自學 + +通過閱讀[這節課](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/2-history-of-ML)來回顧人工智慧和機器學習的歷史。從該課程頂部的手繪筆記或本課程中選擇一個元素,深入研究以了解其演變的文化背景。 + +**作業**: [遊戲開發挑戰](assignment.md) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/1-Intro/assignment.md b/translations/tw/lessons/1-Intro/assignment.md new file mode 100644 index 00000000..67d7243e --- /dev/null +++ b/translations/tw/lessons/1-Intro/assignment.md @@ -0,0 +1,15 @@ + +# 遊戲創作馬拉松 + +遊戲是一個深受人工智慧(AI)和機器學習(ML)發展影響的領域。在這次作業中,請撰寫一篇關於你喜歡的遊戲的短文,該遊戲應受到AI演進的影響。這應該是一款歷史悠久的遊戲,足以經歷多種類型的計算處理系統的影響。一個不錯的例子是象棋或圍棋,但也可以考慮像乒乓球(Pong)或吃豆人(Pac-Man)這樣的電子遊戲。撰寫一篇文章,討論該遊戲的過去、現在以及AI的未來發展。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/lessons/2-Symbolic/README.md b/translations/tw/lessons/2-Symbolic/README.md new file mode 100644 index 00000000..b03672ed --- /dev/null +++ b/translations/tw/lessons/2-Symbolic/README.md @@ -0,0 +1,248 @@ + +# 知識表示與專家系統 + +![象徵式人工智慧內容摘要](../../../../translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.tw.png) + +> Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac) + +人工智慧的追求基於對知識的探索,目的是讓機器能像人類一樣理解世界。但該如何實現這一目標呢? + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/102) + +在人工智慧的早期,採用自上而下的方法來創建智能系統(在上一課中討論過)非常流行。其核心思想是將人類的知識提取成機器可讀的形式,然後用它來自動解決問題。這種方法基於兩個重要概念: + +* 知識表示 +* 推理 + +## 知識表示 + +象徵式人工智慧的一個重要概念是**知識**。需要將知識與*信息*或*數據*區分開。例如,人們可以說書籍包含知識,因為可以通過學習書籍成為專家。然而,書籍實際上包含的是*數據*,而我們通過閱讀書籍並將這些數據整合到我們的世界模型中,將數據轉化為知識。 + +> ✅ **知識**是我們頭腦中的內容,代表我們對世界的理解。它是通過主動的**學習**過程獲得的,這個過程將我們接收到的信息整合到我們的世界模型中。 + +通常,我們不會嚴格定義知識,而是通過[DIKW金字塔](https://en.wikipedia.org/wiki/DIKW_pyramid)將其與其他相關概念對齊。金字塔包含以下概念: + +* **數據**是以物理媒介表示的內容,例如書面文字或口頭語言。數據獨立於人類存在,可以在人與人之間傳遞。 +* **信息**是我們在頭腦中對數據的解釋。例如,當我們聽到“電腦”這個詞時,我們對它有一定的理解。 +* **知識**是信息被整合到我們的世界模型中。例如,一旦我們了解了什麼是電腦,我們就會開始有一些關於它如何工作、價格多少以及用途的想法。這些相互關聯的概念網絡構成了我們的知識。 +* **智慧**是我們對世界理解的更高層次,代表著*元知識*,例如關於如何以及何時使用知識的概念。 + +*圖片 [來自維基百科](https://commons.wikimedia.org/w/index.php?curid=37705247),作者 Longlivetheux - 自製作品,CC BY-SA 4.0* + +因此,**知識表示**的問題在於找到一種有效的方法,將知識以數據的形式表示在計算機中,使其能夠自動使用。這可以看作是一個光譜: + +![知識表示光譜](../../../../translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.tw.png) + +> 圖片由 [Dmitry Soshnikov](http://soshnikov.com) 提供 + +* 在左側,有非常簡單的知識表示類型,可以被計算機有效使用。最簡單的是算法式表示,知識以計算機程序的形式表示。然而,這並不是表示知識的最佳方式,因為它缺乏靈活性。我們頭腦中的知識通常不是算法式的。 +* 在右側,有像自然文本這樣的表示方式。它是最強大的,但無法用於自動推理。 + +> ✅ 想一想你是如何在頭腦中表示知識並將其轉化為筆記的。是否有某種特定格式能幫助你更好地記住? + +## 計算機知識表示的分類 + +我們可以將不同的計算機知識表示方法分為以下幾類: + +* **網絡表示**基於我們頭腦中有一個相互關聯的概念網絡。我們可以嘗試在計算機中以圖的形式重現這些網絡——即所謂的**語義網絡**。 + +1. **物件-屬性-值三元組**或**屬性-值對**。由於圖可以在計算機中表示為節點和邊的列表,我們可以用三元組列表來表示語義網絡,包含物件、屬性和值。例如,我們可以建立以下關於程式語言的三元組: + +物件 | 屬性 | 值 +-----|------|----- +Python | 是 | 無類型語言 +Python | 發明者 | Guido van Rossum +Python | 區塊語法 | 縮排 +無類型語言 | 沒有 | 類型定義 + +> ✅ 想一想三元組如何用於表示其他類型的知識。 + +2. **階層表示**強調我們通常在頭腦中創建物件的層次結構。例如,我們知道金絲雀是一種鳥類,而所有鳥類都有翅膀。我們也知道金絲雀通常是什麼顏色,以及它們的飛行速度。 + + - **框架表示**基於將每個物件或物件類別表示為一個**框架**,框架包含**槽位**。槽位可以有可能的預設值、值限制或存儲的程序,這些程序可以被調用以獲得槽位的值。所有框架形成一個類似於物件導向程式語言中的物件層次結構。 + - **場景**是表示隨時間展開的複雜情境的一種特殊框架。 + +**Python** + +槽位 | 值 | 預設值 | 範圍 +-----|----|--------|----- +名稱 | Python | | +是 | 無類型語言 | | +變數命名 | | 駝峰式命名 | +程式長度 | | | 5-5000行 +區塊語法 | 縮排 | | + +3. **程序表示**基於通過一系列動作來表示知識,當某些條件發生時可以執行。 + - 產生規則是if-then語句,允許我們得出結論。例如,醫生可以有一條規則說**如果**患者有高燒**或**血液檢測中C反應蛋白水平高**那麼**他有炎症。一旦我們遇到其中一個條件,我們就可以得出關於炎症的結論,然後在進一步推理中使用它。 + - 算法可以被認為是另一種程序表示形式,儘管它們幾乎從未直接用於基於知識的系統。 + +4. **邏輯**最初由亞里士多德提出,作為表示人類普遍知識的一種方式。 + - 謂詞邏輯作為一種數學理論過於豐富而無法計算,因此通常使用它的一些子集,例如Prolog中使用的Horn子句。 + - 描述邏輯是一系列邏輯系統,用於表示和推理物件層次結構以及分佈式知識表示,例如*語義網*。 + +## 專家系統 + +象徵式人工智慧的一個早期成功是所謂的**專家系統**——設計用於在某些有限問題領域中充當專家的計算機系統。它們基於從一位或多位人類專家提取的**知識庫**,並包含一個在其上執行推理的**推理引擎**。 + +![人類架構](../../../../translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.tw.png) | ![基於知識的系統架構](../../../../translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.tw.png) +----------------------------------|---------------------------------------- +人類神經系統的簡化結構 | 基於知識的系統的架構 + +專家系統的構建類似於人類的推理系統,該系統包含**短期記憶**和**長期記憶**。同樣,在基於知識的系統中,我們區分以下組件: + +* **問題記憶**:包含當前正在解決的問題的知識,例如患者的體溫或血壓,是否有炎症等。這些知識也被稱為**靜態知識**,因為它包含了我們目前對問題的了解的快照——即所謂的*問題狀態*。 +* **知識庫**:表示關於問題領域的長期知識。它是從人類專家手動提取的,並且不會因諮詢而改變。由於它允許我們從一個問題狀態導航到另一個問題狀態,因此也被稱為**動態知識**。 +* **推理引擎**:負責協調在問題狀態空間中的搜索過程,必要時向用戶提問。它還負責找到適合每個狀態的規則。 + +例如,讓我們考慮以下基於動物物理特徵的專家系統: + +![AND-OR樹](../../../../translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.tw.png) + +> 圖片由 [Dmitry Soshnikov](http://soshnikov.com) 提供 + +此圖表稱為**AND-OR樹**,它是產生規則集的圖形表示。在提取專家知識的初期,繪製樹是有用的。要在計算機中表示知識,使用規則會更方便: + +``` +IF the animal eats meat +OR (animal has sharp teeth + AND animal has claws + AND animal has forward-looking eyes +) +THEN the animal is a carnivore +``` + +你會注意到規則的左側條件和動作本質上是物件-屬性-值(OAV)三元組。**工作記憶**包含與當前正在解決的問題相關的OAV三元組集合。**規則引擎**尋找條件滿足的規則並應用它們,將另一個三元組添加到工作記憶中。 + +> ✅ 試著畫一個你喜歡的主題的AND-OR樹! + +### 前向推理與後向推理 + +上述過程稱為**前向推理**。它從工作記憶中可用的初始數據開始,然後執行以下推理循環: + +1. 如果目標屬性存在於工作記憶中——停止並給出結果 +2. 查找所有條件目前滿足的規則——獲得**衝突集**規則。 +3. 執行**衝突解決**——選擇一條將在此步驟中執行的規則。可能有不同的衝突解決策略: + - 選擇知識庫中第一個適用的規則 + - 隨機選擇一條規則 + - 選擇*更具體*的規則,即滿足左側條件最多的規則 +4. 應用選定的規則並將新的知識片段插入問題狀態 +5. 從第1步重複。 + +然而,在某些情況下,我們可能希望從對問題的空白知識開始,並通過提問來幫助我們得出結論。例如,在進行醫學診斷時,我們通常不會在診斷患者之前提前進行所有醫學分析。我們更希望在需要做出決定時進行分析。 + +此過程可以使用**後向推理**建模。它由**目標**驅動——即我們希望找到的屬性值: + +1. 選擇所有可以給出目標值的規則(即目標在右側)——衝突集 +1. 如果該屬性沒有規則,或者有規則表明我們應該向用戶詢問該值——詢問該值,否則: +1. 使用衝突解決策略選擇一條規則作為*假設*——我們將嘗試證明它 +1. 對規則左側的所有屬性重複該過程,嘗試將它們作為目標證明 +1. 如果過程在任何時候失敗——在第3步使用另一條規則。 + +> ✅ 在哪些情況下前向推理更合適?後向推理又適合哪些情況? + +### 專家系統的實現 + +專家系統可以使用不同的工具來實現: + +* 直接使用某些高級程式語言進行編程。這不是最好的方法,因為基於知識的系統的主要優勢是知識與推理分離,問題領域的專家應該能夠在不理解推理過程細節的情況下編寫規則。 +* 使用**專家系統外殼**,即專門設計用於使用某種知識表示語言填充知識的系統。 + +## ✍️ 練習:動物推理 + +請參考 [Animals.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb),了解如何實現前向和後向推理的專家系統。 +> **注意**:此範例相當簡單,只是提供專家系統的基本概念。一旦開始建立這樣的系統,只有當規則數量達到一定程度(約200條以上)時,您才會注意到一些*智能*行為。在某個時刻,規則可能變得過於複雜,難以全部記住,而此時您可能會開始疑惑系統為什麼做出某些決策。然而,知識型系統的一個重要特徵是,您始終可以*解釋*任何決策是如何做出的。 +## 本體論與語意網 + +在20世紀末,有一項倡議旨在使用知識表示來標註互聯網資源,以便能夠找到符合非常特定查詢的資源。這項運動被稱為**語意網**,它基於以下幾個概念: + +- 一種基於**[描述邏輯](https://en.wikipedia.org/wiki/Description_logic)** (DL) 的特殊知識表示。它類似於框架知識表示,因為它構建了一個具有屬性的對象層次結構,但它具有正式的邏輯語義和推理能力。描述邏輯有一整個家族,它們在表達能力和推理的算法複雜性之間取得平衡。 +- 分散式知識表示,其中所有概念都由全局 URI 標識符表示,使得能夠創建跨越互聯網的知識層次結構。 +- 一系列基於 XML 的知識描述語言:RDF(資源描述框架)、RDFS(RDF Schema)、OWL(本體網絡語言)。 + +語意網中的核心概念是**本體**的概念。它指的是使用某種形式化知識表示對問題領域進行明確規範。最簡單的本體可以僅僅是問題領域中的對象層次結構,但更複雜的本體將包括可用於推理的規則。 + +在語意網中,所有表示都基於三元組。每個對象和每個關係都由 URI 唯一標識。例如,如果我們想陳述這份 AI 課程是由 Dmitry Soshnikov 在 2022 年 1 月 1 日開發的事實——以下是我們可以使用的三元組: + + + +``` +http://github.com/microsoft/ai-for-beginners http://www.example.com/terms/creation-date “Jan 13, 2007” +http://github.com/microsoft/ai-for-beginners http://purl.org/dc/elements/1.1/creator http://soshnikov.com +``` + +> ✅ 這裡的 `http://www.example.com/terms/creation-date` 和 `http://purl.org/dc/elements/1.1/creator` 是一些公認且普遍接受的 URI,用來表達*創建者*和*創建日期*的概念。 + +在更複雜的情況下,如果我們想定義一個創建者列表,我們可以使用 RDF 中定義的一些數據結構。 + + + +> 上述圖表由 [Dmitry Soshnikov](http://soshnikov.com) 提供 + +語意網的構建進展因搜索引擎和自然語言處理技術的成功而有所放緩,這些技術能夠從文本中提取結構化數據。然而,在某些領域仍然有重要的努力來維護本體和知識庫。值得注意的幾個項目: + +* [WikiData](https://wikidata.org/) 是與維基百科相關的機器可讀知識庫集合。大部分數據是從維基百科的*信息框*中挖掘出來的,這些信息框是維基百科頁面中的結構化內容片段。你可以使用 SPARQL(一種語意網的特殊查詢語言)[查詢](https://query.wikidata.org/) WikiData。以下是一個示例查詢,它顯示人類中最常見的眼睛顏色: + +```sparql +#defaultView:BubbleChart +SELECT ?eyeColorLabel (COUNT(?human) AS ?count) +WHERE +{ + ?human wdt:P31 wd:Q5. # human instance-of homo sapiens + ?human wdt:P1340 ?eyeColor. # human eye-color ?eyeColor + SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } +} +GROUP BY ?eyeColorLabel +``` + +* [DBpedia](https://www.dbpedia.org/) 是另一個類似於 WikiData 的努力。 + +> ✅ 如果你想嘗試構建自己的本體,或打開現有的本體,有一個很棒的可視化本體編輯器叫 [Protégé](https://protege.stanford.edu/)。下載它,或者在線使用。 + + + +*Web Protégé 編輯器打開 Romanov 家族本體。截圖由 Dmitry Soshnikov 提供* + +## ✍️ 練習:家庭本體 + +請參考 [FamilyOntology.ipynb](https://github.com/Ezana135/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb),了解如何使用語意網技術推理家庭關係。我們將採用以常見 GEDCOM 格式表示的家譜和家庭關係的本體,並為給定的一組個體構建所有家庭關係的圖。 + +## 微軟概念圖 + +在大多數情況下,本體是由人工精心創建的。然而,也可以從非結構化數據中**挖掘**本體,例如從自然語言文本中。 + +微軟研究院曾進行過這樣的嘗試,並產生了 [Microsoft Concept Graph](https://blogs.microsoft.com/ai/microsoft-researchers-release-graph-that-helps-machines-conceptualize/?WT.mc_id=academic-77998-cacaste)。 + +這是一個使用 `is-a` 繼承關係將實體分組的大型集合。它可以回答像「微軟是什麼?」這樣的問題——答案可能是「一家公司,概率為 0.87;一個品牌,概率為 0.75」。 + +該圖可以通過 REST API 獲取,也可以作為一個大型可下載的文本文件,其中列出了所有實體對。 + +## ✍️ 練習:概念圖 + +嘗試 [MSConceptGraph.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) 筆記本,看看我們如何使用微軟概念圖將新聞文章分組到幾個類別中。 + +## 結論 + +如今,AI 通常被認為是*機器學習*或*神經網絡*的同義詞。然而,人類也表現出明確的推理能力,這是目前神經網絡無法處理的。在實際項目中,明確的推理仍然被用來執行需要解釋或能夠以受控方式修改系統行為的任務。 + +## 🚀 挑戰 + +在與本課程相關的家庭本體筆記本中,有機會嘗試其他家庭關係。試著發現家譜中人物之間的新連接。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/202) + +## 回顧與自學 + +在互聯網上進行一些研究,探索人類試圖量化和編碼知識的領域。了解布魯姆的分類法,回顧歷史,了解人類如何試圖理解他們的世界。研究林奈斯的工作,了解他如何創建生物分類法,並觀察德米特里·門捷列夫如何創建描述和分組化學元素的方法。你還能找到哪些有趣的例子? + +**作業**: [構建一個本體](assignment.md) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/lessons/2-Symbolic/assignment.md b/translations/tw/lessons/2-Symbolic/assignment.md new file mode 100644 index 00000000..b48ae883 --- /dev/null +++ b/translations/tw/lessons/2-Symbolic/assignment.md @@ -0,0 +1,15 @@ + +# 建立本體 + +建立知識庫的核心在於對某個主題進行事實模型的分類。選擇一個主題,例如人物、地點或事物,然後建立該主題的模型。使用本課中描述的一些技術和模型構建策略。一個例子可能是建立一個客廳的本體,包括家具、燈光等等。客廳與廚房有什麼不同?浴室呢?你如何判斷它是客廳而不是餐廳?使用 [Protégé](https://protege.stanford.edu/) 來建立你的本體。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/3-NeuralNetworks/03-Perceptron/README.md b/translations/tw/lessons/3-NeuralNetworks/03-Perceptron/README.md new file mode 100644 index 00000000..b625883c --- /dev/null +++ b/translations/tw/lessons/3-NeuralNetworks/03-Perceptron/README.md @@ -0,0 +1,104 @@ + +# 神經網路簡介:感知器 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/103) + +1957 年,康奈爾航空實驗室的 Frank Rosenblatt 首次嘗試實現類似現代神經網路的模型。他設計了一個名為 "Mark-1" 的硬體裝置,用於識別基本幾何圖形,例如三角形、正方形和圓形。 + +| | | +|--------------|-----------| +|Frank Rosenblatt | The Mark 1 Perceptron| + +> 圖片來源:[維基百科](https://en.wikipedia.org/wiki/Perceptron) + +輸入圖像由 20x20 的光電陣列表示,因此神經網路有 400 個輸入和一個二元輸出。一個簡單的網路包含一個神經元,也稱為 **閾值邏輯單元**。神經網路的權重類似於電位器,在訓練階段需要手動調整。 + +> ✅ 電位器是一種允許用戶調整電路電阻的裝置。 + +> 《紐約時報》當時對感知器的描述是:*一種電子計算機的胚胎,[海軍] 預計它將能夠行走、說話、看見、書寫、自我複製,並意識到自己的存在。* + +## 感知器模型 + +假設我們的模型中有 N 個特徵,此時輸入向量將是一個大小為 N 的向量。感知器是一種 **二元分類** 模型,也就是說它可以區分兩類輸入數據。我們假設對於每個輸入向量 x,感知器的輸出將是 +1 或 -1,取決於其所屬的類別。輸出將通過以下公式計算: + +y(x) = f(wTx) + +其中 f 是一個階梯激活函數 + + + + +## 訓練感知器 + +為了訓練感知器,我們需要找到一個權重向量 w,使得大多數數據能夠被正確分類,也就是說使 **誤差** 最小化。這個誤差 E 通過 **感知器準則** 定義如下: + +E(w) = -∑wTxiti + +其中: + +* 求和針對那些分類錯誤的訓練數據點 i +* xi 是輸入數據,ti 對於負例為 -1,對於正例為 +1。 + +這個準則被視為權重 w 的函數,我們需要對其進行最小化。通常使用一種稱為 **梯度下降** 的方法,我們從某個初始權重 w(0) 開始,然後在每一步根據以下公式更新權重: + +w(t+1) = w(t) - η∇E(w) + +其中 η 是所謂的 **學習率**,∇E(w) 表示 E 的 **梯度**。計算出梯度後,我們得到: + +w(t+1) = w(t) + ∑ηxiti + +Python 中的算法如下: + +```python +def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): + + weights = [0,0,0] # Initialize weights (almost randomly :) + + for i in range(num_iterations): + pos = random.choice(positive_examples) + neg = random.choice(negative_examples) + + z = np.dot(pos, weights) # compute perceptron output + if z < 0: # positive example classified as negative + weights = weights + eta*weights.shape + + z = np.dot(neg, weights) + if z >= 0: # negative example classified as positive + weights = weights - eta*weights.shape + + return weights +``` + +## 結論 + +在本課中,你學習了感知器這種二元分類模型,以及如何通過使用權重向量來訓練它。 + +## 🚀 挑戰 + +如果你想嘗試構建自己的感知器,可以試試 [Microsoft Learn 上的這個實驗](https://docs.microsoft.com/en-us/azure/machine-learning/component-reference/two-class-averaged-perceptron?WT.mc_id=academic-77998-cacaste),它使用了 [Azure ML 設計器](https://docs.microsoft.com/en-us/azure/machine-learning/concept-designer?WT.mc_id=academic-77998-cacaste)。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/203) + +## 回顧與自學 + +要了解如何使用感知器解決玩具問題以及實際問題,並繼續學習,請參考 [Perceptron](../../../../../lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) 筆記本。 + +這裡還有一篇有趣的[關於感知器的文章](https://towardsdatascience.com/what-is-a-perceptron-basics-of-neural-networks-c4cfea20c590)。 + +## [作業](lab/README.md) + +在本課中,我們實現了一個用於二元分類任務的感知器,並使用它來區分兩個手寫數字。在這個實驗中,你需要完全解決數字分類問題,也就是說,確定給定圖像最有可能對應的數字。 + +* [說明](lab/README.md) +* [筆記本](../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md b/translations/tw/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md new file mode 100644 index 00000000..7d8ea047 --- /dev/null +++ b/translations/tw/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md @@ -0,0 +1,31 @@ + +# 使用感知器進行多類別分類 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +使用我們在本課中為 MNIST 手寫數字的二元分類所開發的程式碼,創建一個多類別分類器,能夠識別任意數字。計算訓練集和測試集的分類準確率,並輸出混淆矩陣。 + +## 提示 + +1. 對於每個數字,創建一個二元分類器的數據集,將其定義為「該數字 vs. 其他所有數字」 +1. 訓練 10 個不同的感知器進行二元分類(每個數字一個感知器) +1. 定義一個函數來分類輸入的數字 + +> **提示**:如果我們將所有 10 個感知器的權重組合成一個矩陣,我們應該能夠通過一次矩陣乘法將所有 10 個感知器應用於輸入數字。然後,只需對輸出應用 `argmax` 操作即可找到最可能的數字。 + +## 起始筆記本 + +通過打開 [PerceptronMultiClass.ipynb](../../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) 開始實驗。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/3-NeuralNetworks/04-OwnFramework/README.md b/translations/tw/lessons/3-NeuralNetworks/04-OwnFramework/README.md new file mode 100644 index 00000000..6744fc72 --- /dev/null +++ b/translations/tw/lessons/3-NeuralNetworks/04-OwnFramework/README.md @@ -0,0 +1,98 @@ + +# 神經網路簡介:多層感知器 + +在上一節中,你學習了最簡單的神經網路模型——單層感知器,一種線性二分類模型。 + +在本節中,我們將擴展此模型,形成更靈活的框架,使我們能夠: + +* 執行**多分類**,而不僅僅是二分類 +* 解決**回歸問題**,而不僅僅是分類問題 +* 區分非線性可分的類別 + +我們還將在 Python 中開發自己的模組化框架,讓我們能夠構建不同的神經網路架構。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/104) + +## 機器學習的形式化 + +讓我們從形式化機器學習問題開始。假設我們有一個訓練數據集 **X** 和標籤 **Y**,我們需要構建一個模型 *f*,以便做出最準確的預測。預測的品質由**損失函數** ℒ 來衡量。以下是常用的損失函數: + +* 對於回歸問題,當我們需要預測一個數值時,可以使用**絕對誤差** ∑i|f(x(i))-y(i)|,或**平方誤差** ∑i(f(x(i))-y(i))2 +* 對於分類問題,我們使用**0-1損失**(本質上與模型的**準確率**相同),或**邏輯損失**。 + +對於單層感知器,函數 *f* 被定義為線性函數 *f(x)=wx+b*(其中 *w* 是權重矩陣,*x* 是輸入特徵向量,*b* 是偏置向量)。對於不同的神經網路架構,這個函數可以採用更複雜的形式。 + +> 在分類問題中,通常希望網路輸出對應類別的概率。為了將任意數字轉換為概率(例如,對輸出進行正規化),我們通常使用**softmax** 函數 σ,函數 *f* 變為 *f(x)=σ(wx+b)* + +在上述 *f* 的定義中,*w* 和 *b* 被稱為**參數** θ=⟨*w,b*⟩。給定數據集 ⟨**X**,**Y**⟩,我們可以計算整個數據集上的總誤差,作為參數 θ 的函數。 + +> ✅ **神經網路訓練的目標是通過調整參數 θ 來最小化誤差** + +## 梯度下降優化 + +有一種著名的函數優化方法叫做**梯度下降**。其核心思想是,我們可以計算損失函數對參數的導數(在多維情況下稱為**梯度**),並調整參數以減少誤差。其形式化過程如下: + +* 用隨機值初始化參數 w(0), b(0) +* 重複以下步驟多次: + - w(i+1) = w(i)-η∂ℒ/∂w + - b(i+1) = b(i)-η∂ℒ/∂b + +在訓練過程中,優化步驟應基於整個數據集進行計算(記住損失是通過所有訓練樣本的總和計算的)。然而,在實際操作中,我們會取數據集的小部分,稱為**小批量**,並基於數據子集計算梯度。由於每次取的子集是隨機的,這種方法被稱為**隨機梯度下降**(SGD)。 + +## 多層感知器與反向傳播 + +如上所述,單層網路能夠分類線性可分的類別。為了構建更豐富的模型,我們可以結合多層網路。數學上,這意味著函數 *f* 會有更複雜的形式,並通過多個步驟計算: +* z1=w1x+b1 +* z2=w2α(z1)+b2 +* f = σ(z2) + +其中,α 是**非線性激活函數**,σ 是 softmax 函數,參數 θ=<*w1,b1,w2,b2*>。 + +梯度下降算法保持不變,但計算梯度會更加困難。根據鏈式微分法則,我們可以計算導數如下: + +* ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2) +* ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1) + +> ✅ 使用鏈式微分法則計算損失函數對參數的導數。 + +注意,所有這些表達式的最左部分是相同的,因此我們可以有效地從損失函數開始,沿著計算圖“向後”計算導數。因此,多層感知器的訓練方法被稱為**反向傳播**,或“backprop”。 + +計算圖 + +> TODO: 圖片引用 + +> ✅ 我們將在筆記本示例中更詳細地介紹反向傳播。 + +## 結論 + +在本課中,我們構建了自己的神經網路庫,並使用它完成了一個簡單的二維分類任務。 + +## 🚀 挑戰 + +在配套的筆記本中,你將實現自己的框架,用於構建和訓練多層感知器。你將能夠詳細了解現代神經網路的運作方式。 + +前往 [OwnFramework](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) 筆記本並完成其中的內容。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/204) + +## 回顧與自學 + +反向傳播是人工智慧和機器學習中常用的算法,值得[深入研究](https://wikipedia.org/wiki/Backpropagation)。 + +## [作業](lab/README.md) + +在本次實驗中,你需要使用本課中構建的框架來解決 MNIST 手寫數字分類問題。 + +* [說明](lab/README.md) +* [筆記本](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md b/translations/tw/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md new file mode 100644 index 00000000..4f78eec6 --- /dev/null +++ b/translations/tw/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md @@ -0,0 +1,32 @@ + +# 使用我們自己的框架進行 MNIST 分類 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +使用 1 層、2 層和 3 層的感知器解決 MNIST 手寫數字分類問題。使用我們在課程中開發的神經網路框架。 + +## 啟動 Notebook + +通過打開 [MyFW_MNIST.ipynb](../../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb) 開始實驗。 + +## 問題 + +完成本次實驗後,嘗試回答以下問題: + +- 層間的激活函數是否會影響網路的性能? +- 這個任務是否需要 2 層或 3 層的網路? +- 在訓練網路時是否遇到任何問題?特別是當層數增加時。 +- 網路的權重在訓練過程中是如何變化的?您可以繪製權重最大絕對值與 epoch 的關係圖來理解這種關係。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/3-NeuralNetworks/05-Frameworks/README.md b/translations/tw/lessons/3-NeuralNetworks/05-Frameworks/README.md new file mode 100644 index 00000000..125a6b9c --- /dev/null +++ b/translations/tw/lessons/3-NeuralNetworks/05-Frameworks/README.md @@ -0,0 +1,132 @@ + +# 神經網路框架 + +正如我們已經學到的,要有效地訓練神經網路,我們需要做到以下兩點: + +* 操作張量,例如進行乘法、加法,並計算一些函數如 sigmoid 或 softmax +* 計算所有表達式的梯度,以便執行梯度下降優化 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/105) + +雖然 `numpy` 庫可以完成第一部分,但我們需要某種機制來計算梯度。在[我們的框架](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb)中,我們在上一節中開發的框架需要手動在 `backward` 方法中編寫所有導數函數,該方法負責反向傳播。理想情況下,一個框架應該能讓我們計算*任何表達式*的梯度。 + +另一個重要的事情是能夠在 GPU 或其他專用計算單元(例如 [TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit))上執行計算。深度神經網路的訓練需要*大量*的計算,能夠在 GPU 上並行化這些計算非常重要。 + +> ✅ 「並行化」這個術語是指將計算分配到多個設備上。 + +目前,最受歡迎的兩個神經網路框架是:[TensorFlow](http://TensorFlow.org) 和 [PyTorch](https://pytorch.org/)。這兩者都提供了在 CPU 和 GPU 上操作張量的低階 API。在低階 API 之上,還有高階 API,分別是 [Keras](https://keras.io/) 和 [PyTorch Lightning](https://pytorchlightning.ai/)。 + +低階 API | [TensorFlow](http://TensorFlow.org) | [PyTorch](https://pytorch.org/) +---------|-------------------------------------|-------------------------------- +高階 API | [Keras](https://keras.io/) | [PyTorch Lightning](https://pytorchlightning.ai/) + +**低階 API** 在這兩個框架中允許構建所謂的 **計算圖**。該圖定義了如何使用給定的輸入參數計算輸出(通常是損失函數),並且可以在 GPU 上執行計算(如果可用)。這些框架提供了區分計算圖和計算梯度的功能,這些梯度可以用於優化模型參數。 + +**高階 API** 將神經網路視為一個**層的序列**,使得構建大多數神經網路變得更加容易。訓練模型通常需要準備數據,然後調用 `fit` 函數來完成工作。 + +高階 API 允許快速構建典型的神經網路,而不需要擔心太多細節。同時,低階 API 提供了對訓練過程的更多控制,因此在研究新型神經網路架構時經常使用。 + +還需要理解的是,這兩種 API 可以一起使用。例如,您可以使用低階 API 開發自己的網路層架構,然後將其用於由高階 API 構建和訓練的更大網路中。或者,您可以使用高階 API 將網路定義為層的序列,然後使用自己的低階訓練迴圈進行優化。這兩種 API 使用相同的基本概念,並且設計為能很好地協同工作。 + +## 學習 + +在本課程中,我們為 PyTorch 和 TensorFlow 提供了大部分內容。您可以選擇自己偏好的框架,並僅學習相應的筆記本。如果您不確定選擇哪個框架,可以在網上查閱一些關於 **PyTorch vs. TensorFlow** 的討論。您也可以查看這兩個框架以更好地理解它們。 + +在可能的情況下,我們將使用高階 API 以簡化學習。然而,我們認為從基礎理解神經網路的工作原理非常重要,因此在開始時,我們將從低階 API 和張量開始學習。然而,如果您想快速入門,不想花太多時間學習這些細節,可以跳過這些部分,直接進入高階 API 的筆記本。 + +## ✍️ 練習:框架 + +在以下筆記本中繼續學習: + +低階 API | [TensorFlow+Keras 筆記本](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [PyTorch](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) +---------|-------------------------------------|-------------------------------- +高階 API | [Keras](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) | *PyTorch Lightning* + +掌握框架後,讓我們回顧一下過擬合的概念。 + +# 過擬合 + +過擬合是機器學習中一個極其重要的概念,理解它非常關鍵! + +考慮以下近似 5 個點(圖中用 `x` 表示)的問題: + +![線性模型](../../../../../translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.tw.jpg) | ![過擬合模型](../../../../../translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.tw.jpg) +-------------------------|-------------------------- +**線性模型,2 個參數** | **非線性模型,7 個參數** +訓練誤差 = 5.3 | 訓練誤差 = 0 +驗證誤差 = 5.1 | 驗證誤差 = 20 + +* 左圖中,我們看到了一個良好的直線近似。由於參數數量適當,模型正確地捕捉了點的分佈規律。 +* 右圖中,模型過於強大。由於我們只有 5 個點,而模型有 7 個參數,它可以調整到通過所有點,使得訓練誤差為 0。然而,這阻止了模型理解數據背後的正確模式,因此驗證誤差非常高。 + +在模型的複雜度(參數數量)和訓練樣本數量之間找到正確的平衡非常重要。 + +## 為什麼會發生過擬合 + + * 訓練數據不足 + * 模型過於強大 + * 輸入數據中噪聲過多 + +## 如何檢測過擬合 + +從上圖可以看出,過擬合可以通過非常低的訓練誤差和非常高的驗證誤差來檢測。通常在訓練過程中,我們會看到訓練和驗證誤差都開始下降,然後在某個時候,驗證誤差可能停止下降並開始上升。這將是過擬合的跡象,表明我們應該停止訓練(或者至少保存模型的快照)。 + +![過擬合](../../../../../translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.tw.png) + +## 如何防止過擬合 + +如果您發現過擬合發生,可以採取以下措施: + + * 增加訓練數據量 + * 降低模型的複雜度 + * 使用一些[正則化技術](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md),例如 [Dropout](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md#Dropout),我們稍後會討論。 + +## 過擬合與偏差-方差權衡 + +過擬合實際上是統計學中一個更通用問題的案例,稱為[偏差-方差權衡](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff)。如果我們考慮模型中可能的誤差來源,可以看到兩種類型的誤差: + +* **偏差誤差** 是由於我們的算法無法正確捕捉訓練數據之間的關係而引起的。這可能是因為我們的模型不夠強大(**欠擬合**)。 +* **方差誤差** 是由於模型近似了輸入數據中的噪聲而不是有意義的關係(**過擬合**)。 + +在訓練過程中,偏差誤差會減少(因為模型學會了近似數據),而方差誤差會增加。為了防止過擬合,重要的是在適當的時候停止訓練——無論是手動(當我們檢測到過擬合時)還是自動(通過引入正則化)。 + +## 結論 + +在本課中,您學習了兩個最受歡迎的 AI 框架 TensorFlow 和 PyTorch 的不同 API。此外,您還學習了一個非常重要的主題——過擬合。 + +## 🚀 挑戰 + +在附帶的筆記本中,您會在底部找到「任務」;請完成筆記本中的任務。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/205) + +## 回顧與自學 + +研究以下主題: + +- TensorFlow +- PyTorch +- 過擬合 + +問問自己以下問題: + +- TensorFlow 和 PyTorch 有什麼區別? +- 過擬合和欠擬合有什麼區別? + +## [作業](lab/README.md) + +在本次實驗中,您需要使用 PyTorch 或 TensorFlow 解決兩個分類問題,分別使用單層和多層全連接網路。 + +* [說明](lab/README.md) +* [筆記本](../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md b/translations/tw/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md new file mode 100644 index 00000000..232688c4 --- /dev/null +++ b/translations/tw/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md @@ -0,0 +1,28 @@ + +# 使用 PyTorch/TensorFlow 進行分類 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +使用 PyTorch 或 TensorFlow 解決兩個分類問題,分別使用單層和多層全連接網路: + +1. **[Iris 分類](https://en.wikipedia.org/wiki/Iris_flower_data_set)** 問題 - 這是一個具有表格輸入數據的問題範例,可以通過經典的機器學習方法處理。你的目標是根據 4 個數值參數將鳶尾花分類為 3 個類別。 +2. **MNIST** 手寫數字分類問題,我們之前已經見過。 + +嘗試不同的網路架構,以獲得最佳的準確率。 + +## 起始 Notebook + +通過打開 [LabFrameworks.ipynb](../../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb) 開始實驗。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/3-NeuralNetworks/README.md b/translations/tw/lessons/3-NeuralNetworks/README.md new file mode 100644 index 00000000..ecec5c0d --- /dev/null +++ b/translations/tw/lessons/3-NeuralNetworks/README.md @@ -0,0 +1,60 @@ + +# 神經網路簡介 + +![神經網路簡介內容摘要的手繪圖](../../../../translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.tw.png) + +如我們在介紹中所討論的,實現智能的一種方法是訓練一個**電腦模型**或**人工大腦**。自20世紀中期以來,研究人員嘗試了不同的數學模型,直到最近這個方向被證明是非常成功的。這些模仿大腦的數學模型被稱為**神經網路**。 + +> 有時神經網路被稱為*人工神經網路*(Artificial Neural Networks,ANNs),以表明我們討論的是模型,而不是實際的神經元網路。 + +## 機器學習 + +神經網路屬於一個更大的學科,稱為**機器學習**,其目標是利用數據訓練能夠解決問題的電腦模型。機器學習是人工智能的一大部分,但我們在這份課程中不會涵蓋傳統的機器學習。 + +> 請參閱我們的獨立課程 **[機器學習入門](http://github.com/microsoft/ml-for-beginners)**,以了解更多關於傳統機器學習的內容。 + +在機器學習中,我們假設有一些例子數據集 **X** 和相應的輸出值 **Y**。例子通常是由**特徵**組成的 N 維向量,而輸出被稱為**標籤**。 + +我們將探討兩種最常見的機器學習問題: + +* **分類**,我們需要將輸入對象分類到兩個或多個類別中。 +* **回歸**,我們需要為每個輸入樣本預測一個數值。 + +> 當以張量表示輸入和輸出時,輸入數據集是一個大小為 M×N 的矩陣,其中 M 是樣本數量,N 是特徵數量。輸出標籤 **Y** 是大小為 M 的向量。 + +在這份課程中,我們將只專注於神經網路模型。 + +## 神經元的模型 + +從生物學中我們知道,我們的大腦由神經細胞組成,每個神經細胞都有多個「輸入」(軸突)和一個輸出(樹突)。軸突和樹突可以傳導電信號,而軸突和樹突之間的連接可以表現出不同程度的導電性(由神經遞質控制)。 + +![神經元模型](../../../../translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.tw.jpg) | ![神經元模型](../../../../translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.tw.png) +----|---- +真實神經元 *([圖片](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg) 來自維基百科)* | 人工神經元 *(作者提供的圖片)* + +因此,神經元的最簡單數學模型包含幾個輸入 X1, ..., XN 和一個輸出 Y,以及一系列權重 W1, ..., WN。輸出計算公式為: + +Y = f\left(\sum_{i=1}^N X_iW_i\right) + +其中 f 是某種非線性的**激活函數**。 + +> 早期的神經元模型在 Warren McCullock 和 Walter Pitts 於 1943 年發表的經典論文 [A logical calculus of the ideas immanent in nervous activity](https://www.cs.cmu.edu/~./epxing/Class/10715/reading/McCulloch.and.Pitts.pdf) 中被描述。Donald Hebb 在他的書 "[The Organization of Behavior: A Neuropsychological Theory](https://books.google.com/books?id=VNetYrB8EBoC)" 中提出了這些網路的訓練方法。 + +## 本章內容 + +在本章中,我們將學習以下內容: +* [感知器](03-Perceptron/README.md),一種最早的用於二分類的神經網路模型 +* [多層網路](04-OwnFramework/README.md),以及配套的筆記本 [如何構建我們自己的框架](../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) +* [神經網路框架](05-Frameworks/README.md),包括以下筆記本:[PyTorch](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) 和 [Keras/Tensorflow](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) +* [過擬合](../../../../lessons/3-NeuralNetworks/05-Frameworks) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/06-IntroCV/README.md b/translations/tw/lessons/4-ComputerVision/06-IntroCV/README.md new file mode 100644 index 00000000..339a2837 --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/06-IntroCV/README.md @@ -0,0 +1,121 @@ + +# 電腦視覺簡介 + +[電腦視覺](https://wikipedia.org/wiki/Computer_vision)是一個旨在讓電腦能夠高層次理解數位影像的學科。這是一個相當廣泛的定義,因為*理解*可以有許多不同的含義,包括在圖片中找到物體(**物體檢測**)、理解正在發生的事件(**事件檢測**)、用文字描述圖片,或是以3D方式重建場景。此外,還有一些與人類影像相關的特殊任務,例如年齡和情緒估算、人臉檢測與識別,以及3D姿態估算等。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/106) + +電腦視覺最簡單的任務之一是**影像分類**。 + +電腦視覺通常被認為是人工智慧的一個分支。如今,大多數的電腦視覺任務都是通過神經網路來解決的。我們將在本章節中學習更多用於電腦視覺的特殊神經網路類型,[卷積神經網路](../07-ConvNets/README.md)。 + +然而,在將影像傳遞給神經網路之前,許多情況下使用一些算法技術來增強影像是有意義的。 + +以下是幾個可用於影像處理的 Python 庫: + +* **[imageio](https://imageio.readthedocs.io/en/stable/)** 可用於讀取/寫入不同的影像格式。它還支持 ffmpeg,一個將影片幀轉換為影像的有用工具。 +* **[Pillow](https://pillow.readthedocs.io/en/stable/index.html)**(也稱為 PIL)功能更強大,還支持一些影像操作,例如形態變化、調整調色板等。 +* **[OpenCV](https://opencv.org/)** 是一個用 C++ 編寫的強大影像處理庫,已成為影像處理的*事實標準*。它有一個方便的 Python 接口。 +* **[dlib](http://dlib.net/)** 是一個 C++ 庫,實現了許多機器學習算法,包括一些電腦視覺算法。它也有 Python 接口,可用於如人臉和面部特徵檢測等挑戰性任務。 + +## OpenCV + +[OpenCV](https://opencv.org/) 被認為是影像處理的*事實標準*。它包含了許多有用的算法,並以 C++ 實現。你也可以從 Python 調用 OpenCV。 + +學習 OpenCV 的好地方是[這門 Learn OpenCV 課程](https://learnopencv.com/getting-started-with-opencv/)。在我們的課程中,我們的目標不是學習 OpenCV,而是展示一些它的使用範例以及如何使用它。 + +### 加載影像 + +在 Python 中,影像可以方便地表示為 NumPy 陣列。例如,大小為 320x200 像素的灰度影像將存儲在一個 200x320 的陣列中,而相同尺寸的彩色影像則具有 200x320x3 的形狀(代表三個顏色通道)。要加載影像,可以使用以下代碼: + +```python +import cv2 +import matplotlib.pyplot as plt + +im = cv2.imread('image.jpeg') +plt.imshow(im) +``` + +傳統上,OpenCV 使用 BGR(藍-綠-紅)編碼來表示彩色影像,而其他 Python 工具則使用更傳統的 RGB(紅-綠-藍)。為了使影像顯示正確,你需要將其轉換為 RGB 顏色空間,可以通過在 NumPy 陣列中交換維度,或者調用 OpenCV 函數來完成: + +```python +im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB) +``` + +同樣的 `cvtColor` 函數也可以用於執行其他顏色空間轉換,例如將影像轉換為灰度或 HSV(色相-飽和度-亮度)顏色空間。 + +你還可以使用 OpenCV 逐幀加載影片——範例可在練習 [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) 中找到。 + +### 影像處理 + +在將影像傳遞給神經網路之前,你可能需要應用幾個預處理步驟。OpenCV 可以做很多事情,包括: + +* 使用 `im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)` **調整影像大小** +* 使用 `im = cv2.medianBlur(im,3)` 或 `im = cv2.GaussianBlur(im, (3,3), 0)` **模糊影像** +* 改變影像的**亮度和對比度**可以通過 NumPy 陣列操作完成,詳情請參考[這篇 Stackoverflow 筆記](https://stackoverflow.com/questions/39308030/how-do-i-increase-the-contrast-of-an-image-in-python-opencv)。 +* 使用[閾值處理](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html),通過調用 `cv2.threshold`/`cv2.adaptiveThreshold` 函數,這通常比調整亮度或對比度更可取。 +* 對影像應用不同的[變換](https://docs.opencv.org/4.5.5/da/d6e/tutorial_py_geometric_transformations.html): + - **[仿射變換](https://docs.opencv.org/4.5.5/d4/d61/tutorial_warp_affine.html)** 如果你需要結合旋轉、調整大小和傾斜影像,並且知道影像中三個點的源位置和目標位置,仿射變換非常有用。仿射變換保持平行線平行。 + - **[透視變換](https://medium.com/analytics-vidhya/opencv-perspective-transformation-9edffefb2143)** 當你知道影像中四個點的源位置和目標位置時非常有用。例如,如果你用智能手機相機從某個角度拍攝矩形文件,並希望生成該文件本身的矩形影像。 +* 使用 **[光流](https://docs.opencv.org/4.5.5/d4/dee/tutorial_optical_flow.html)** 來理解影像中的運動。 + +## 使用電腦視覺的範例 + +在我們的 [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) 中,我們提供了一些使用電腦視覺執行特定任務的範例: + +* **預處理盲文書的照片**。我們專注於如何使用閾值處理、特徵檢測、透視變換和 NumPy 操作來分離單個盲文符號,以便神經網路進一步分類。 + +![盲文影像](../../../../../translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.tw.jpeg) | ![盲文影像預處理結果](../../../../../translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.tw.png) | ![盲文符號](../../../../../translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.tw.png) +----|-----|----- + +> 圖片來源:[OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) + +* **使用幀差檢測影片中的運動**。如果相機固定,則相機畫面中的幀應該彼此非常相似。由於幀表示為陣列,只需減去兩個連續幀的陣列即可獲得像素差異,靜態幀的差異應該很低,而當影像中有顯著運動時,差異會變高。 + +![影片幀和幀差的影像](../../../../../translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.tw.png) + +> 圖片來源:[OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) + +* **使用光流檢測運動**。[光流](https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html) 使我們能夠理解影片幀中每個像素的移動方式。光流有兩種類型: + + - **密集光流** 計算每個像素的移動向量場 + - **稀疏光流** 基於影像中的一些顯著特徵(例如邊緣),並從幀到幀構建它們的軌跡。 + +![光流影像](../../../../../translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.tw.png) + +> 圖片來源:[OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) + +## ✍️ 範例筆記本: OpenCV [試試 OpenCV 的應用](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) + +讓我們通過探索 [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) 來進行一些 OpenCV 的實驗。 + +## 結論 + +有時,像運動檢測或指尖檢測這樣相對複雜的任務可以純粹通過電腦視覺來解決。因此,了解電腦視覺的基本技術以及像 OpenCV 這樣的庫能做什麼是非常有幫助的。 + +## 🚀 挑戰 + +觀看 [這段影片](https://docs.microsoft.com/shows/ai-show/ai-show--2021-opencv-ai-competition--grand-prize-winners--cortic-tigers--episode-32?WT.mc_id=academic-77998-cacaste),了解 Cortic Tigers 項目以及他們如何構建基於模塊的解決方案,通過機器人普及電腦視覺任務。研究其他類似項目,了解它們如何幫助新學習者進入這個領域。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/206) + +## 回顧與自學 + +閱讀更多關於光流的內容:[這篇精彩的教程](https://learnopencv.com/optical-flow-in-opencv/)。 + +## [作業](lab/README.md) + +在這次實驗中,你將拍攝一段包含簡單手勢的影片,你的目標是使用光流提取上下左右的移動。 + +手掌移動幀 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/06-IntroCV/lab/README.md b/translations/tw/lessons/4-ComputerVision/06-IntroCV/lab/README.md new file mode 100644 index 00000000..413855fd --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/06-IntroCV/lab/README.md @@ -0,0 +1,31 @@ + +# 使用光流檢測移動 + +來自 [AI for Beginners Curriculum](https://aka.ms/ai-beginners) 的實驗作業。 + +## 任務 + +請參考[這段影片](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4),影片中一個人的手掌在穩定的背景上向左/右/上/下移動。 + +**你的目標** 是使用光流技術來判斷影片中哪些部分包含向上/向下/向左/向右的移動。 + +**進階目標** 是實際使用膚色來追蹤手掌/手指的移動,如[這篇部落格文章](https://dev.to/amarlearning/finger-detection-and-tracking-using-opencv-and-python-586m)或[這裡](http://www.benmeline.com/finger-tracking-with-opencv-and-python/)所描述的方式。 + +## 起始筆記本 + +開啟 [MovementDetection.ipynb](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb) 開始實驗。 + +## 收穫 + +有時候,像移動檢測或指尖檢測這樣相對複雜的任務,可以純粹透過電腦視覺來解決。因此,了解像 OpenCV 這樣的函式庫能做什麼是非常有幫助的。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md b/translations/tw/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md new file mode 100644 index 00000000..a9dd3a89 --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md @@ -0,0 +1,73 @@ + +# 著名的 CNN 架構 + +### VGG-16 + +VGG-16 是一個在 2014 年 ImageNet 前五名分類中達到 92.7% 準確率的網路。它的層結構如下: + +![ImageNet Layers](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.tw.jpg) + +如你所見,VGG 採用了傳統的金字塔架構,也就是一系列的卷積-池化層。 + +![ImageNet Pyramid](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.tw.jpg) + +> 圖片來源:[Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) + +### ResNet + +ResNet 是由微軟研究院在 2015 年提出的一系列模型。ResNet 的核心概念是使用 **殘差塊**: + + + +> 圖片來源:[這篇論文](https://arxiv.org/pdf/1512.03385.pdf) + +使用身份直通的原因是讓我們的層預測 **前一層結果與殘差塊輸出之間的差異**,因此得名 *殘差*。這些塊更容易訓練,並且可以構建包含數百個這樣的塊的網路(最常見的變體有 ResNet-52、ResNet-101 和 ResNet-152)。 + +你也可以將這個網路理解為能根據數據集調整其複雜度。最初,在開始訓練網路時,權重值較小,大部分信號通過身份直通層。隨著訓練進展,權重變大,網路參數的重要性增加,網路會調整以適應所需的表達能力,從而正確分類訓練圖像。 + +### Google Inception + +Google Inception 架構將這個概念更進一步,將每個網路層構建為多條不同路徑的組合: + + + +> 圖片來源:[Researchgate](https://www.researchgate.net/figure/Inception-module-with-dimension-reductions-left-and-schema-for-Inception-ResNet-v1_fig2_355547454) + +在這裡,我們需要強調 1x1 卷積的作用,因為一開始它似乎沒有意義。為什麼需要用 1x1 濾波器掃描圖像?然而,你需要記住,卷積濾波器也會處理多個深度通道(最初是 RGB 顏色,在後續層中是不同濾波器的通道),而 1x1 卷積用於通過不同的可訓練權重混合這些輸入通道。它也可以被視為在通道維度上的降採樣(池化)。 + +這裡有一篇[關於 1x1 卷積的好文章](https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578),以及[原始論文](https://arxiv.org/pdf/1312.4400.pdf)。 + +### MobileNet + +MobileNet 是一系列縮小尺寸的模型,適合移動設備使用。如果資源有限,並且可以接受稍微降低的準確率,可以使用它們。其核心概念是所謂的 **深度可分離卷積**,它允許通過空間卷積和深度通道上的 1x1 卷積的組合來表示卷積濾波器。這大大減少了參數數量,使網路尺寸更小,也更容易用較少的數據進行訓練。 + +這裡有一篇[關於 MobileNet 的好文章](https://medium.com/analytics-vidhya/image-classification-with-mobilenet-cc6fbb2cd470)。 + +## 結論 + +在本單元中,你已經學習了計算機視覺神經網路的主要概念——卷積網路。實際應用中用於圖像分類、物體檢測,甚至圖像生成的網路架構都基於 CNN,只是層數更多,並且加入了一些額外的訓練技巧。 + +## 🚀 挑戰 + +在附帶的筆記本中,底部有關於如何獲得更高準確率的筆記。進行一些實驗,看看是否能達到更高的準確率。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/207) + +## 回顧與自學 + +雖然 CNN 最常用於計算機視覺任務,但它們通常也適合提取固定大小的模式。例如,如果我們處理聲音,也可能希望使用 CNN 在音頻信號中尋找某些特定模式——在這種情況下,濾波器將是 1 維的(這種 CNN 被稱為 1D-CNN)。此外,有時也會使用 3D-CNN 來提取多維空間中的特徵,例如視頻中發生的某些事件——CNN 可以捕捉特徵隨時間變化的某些模式。進行一些回顧和自學,了解 CNN 還可以完成哪些其他任務。 + +## [作業](lab/README.md) + +在本次實驗中,你的任務是分類不同的貓狗品種。這些圖像比 MNIST 數據集更複雜,尺寸更高,並且類別超過 10 種。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/07-ConvNets/README.md b/translations/tw/lessons/4-ComputerVision/07-ConvNets/README.md new file mode 100644 index 00000000..76dc2714 --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/07-ConvNets/README.md @@ -0,0 +1,67 @@ + +# 卷積神經網絡 + +我們之前已經看到,神經網絡在處理圖像方面表現相當出色,即使是單層感知器也能以合理的準確率識別 MNIST 數據集中的手寫數字。然而,MNIST 數據集非常特殊,所有的數字都集中在圖像的中心,這使得任務變得更簡單。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/107) + +在現實生活中,我們希望能夠識別圖像中的物體,而不受其在圖像中的具體位置影響。計算機視覺與一般的分類不同,因為當我們試圖在圖像中找到某個物體時,我們是在掃描圖像以尋找一些特定的**模式**及其組合。例如,當尋找一隻貓時,我們可能首先尋找水平線,這些線可能形成貓鬚,然後某些貓鬚的組合可以告訴我們這是一張貓的圖片。某些模式的相對位置和存在是重要的,而不是它們在圖像中的確切位置。 + +為了提取模式,我們將使用**卷積濾波器**的概念。正如你所知,圖像是由一個二維矩陣或具有顏色深度的三維張量表示的。應用濾波器意味著我們取一個相對較小的**濾波核**矩陣,並對原始圖像中的每個像素與其鄰近點進行加權平均。我們可以將其視為一個小窗口在整個圖像上滑動,並根據濾波核矩陣中的權重對所有像素進行平均。 + +![垂直邊緣濾波器](../../../../../translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.tw.png) | ![水平邊緣濾波器](../../../../../translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.tw.png) +----|---- + +> 圖片來源:Dmitry Soshnikov + +例如,如果我們對 MNIST 數字應用 3x3 的垂直邊緣和水平邊緣濾波器,我們可以在原始圖像中有垂直和水平邊緣的地方得到高亮(例如高值)。因此,這兩個濾波器可以用來“尋找”邊緣。同樣,我們可以設計不同的濾波器來尋找其他低層次的模式: + +> [Leung-Malik 濾波器組](https://www.robots.ox.ac.uk/~vgg/research/texclass/filters.html)的圖片 + +然而,雖然我們可以手動設計濾波器來提取某些模式,我們也可以設計網絡,使其能夠自動學習模式。這是 CNN 背後的主要思想之一。 + +## CNN 的主要思想 + +CNN 的工作方式基於以下重要思想: + +* 卷積濾波器可以提取模式 +* 我們可以設計網絡,使濾波器能夠自動訓練 +* 我們可以使用相同的方法來在高層次特徵中尋找模式,而不僅僅是原始圖像。因此,CNN 的特徵提取基於特徵的層次結構,從低層次的像素組合開始,到更高層次的圖像部分組合。 + +![層次特徵提取](../../../../../translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.tw.png) + +> 圖片來源:[Hislop-Lynch 的論文](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d),基於[他們的研究](https://dl.acm.org/doi/abs/10.1145/1553374.1553453) + +## ✍️ 練習:卷積神經網絡 + +讓我們繼續探索卷積神經網絡的工作原理,以及如何通過相關的筆記本實現可訓練的濾波器: + +* [卷積神經網絡 - PyTorch](../../../../../lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) +* [卷積神經網絡 - TensorFlow](../../../../../lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) + +## 金字塔架構 + +大多數用於圖像處理的 CNN 都遵循所謂的金字塔架構。應用於原始圖像的第一個卷積層通常具有相對較少的濾波器(8-16 個),這些濾波器對應於不同的像素組合,例如水平/垂直線條或筆劃。在下一層,我們減少網絡的空間維度,並增加濾波器的數量,這對應於更多簡單特徵的可能組合。隨著每一層的進展,向最終分類器移動時,圖像的空間維度減少,而濾波器的數量增加。 + +例如,讓我們看看 VGG-16 的架構,這是一個在 2014 年 ImageNet 的 top-5 分類中達到 92.7% 準確率的網絡: + +![ImageNet 層](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.tw.jpg) + +![ImageNet 金字塔](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.tw.jpg) + +> 圖片來源:[Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) + +## 最知名的 CNN 架構 + +[繼續學習最知名的 CNN 架構](CNN_Architectures.md) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/tw/lessons/4-ComputerVision/07-ConvNets/lab/README.md new file mode 100644 index 00000000..b42e3541 --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -0,0 +1,43 @@ + +# 寵物面孔分類 + +來自 [AI 初學者課程](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +想像一下,你需要開發一個寵物托育應用程式來記錄所有的寵物。這樣的應用程式的一個重要功能就是能夠根據照片自動識別寵物的品種。這可以通過神經網絡成功實現。 + +你需要訓練一個卷積神經網絡來使用 **Pet Faces** 數據集分類不同品種的貓和狗。 + +## 數據集 + +我們將使用 **Pet Faces** 數據集,該數據集源自 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集。它包含 35 種不同品種的狗和貓。 + +![我們將處理的數據集](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.tw.png) + +要下載數據集,請使用以下程式碼片段: + +```python +!wget https://mslearntensorflowlp.blob.core.windows.net/data/petfaces.tar.gz +!tar xfz petfaces.tar.gz +!rm petfaces.tar.gz +``` + +## 啟動筆記本 + +通過打開 [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) 開始實驗。 + +## 收穫 + +你已經從零開始解決了一個相對複雜的圖像分類問題!儘管有很多類別,你仍然能夠獲得合理的準確率!同時,測量 top-k 準確率也是有意義的,因為有些類別即使對人類來說也不容易區分。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/08-TransferLearning/README.md b/translations/tw/lessons/4-ComputerVision/08-TransferLearning/README.md new file mode 100644 index 00000000..ebff66aa --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/08-TransferLearning/README.md @@ -0,0 +1,90 @@ + +# 預訓練網絡與遷移學習 + +訓練 CNN 需要耗費大量時間,並且需要大量數據。然而,大部分時間都花在學習網絡用來從圖像中提取模式的最佳低層濾波器上。一個自然的問題是:我們是否可以使用在一個數據集上訓練的神經網絡,並將其適配於分類不同的圖像,而不需要完整的訓練過程? + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/108) + +這種方法被稱為**遷移學習**,因為我們將某些知識從一個神經網絡模型轉移到另一個模型。在遷移學習中,我們通常從一個預訓練模型開始,該模型已經在某個大型圖像數據集(例如 **ImageNet**)上進行過訓練。這些模型已經能夠很好地從通用圖像中提取不同特徵,在許多情況下,只需在這些提取的特徵之上構建一個分類器就能取得良好的結果。 + +> ✅ 遷移學習這個術語在其他學術領域(例如教育)中也能找到,它指的是將一個領域的知識應用到另一個領域的過程。 + +## 預訓練模型作為特徵提取器 + +我們在上一節中討論的卷積網絡包含多個層,每一層都旨在從圖像中提取某些特徵,從低層的像素組合(例如水平/垂直線或筆劃)到高層的特徵組合,對應於像火焰的眼睛之類的東西。如果我們在足夠大的通用和多樣化的圖像數據集上訓練 CNN,網絡應該能夠學習提取這些常見特徵。 + +Keras 和 PyTorch 都包含函數,可以輕鬆加載一些常見架構的預訓練神經網絡權重,其中大多數是在 ImageNet 圖像上訓練的。最常用的架構在上一課的 [CNN Architectures](../07-ConvNets/CNN_Architectures.md) 頁面中有描述。特別是,你可能會考慮使用以下模型之一: + +* **VGG-16/VGG-19** 是相對簡單的模型,仍然能提供良好的準確性。通常使用 VGG 作為初步嘗試是一個不錯的選擇,可以看看遷移學習的效果。 +* **ResNet** 是由微軟研究院在 2015 年提出的一系列模型。它們有更多層,因此需要更多資源。 +* **MobileNet** 是一系列尺寸縮小的模型,適合移動設備。如果資源有限並且可以接受稍微降低的準確性,可以使用它們。 + +以下是 VGG-16 網絡從一張貓的圖片中提取的特徵示例: + +![VGG-16 提取的特徵](../../../../../translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.tw.png) + +## 貓與狗數據集 + +在這個例子中,我們將使用 [貓與狗](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste) 數據集,這非常接近於真實的圖像分類場景。 + +## ✍️ 練習:遷移學習 + +讓我們在相應的筆記本中看看遷移學習的實際應用: + +* [遷移學習 - PyTorch](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) +* [遷移學習 - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb) + +## 可視化對抗性貓 + +預訓練的神經網絡在其*大腦*中包含不同的模式,包括**理想貓**(以及理想狗、理想斑馬等)的概念。能夠以某種方式**可視化這些圖像**會很有趣。然而,這並不簡單,因為模式分散在網絡權重中,並且以層次結構組織。 + +我們可以採取的一種方法是從隨機圖像開始,然後嘗試使用**梯度下降優化**技術調整該圖像,使網絡認為它是一隻貓。 + +![圖像優化循環](../../../../../translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.tw.png) + +然而,如果我們這樣做,我們會得到一些非常類似於隨機噪聲的東西。這是因為*有很多方法可以讓網絡認為輸入圖像是一隻貓*,包括一些在視覺上沒有意義的方式。雖然這些圖像包含了許多典型的貓的模式,但並沒有任何約束使它們在視覺上具有辨識性。 + +為了改善結果,我們可以在損失函數中添加另一個項,稱為**變異損失**。它是一種度量,顯示圖像中相鄰像素的相似程度。最小化變異損失可以使圖像更平滑,並消除噪聲——從而揭示更具視覺吸引力的模式。以下是一些這樣的“理想”圖像示例,它們被高概率分類為貓和斑馬: + +![理想貓](../../../../../translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.tw.png) | ![理想斑馬](../../../../../translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.tw.png) +-----|----- +*理想貓* | *理想斑馬* + +類似的方法可以用於對神經網絡進行所謂的**對抗性攻擊**。假設我們想要欺騙神經網絡,使一隻狗看起來像一隻貓。如果我們拿一張狗的圖片,該圖片被網絡識別為狗,然後使用梯度下降優化稍微調整它,直到網絡開始將其分類為貓: + +![狗的圖片](../../../../../translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.tw.png) | ![被分類為貓的狗圖片](../../../../../translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.tw.png) +-----|----- +*狗的原始圖片* | *被分類為貓的狗圖片* + +查看以下筆記本中的代碼以重現上述結果: + +* [理想與對抗性貓 - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/AdversarialCat_TF.ipynb) + +## 結論 + +使用遷移學習,你可以快速組建一個自定義物體分類任務的分類器並獲得高準確性。你可以看到,我們現在解決的更複雜的任務需要更高的計算能力,並且無法輕易在 CPU 上完成。在下一單元中,我們將嘗試使用更輕量化的實現來訓練相同的模型,使用較低的計算資源,結果僅稍微降低準確性。 + +## 🚀 挑戰 + +在配套的筆記本中,底部有關於遷移知識如何最好地與某些相似的訓練數據(例如新類型的動物)一起工作的筆記。嘗試使用完全新類型的圖像進行一些實驗,看看你的遷移知識模型表現得如何。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) + +## 回顧與自學 + +閱讀 [TrainingTricks.md](TrainingTricks.md),加深你對其他模型訓練方法的了解。 + +## [作業](lab/README.md) + +在這個實驗中,我們將使用真實的 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集,其中包含 35 種貓和狗的品種,並構建一個遷移學習分類器。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md b/translations/tw/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md new file mode 100644 index 00000000..6e2520df --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md @@ -0,0 +1,117 @@ + +# 深度學習訓練技巧 + +隨著神經網絡的深度增加,其訓練過程變得越來越具有挑戰性。一個主要的問題是所謂的[梯度消失](https://en.wikipedia.org/wiki/Vanishing_gradient_problem)或[梯度爆炸](https://deepai.org/machine-learning-glossary-and-terms/exploding-gradient-problem#:~:text=Exploding%20gradients%20are%20a%20problem,updates%20are%20small%20and%20controlled)。[這篇文章](https://towardsdatascience.com/the-vanishing-exploding-gradient-problem-in-deep-neural-networks-191358470c11)對這些問題進行了很好的介紹。 + +為了讓深層網絡的訓練更高效,可以採用一些技巧。 + +## 保持數值在合理範圍內 + +為了讓數值計算更穩定,我們希望確保神經網絡中的所有數值都在合理的範圍內,通常是 [-1..1] 或 [0..1]。這並不是一個非常嚴格的要求,但浮點數計算的特性使得不同量級的數值無法準確地一起操作。例如,如果我們將 10-10 和 1010 相加,結果很可能是 1010,因為較小的數值會被“轉換”到與較大數值相同的量級,從而導致尾數丟失。 + +大多數激活函數在 [-1..1] 範圍內具有非線性特性,因此將所有輸入數據縮放到 [-1..1] 或 [0..1] 範圍是有意義的。 + +## 初始權重初始化 + +理想情況下,我們希望數值在通過網絡層後仍保持在相同的範圍內。因此,初始化權重時需要以某種方式保留數值的分佈。 + +正態分佈 **N(0,1)** 並不是一個好主意,因為如果我們有 *n* 個輸入,輸出的標準差將是 *n*,數值很可能會跳出 [0..1] 範圍。 + +以下是常用的初始化方法: + +- 均勻分佈 -- `uniform` +- **N(0,1/n)** -- `gaussian` +- **N(0,1/√n_in)** 保證對於均值為零且標準差為 1 的輸入,輸出仍保持相同的均值和標準差 +- **N(0,√2/(n_in+n_out))** -- 所謂的 **Xavier 初始化** (`glorot`),它有助於在前向和反向傳播中保持信號在範圍內 + +## 批量正規化 + +即使有了適當的權重初始化,訓練過程中權重仍可能變得非常大或非常小,從而使信號超出適當範圍。我們可以通過使用某些**正規化**技術將信號拉回範圍內。雖然有多種正規化技術(如權重正規化、層正規化),但最常用的是批量正規化。 + +**批量正規化**的想法是考慮小批量中的所有數值,並基於這些數值進行正規化(即減去均值並除以標準差)。它被實現為一個網絡層,在應用權重後但在激活函數之前執行此正規化。結果是,我們可能會看到更高的最終準確性和更快的訓練速度。 + +這是批量正規化的[原始論文](https://arxiv.org/pdf/1502.03167.pdf)、[維基百科上的解釋](https://en.wikipedia.org/wiki/Batch_normalization)以及[一篇很好的入門博客文章](https://towardsdatascience.com/batch-normalization-in-3-levels-of-understanding-14c2da90a338)(還有[俄文版](https://habrahabr.ru/post/309302/))。 + +## Dropout + +**Dropout** 是一種有趣的技術,在訓練過程中隨機移除一定比例的神經元。它也被實現為一個層,具有一個參數(要移除的神經元百分比,通常為 10%-50%),在訓練過程中,它會將輸入向量的隨機元素設為零,然後再傳遞到下一層。 + +雖然這聽起來像是一個奇怪的想法,但你可以在 [`Dropout.ipynb`](../../../../../lessons/4-ComputerVision/08-TransferLearning/Dropout.ipynb) 筆記本中看到 Dropout 對 MNIST 數字分類器訓練的影響。它加快了訓練速度,並使我們能夠在更少的訓練輪次中實現更高的準確性。 + +這種效果可以用幾種方式解釋: + +- 它可以被認為是對模型的一種隨機衝擊因素,將優化從局部最小值中拉出 +- 它可以被認為是*隱式模型平均化*,因為我們可以說在 Dropout 過程中,我們正在訓練稍微不同的模型 + +> *有人說,當一個醉酒的人試圖學習某些東西時,與清醒的人相比,他第二天早上會記得更清楚,因為一個有些神經元失效的大腦會更努力地適應以抓住意義。我們自己從未測試過這是否是真的。* + +## 防止過擬合 + +深度學習的一個非常重要的方面是能夠防止[過擬合](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)。雖然使用非常強大的神經網絡模型可能很有吸引力,但我們應該始終平衡模型參數的數量與訓練樣本的數量。 + +> 確保你理解我們之前介紹的[過擬合](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)概念! + +有幾種方法可以防止過擬合: + +- 提前停止 -- 持續監控驗證集上的誤差,當驗證誤差開始增加時停止訓練。 +- 顯式權重衰減 / 正則化 -- 在損失函數中添加一個對權重絕對值的額外懲罰,防止模型產生非常不穩定的結果 +- 模型平均化 -- 訓練多個模型,然後對結果進行平均。這有助於最小化方差。 +- Dropout(隱式模型平均化) + +## 優化器 / 訓練算法 + +訓練的另一個重要方面是選擇好的訓練算法。雖然經典的**梯度下降**是一個合理的選擇,但它有時可能太慢,或者導致其他問題。 + +在深度學習中,我們使用**隨機梯度下降**(SGD),這是一種應用於隨機選擇的小批量的梯度下降。權重的調整公式如下: + +wt+1 = wt - η∇ℒ + +### 動量 + +在**動量 SGD** 中,我們保留了前幾步的部分梯度。這類似於當我們帶著慣性移動時,受到一個不同方向的衝擊,我們的軌跡不會立即改變,而是保留了一部分原始運動。這裡我們引入另一個向量 v 來表示*速度*: + +- vt+1 = γ vt - η∇ℒ +- wt+1 = wt + vt+1 + +這裡參數 γ 表示我們考慮慣性的程度:γ=0 對應於經典 SGD;γ=1 是純粹的運動方程。 + +### Adam、Adagrad 等 + +由於在每一層中,我們將信號乘以某個矩陣 Wi,根據 ||Wi||,梯度可能會減小接近 0,或者無限增大。這正是梯度爆炸/消失問題的本質。 + +解決這個問題的一種方法是僅在公式中使用梯度的方向,而忽略其絕對值,即: + +wt+1 = wt - η(∇ℒ/||∇ℒ||),其中 ||∇ℒ|| = √∑(∇ℒ)2 + +這種算法稱為 **Adagrad**。其他使用相同想法的算法有:**RMSProp**、**Adam** + +> **Adam** 被認為是許多應用中非常高效的算法,因此如果你不確定該使用哪一個,選擇 Adam。 + +### 梯度裁剪 + +梯度裁剪是上述想法的擴展。當 ||∇ℒ|| ≤ θ 時,我們在權重優化中考慮原始梯度;而當 ||∇ℒ|| > θ 時,我們將梯度除以其範數。這裡 θ 是一個參數,在大多數情況下我們可以取 θ=1 或 θ=10。 + +### 學習率衰減 + +訓練的成功通常取決於學習率參數 η。可以合理地假設,較大的 η 值會導致更快的訓練,這是我們通常在訓練開始時所希望的,而較小的 η 值則允許我們對網絡進行微調。因此,在大多數情況下,我們希望在訓練過程中減小 η。 + +這可以通過在每個訓練輪次後將 η 乘以某個數字(例如 0.98)來實現,或者使用更複雜的**學習率調度**。 + +## 不同的網絡架構 + +為你的問題選擇合適的網絡架構可能很棘手。通常,我們會選擇一個已被證明適用於我們特定任務(或類似任務)的架構。這裡有一個[神經網絡架構的良好概述](https://www.topbots.com/a-brief-history-of-neural-network-architectures/)(針對計算機視覺)。 + +> 選擇一個對於我們擁有的訓練樣本數量來說足夠強大的架構非常重要。選擇過於強大的模型可能會導致[過擬合](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)。 + +另一個不錯的方法是使用一個能自動調整到所需複雜度的架構。在某種程度上,**ResNet** 架構和 **Inception** 是自我調整的。[更多關於計算機視覺架構的信息](../07-ConvNets/CNN_Architectures.md) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/08-TransferLearning/lab/README.md b/translations/tw/lessons/4-ComputerVision/08-TransferLearning/lab/README.md new file mode 100644 index 00000000..f9051399 --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/08-TransferLearning/lab/README.md @@ -0,0 +1,39 @@ + +# 使用遷移學習對牛津寵物進行分類 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +想像一下,您需要為一家寵物托管中心開發一個應用程式,用於記錄所有的寵物。這樣的應用程式的一個重要功能就是能夠通過照片自動識別寵物的品種。在這次作業中,我們將使用遷移學習來對 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集中的真實寵物圖片進行分類。 + +## 數據集 + +我們將使用原始的 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集,該數據集包含 35 種不同品種的狗和貓。 + +要下載數據集,請使用以下程式碼片段: + +```python +!wget https://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz +!tar xfz images.tar.gz +!rm images.tar.gz +``` + +## 啟動 Notebook + +通過打開 [OxfordPets.ipynb](../../../../../../lessons/4-ComputerVision/08-TransferLearning/lab/OxfordPets.ipynb) 開始實驗。 + +## 收穫 + +遷移學習和預訓練網絡使我們能夠相對輕鬆地解決現實世界中的圖像分類問題。然而,預訓練網絡在處理類似類型的圖像時效果較好,如果我們開始分類非常不同的圖像(例如醫學圖像),結果可能會大大降低準確性。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/09-Autoencoders/README.md b/translations/tw/lessons/4-ComputerVision/09-Autoencoders/README.md new file mode 100644 index 00000000..06ce76fc --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/09-Autoencoders/README.md @@ -0,0 +1,109 @@ + +# 自動編碼器 + +在訓練 CNN 時,其中一個問題是我們需要大量的標記數據。以圖像分類為例,我們需要將圖像分成不同的類別,這是一項需要手動完成的工作。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/109) + +然而,我們可能希望使用原始(未標記)的數據來訓練 CNN 特徵提取器,這被稱為**自監督學習**。取代標籤,我們將使用訓練圖像作為網絡的輸入和輸出。**自動編碼器**的主要概念是,我們將有一個**編碼器網絡**,將輸入圖像轉換為某種**潛在空間**(通常只是某種較小尺寸的向量),然後是**解碼器網絡**,其目標是重建原始圖像。 + +> ✅ [自動編碼器](https://wikipedia.org/wiki/Autoencoder) 是“一種用於學習未標記數據的高效編碼的人工神經網絡。” + +由於我們訓練自動編碼器以捕捉原始圖像中的盡可能多的信息以進行準確的重建,網絡試圖找到最佳的**嵌入**來捕捉輸入圖像的含義。 + +![自動編碼器示意圖](../../../../../translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.tw.jpg) + +> 圖片來源:[Keras 博客](https://blog.keras.io/building-autoencoders-in-keras.html) + +## 使用自動編碼器的場景 + +雖然重建原始圖像本身似乎沒有太大的用途,但有一些場景自動編碼器特別有用: + +* **降低圖像的維度以進行可視化**或**訓練圖像嵌入**。通常,自動編碼器比 PCA 效果更好,因為它考慮了圖像的空間特性和層次特徵。 +* **去噪**,即去除圖像中的噪點。由於噪點攜帶了大量無用的信息,自動編碼器無法將所有噪點都嵌入到相對較小的潛在空間中,因此它只捕捉圖像的重要部分。在訓練去噪器時,我們從原始圖像開始,並使用人工添加噪點的圖像作為自動編碼器的輸入。 +* **超分辨率**,提高圖像分辨率。我們從高分辨率圖像開始,並使用低分辨率圖像作為自動編碼器的輸入。 +* **生成模型**。一旦我們訓練了自動編碼器,解碼器部分可以用來從隨機潛在向量開始創建新物件。 + +## 變分自動編碼器 (VAE) + +傳統的自動編碼器以某種方式降低輸入數據的維度,找出輸入圖像的重要特徵。然而,潛在向量通常沒有太多意義。換句話說,以 MNIST 數據集為例,找出哪些數字對應於不同的潛在向量並不容易,因為相近的潛在向量不一定對應於相同的數字。 + +另一方面,為了訓練*生成*模型,了解潛在空間會更好。這一想法引導我們走向**變分自動編碼器** (VAE)。 + +VAE 是一種自動編碼器,它學習預測潛在參數的*統計分佈*,即所謂的**潛在分佈**。例如,我們可能希望潛在向量以某種均值 zmean 和標準差 zsigma(均值和標準差都是某種維度 d 的向量)呈正態分佈。VAE 中的編碼器學習預測這些參數,然後解碼器從該分佈中取隨機向量以重建物件。 + +總結如下: + +* 從輸入向量,我們預測 `z_mean` 和 `z_log_sigma`(我們預測的是標準差的對數而不是標準差本身) +* 我們從分佈 N(zmean,exp(zlog\_sigma)) 中抽樣一個向量 `sample` +* 解碼器嘗試使用 `sample` 作為輸入向量解碼原始圖像 + + + +> 圖片來源:[這篇博客文章](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) 作者 Isaak Dykeman + +變分自動編碼器使用一個由兩部分組成的複雜損失函數: + +* **重建損失**是顯示重建圖像與目標圖像有多接近的損失函數(可以是均方誤差,或 MSE)。它與普通自動編碼器的損失函數相同。 +* **KL 損失**,確保潛在變量分佈保持接近正態分佈。它基於 [Kullback-Leibler 散度](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained) 的概念——一種估算兩個統計分佈相似程度的度量。 + +VAE 的一個重要優勢是它使我們能夠相對容易地生成新圖像,因為我們知道從哪個分佈中抽樣潛在向量。例如,如果我們在 MNIST 上使用 2D 潛在向量訓練 VAE,我們可以改變潛在向量的組件以獲得不同的數字: + +vaemnist + +> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com) + +觀察圖像如何相互融合,當我們開始從潛在參數空間的不同部分獲取潛在向量時。我們還可以在 2D 中可視化此空間: + +vaemnist cluster + +> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com) + +## ✍️ 練習:自動編碼器 + +在以下筆記本中了解更多關於自動編碼器的內容: + +* [TensorFlow 中的自動編碼器](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) +* [PyTorch 中的自動編碼器](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) + +## 自動編碼器的特性 + +* **數據特定** - 它們僅適用於訓練過的圖像類型。例如,如果我們在花卉上訓練超分辨率網絡,它在肖像上效果不佳。這是因為網絡可以通過從訓練數據集中學到的特徵中提取細節來生成高分辨率圖像。 +* **有損** - 重建的圖像與原始圖像不完全相同。損失的性質由訓練期間使用的*損失函數*定義。 +* 適用於**未標記數據** + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/209) + +## 結論 + +在本課中,您了解了 AI 科學家可用的各種自動編碼器類型。您學習了如何構建它們,以及如何使用它們重建圖像。您還了解了 VAE 以及如何使用它生成新圖像。 + +## 🚀 挑戰 + +在本課中,您學習了如何將自動編碼器用於圖像。但它們也可以用於音樂!查看 Magenta 項目的 [MusicVAE](https://magenta.tensorflow.org/music-vae) 項目,它使用自動編碼器來學習重建音樂。使用此庫進行一些[實驗](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb),看看您能創造出什麼。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) + +## 回顧與自學 + +作為參考,您可以在以下資源中了解更多關於自動編碼器的內容: + +* [在 Keras 中構建自動編碼器](https://blog.keras.io/building-autoencoders-in-keras.html) +* [NeuroHive 博客文章](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/) +* [變分自動編碼器解析](https://kvfrans.com/variational-autoencoders-explained/) +* [條件變分自動編碼器](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) + +## 作業 + +在 [使用 TensorFlow 的筆記本](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) 的末尾,您會找到一個“任務”——將其作為您的作業。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/10-GANs/README.md b/translations/tw/lessons/4-ComputerVision/10-GANs/README.md new file mode 100644 index 00000000..40de12f9 --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/10-GANs/README.md @@ -0,0 +1,110 @@ + +# 生成對抗網絡 + +在上一節中,我們學習了**生成模型**:能夠生成與訓練數據集中的圖像相似的新圖像的模型。VAE 是生成模型的一個不錯的例子。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/110) + +然而,如果我們嘗試生成一些真正有意義的東西,比如一幅具有合理解析度的畫作,使用 VAE 進行訓練時可能會發現收斂效果不佳。針對這種情況,我們需要了解另一種專門針對生成模型的架構——**生成對抗網絡**,簡稱 GAN。 + +GAN 的主要思想是使用兩個神經網絡相互對抗進行訓練: + + + +> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com) + +> ✅ 一些術語: +> * **生成器**是一個網絡,它接收隨機向量並生成圖像作為結果。 +> * **判別器**是一個網絡,它接收圖像並判斷該圖像是真實圖像(來自訓練數據集)還是由生成器生成的圖像。本質上,它是一個圖像分類器。 + +### 判別器 + +判別器的架構與普通的圖像分類網絡並無不同。在最簡單的情況下,它可以是一個全連接分類器,但更常見的是使用[卷積網絡](../07-ConvNets/README.md)。 + +> ✅ 基於卷積網絡的 GAN 被稱為 [DCGAN](https://arxiv.org/pdf/1511.06434.pdf) + +CNN 判別器由以下層組成:幾個卷積+池化層(空間尺寸逐漸減小),以及一個或多個全連接層以獲得“特徵向量”,最後是一個二元分類器。 + +> ✅ “池化”是一種減少圖像尺寸的技術。“池化層通過將一層中神經元集群的輸出合併為下一層中的單個神經元來減少數據的維度。” - [來源](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers) + +### 生成器 + +生成器稍微複雜一些。可以將其視為判別器的反向版本。從潛在向量(代替特徵向量)開始,它使用全連接層將其轉換為所需的尺寸/形狀,接著是反卷積+上採樣。這類似於[自編碼器](../09-Autoencoders/README.md)的*解碼器*部分。 + +> ✅ 由於卷積層是通過線性濾波器遍歷圖像來實現的,反卷積本質上與卷積相似,可以使用相同的層邏輯來實現。 + + + +> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com) + +### 訓練 GAN + +GAN 被稱為**對抗性**網絡,因為生成器和判別器之間存在持續的競爭。在這種競爭中,生成器和判別器都會改進,從而使網絡學習生成越來越好的圖像。 + +訓練分為兩個階段: + +* **訓練判別器**。這個任務相對簡單:生成器生成一批圖像,標記為 0(代表假圖像),並從輸入數據集中取一批圖像(標記為 1,真實圖像)。我們獲得一些*判別器損失*,然後進行反向傳播。 +* **訓練生成器**。這稍微複雜一些,因為我們無法直接知道生成器的期望輸出。我們將整個 GAN 網絡(由生成器和判別器組成)輸入一些隨機向量,期望結果為 1(對應真實圖像)。接著我們凍結判別器的參數(此步驟不希望判別器被訓練),然後進行反向傳播。 + +在此過程中,生成器和判別器的損失通常不會顯著下降。在理想情況下,它們應該呈現振盪,表明兩個網絡都在改進其性能。 + +## ✍️ 練習:GANs + +* [TensorFlow/Keras 的 GAN 筆記本](../../../../../lessons/4-ComputerVision/10-GANs/GANTF.ipynb) +* [PyTorch 的 GAN 筆記本](../../../../../lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) + +### GAN 訓練的問題 + +GAN 以訓練困難著稱。以下是一些常見問題: + +* **模式崩塌**。指生成器學會生成一個成功欺騙判別器的圖像,而不是生成多樣化的圖像。 +* **對超參數的敏感性**。有時 GAN 可能完全無法收斂,然後突然因學習率的降低而收斂。 +* **保持生成器和判別器的平衡**。在許多情況下,判別器損失可能迅速降至零,導致生成器無法進一步訓練。為了解決這個問題,可以嘗試為生成器和判別器設置不同的學習率,或者在判別器損失已經很低時跳過判別器的訓練。 +* **高解析度訓練**。與自編碼器的問題類似,重建過多層的卷積網絡可能會導致圖像出現瑕疵。通常通過所謂的**漸進式增長**來解決此問題,先用低解析度圖像訓練幾層,然後“解鎖”或添加更多層。另一種解決方案是添加層間的額外連接並同時訓練多個解析度——詳情請參閱這篇[多尺度梯度 GANs 論文](https://arxiv.org/abs/1903.06048)。 + +## 風格遷移 + +GAN 是生成藝術圖像的絕佳工具。另一種有趣的技術是所謂的**風格遷移**,它將一張**內容圖像**重新繪製成不同的風格,應用來自**風格圖像**的濾鏡。 + +其工作原理如下: +* 我們從隨機噪聲圖像開始(或者從內容圖像開始,但為了便於理解,從隨機噪聲開始更簡單)。 +* 我們的目標是創建一張既接近內容圖像又接近風格圖像的圖像。這由兩個損失函數決定: + - **內容損失**基於 CNN 從當前圖像和內容圖像的某些層提取的特徵計算。 + - **風格損失**通過使用 Gram 矩陣以巧妙的方式計算當前圖像和風格圖像之間的差異(更多細節請參閱[示例筆記本](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb))。 +* 為了使圖像更平滑並去除噪聲,我們還引入了**變異損失**,它計算相鄰像素之間的平均距離。 +* 主要的優化循環使用梯度下降(或其他優化算法)調整當前圖像以最小化總損失,總損失是所有三個損失的加權和。 + +## ✍️ 示例:[風格遷移](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/210) + +## 結論 + +在本課中,你學習了 GANs 及其訓練方法。你還了解了這類神經網絡可能面臨的特殊挑戰,以及一些解決這些挑戰的策略。 + +## 🚀 挑戰 + +使用你的圖像運行[風格遷移筆記本](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)。 + +## 回顧與自學 + +參考以下資源,了解更多關於 GANs 的內容: + +* Marco Pasini,[我在一年內訓練 GANs 的 10 個教訓](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628) +* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN),一個值得考慮的 GAN 架構 +* [在 Azure ML 上使用 GAN 創建生成藝術](https://soshnikov.com/scienceart/creating-generative-art-using-gan-on-azureml/) + +## 作業 + +重新訪問本課程相關的兩個筆記本之一,並使用自己的圖像重新訓練 GAN。你能創造出什麼? + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/11-ObjectDetection/README.md b/translations/tw/lessons/4-ComputerVision/11-ObjectDetection/README.md new file mode 100644 index 00000000..76912735 --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/11-ObjectDetection/README.md @@ -0,0 +1,188 @@ + +# 物件偵測 + +我們之前討論的影像分類模型,主要是將影像輸入並產生一個分類結果,例如在 MNIST 問題中,分類結果是「數字」類別。然而,在許多情況下,我們不僅僅想知道影像中有物件存在,我們還希望能夠確定它們的精確位置。這正是**物件偵測**的目的所在。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/111) + +![物件偵測](../../../../../translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.tw.png) + +> 圖片來源:[YOLO v2 網站](https://pjreddie.com/darknet/yolov2/) + +## 一個簡單的物件偵測方法 + +假設我們想在一張圖片中找到一隻貓,一個非常簡單的物件偵測方法可能如下: + +1. 將圖片分割成多個小區塊。 +2. 對每個區塊進行影像分類。 +3. 將分類結果中激活值足夠高的區塊視為包含目標物件。 + +![簡單的物件偵測](../../../../../translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.tw.png) + +> *圖片來源:[練習筆記本](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection-TF.ipynb)* + +然而,這種方法並不理想,因為它只能非常粗略地定位物件的邊界框。要更精確地定位,我們需要進行某種**回歸**來預測邊界框的座標,而這需要特定的數據集。 + +## 用回歸進行物件偵測 + +[這篇部落格文章](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491)提供了一個非常好的物件偵測入門介紹。 + +## 物件偵測的數據集 + +在進行物件偵測時,你可能會遇到以下數據集: + +* [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 包含 20 個類別 +* [COCO](http://cocodataset.org/#home) - 常見物件的上下文。包含 80 個類別、邊界框和分割遮罩 + +![COCO](../../../../../translated_images/coco-examples.71bc60380fa6cceb7caad48bd09e35b6028caabd363aa04fee89c414e0870e86.tw.jpg) + +## 物件偵測的評估指標 + +### 交集比聯集 (Intersection over Union, IoU) + +在影像分類中,衡量算法表現相對容易,但在物件偵測中,我們需要同時衡量類別的正確性以及推測邊界框位置的精確性。對於後者,我們使用所謂的**交集比聯集** (IoU),它衡量兩個框(或任意兩個區域)的重疊程度。 + +![IoU](../../../../../translated_images/iou_equation.9a4751d40fff4e119ecd0a7bcca4e71ab1dc83e0d4f2a0d66ff0859736f593cf.tw.png) + +> *圖片來源:[這篇優秀的 IoU 部落格文章](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)* + +概念很簡單——將兩個區域的交集面積除以它們的聯集面積。對於完全重疊的區域,IoU 值為 1;對於完全不相交的區域,IoU 值為 0。其他情況下,IoU 值介於 0 到 1 之間。我們通常只考慮 IoU 超過某個值的邊界框。 + +### 平均精度 (Average Precision, AP) + +假設我們想衡量某個類別 $C$ 的物件識別效果。為了衡量它,我們使用**平均精度**指標,其計算方式如下: + +1. 考慮精度-召回曲線,顯示隨著偵測閾值(從 0 到 1)變化的準確性。 +2. 根據閾值,我們會在影像中偵測到更多或更少的物件,並得到不同的精度和召回值。 +3. 曲線看起來如下: + + + +> *圖片來源:[NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + +某個類別 $C$ 的平均精度是該曲線下的面積。更精確地說,召回軸通常分為 10 個部分,精度在所有這些點上進行平均: + +$$ +AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10}) +$$ + +### AP 和 IoU + +我們只考慮那些 IoU 超過某個值的偵測。例如,在 PASCAL VOC 數據集中,通常假設 $\mbox{IoU Threshold} = 0.5$,而在 COCO 數據集中,AP 是針對不同的 $\mbox{IoU Threshold}$ 值進行測量的。 + + + +> *圖片來源:[NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + +### 平均平均精度 - mAP + +物件偵測的主要評估指標是**平均平均精度** (Mean Average Precision, mAP)。它是所有物件類別的平均精度值,有時也包括不同的 $\mbox{IoU Threshold}$。更詳細的 mAP 計算過程可以參考 +[這篇部落格文章](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3),以及[這裡的程式碼範例](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734)。 + +## 不同的物件偵測方法 + +物件偵測算法主要分為兩大類: + +* **區域提案網絡** (Region Proposal Networks)(如 R-CNN、Fast R-CNN、Faster R-CNN)。主要思想是生成**感興趣區域** (ROI),並對其進行 CNN 分析以尋找最大激活值。這與簡單方法有些相似,但 ROI 是以更聰明的方式生成的。這類方法的一個主要缺點是速度較慢,因為需要多次對影像進行 CNN 分析。 +* **單次通過** (One-pass) 方法(如 YOLO、SSD、RetinaNet)。這些架構設計的網絡能在一次通過中同時預測類別和 ROI。 + +### R-CNN: 基於區域的 CNN + +[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf) 使用 [Selective Search](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf) 生成 ROI 區域的層次結構,然後通過 CNN 特徵提取器和 SVM 分類器來確定物件類別,並通過線性回歸來確定*邊界框*座標。[官方論文](https://arxiv.org/pdf/1506.01497v1.pdf) + +![RCNN](../../../../../translated_images/rcnn1.cae407020dfb1d1fb572656e44f75cd6c512cc220591c116c506652c10e47f26.tw.png) + +> *圖片來源:van de Sande et al. ICCV’11* + +![RCNN-1](../../../../../translated_images/rcnn2.2d9530bb83516484ec65b250c22dbf37d3d23244f32864ebcb91d98fe7c3112c.tw.png) + +> *圖片來源:[這篇部落格](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e)* + +### F-RCNN - 快速 R-CNN + +這種方法與 R-CNN 類似,但區域是在卷積層應用後定義的。 + +![FRCNN](../../../../../translated_images/f-rcnn.3cda6d9bb41888754037d2d9763e2298a96de5d9bc2a21db3147357aa5da9b1a.tw.png) + +> 圖片來源:[官方論文](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf),[arXiv](https://arxiv.org/pdf/1504.08083.pdf),2015 + +### Faster R-CNN + +這種方法的主要思想是使用神經網絡來預測 ROI,即所謂的*區域提案網絡*。[論文](https://arxiv.org/pdf/1506.01497.pdf),2016 + +![FasterRCNN](../../../../../translated_images/faster-rcnn.8d46c099b87ef30ab2ea26dbc4bdd85b974a57ba8eb526f65dc4cd0a4711de30.tw.png) + +> 圖片來源:[官方論文](https://arxiv.org/pdf/1506.01497.pdf) + +### R-FCN: 基於區域的全卷積網絡 + +這種算法比 Faster R-CNN 更快。主要思想如下: + +1. 使用 ResNet-101 提取特徵。 +2. 特徵通過**位置敏感分數圖**處理。每個類別 $C$ 的物件被分成 $k\times k$ 區域,我們訓練網絡來預測物件的部分。 +3. 對於 $k\times k$ 區域中的每個部分,所有網絡對物件類別進行投票,選擇得票最多的物件類別。 + +![r-fcn 圖片](../../../../../translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.tw.png) + +> 圖片來源:[官方論文](https://arxiv.org/abs/1605.06409) + +### YOLO - You Only Look Once + +YOLO 是一種即時的單次通過算法。主要思想如下: + + * 將影像分成 $S\times S$ 區域。 + * 對每個區域,**CNN** 預測 $n$ 個可能的物件、*邊界框*座標以及*置信度*=*概率* * IoU。 + + ![YOLO](../../../../../translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.tw.png) + +> 圖片來源:[官方論文](https://arxiv.org/abs/1506.02640) + +### 其他算法 + +* RetinaNet: [官方論文](https://arxiv.org/abs/1708.02002) + - [PyTorch 實現](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) + - [Keras 實現](https://github.com/fizyr/keras-retinanet) + - [RetinaNet 物件偵測](https://keras.io/examples/vision/retinanet/)(Keras 範例) +* SSD (單次偵測器): [官方論文](https://arxiv.org/abs/1512.02325) + +## ✍️ 練習:物件偵測 + +繼續學習以下筆記本: + +[ObjectDetection.ipynb](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) + +## 結論 + +在本課中,你快速瀏覽了各種物件偵測方法! + +## 🚀 挑戰 + +閱讀以下文章和筆記本,並嘗試使用 YOLO: + +* [優秀的部落格文章](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/) 描述 YOLO + * [官方網站](https://pjreddie.com/darknet/yolo/) + * YOLO: [Keras 實現](https://github.com/experiencor/keras-yolo2),[逐步筆記本](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb) + * YOLO v2: [Keras 實現](https://github.com/experiencor/keras-yolo2),[逐步筆記本](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb) + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/211) + +## 回顧與自學 + +* [物件偵測](https://tjmachinelearning.com/lectures/1718/obj/) 作者:Nikhil Sardana +* [物件偵測算法的良好比較](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html) +* [深度學習物件偵測算法回顧](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852) +* [物件偵測算法的逐步介紹](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/) +* [Python 中 Faster R-CNN 的物件偵測實現](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/) + +## [作業:物件偵測](lab/README.md) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md b/translations/tw/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md new file mode 100644 index 00000000..957a697d --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md @@ -0,0 +1,75 @@ + +# 使用 Hollywood Heads 資料集進行頭部檢測 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +在監控攝影機的影片流中計算人數是一項重要的任務,這可以幫助我們估算商店的訪客數量、餐廳的繁忙時段等。為了解決這個任務,我們需要能夠從不同角度檢測出人類的頭部。為了訓練能夠檢測人類頭部的物件檢測模型,我們可以使用 [Hollywood Heads 資料集](https://www.di.ens.fr/willow/research/headdetection/)。 + +## 資料集 + +[Hollywood Heads 資料集](https://www.di.ens.fr/willow/research/headdetection/release/HollywoodHeads.zip) 包含 369,846 個人類頭部的標註,這些標註來自 224,740 幅好萊塢電影的影格。該資料集以 [PASCAL VOC](https://host.robots.ox.ac.uk/pascal/VOC/) 格式提供,其中每張圖片都有一個對應的 XML 描述檔案,格式如下: + +```xml + + HollywoodHeads + mov_021_149390.jpeg + + HollywoodHeads 2015 Database + HollywoodHeads 2015 + WILLOW + + + 608 + 320 + 3 + + 0 + + head + + 201 + 1 + 480 + 263 + + 0 + + + head + + 3 + 4 + 241 + 285 + + 0 + + +``` + +在這個資料集中,只有一種類別的物件 `head`,對於每個頭部,您可以獲取其邊界框的座標。您可以使用 Python 的相關函式庫來解析 XML,或者使用 [這個函式庫](https://pypi.org/project/pascal-voc/) 直接處理 PASCAL VOC 格式。 + +## 訓練物件檢測模型 + +您可以使用以下方法之一來訓練物件檢測模型: + +* 使用 [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste) 和其 Python API,在雲端以程式化方式訓練模型。Custom Vision 無法使用超過幾百張圖片來訓練模型,因此您可能需要限制資料集的大小。 +* 使用 [Keras 教學範例](https://keras.io/examples/vision/retinanet/) 來訓練 RetunaNet 模型。 +* 使用 [torchvision.models.detection.RetinaNet](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) 中的內建模組進行訓練。 + +## 重點 + +物件檢測是業界中經常需要的任務。雖然有一些服務可以用來執行物件檢測(例如 [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste)),但了解物件檢測的運作原理並能夠訓練自己的模型同樣重要。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/12-Segmentation/README.md b/translations/tw/lessons/4-ComputerVision/12-Segmentation/README.md new file mode 100644 index 00000000..3fb65d60 --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/12-Segmentation/README.md @@ -0,0 +1,78 @@ + +# 分割 + +我們之前學習了物件檢測,它可以通過預測物件的*邊界框*來定位圖像中的物件。然而,對於某些任務,我們不僅需要邊界框,還需要更精確的物件定位。這項任務被稱為**分割**。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/112) + +分割可以被視為**像素分類**,也就是說,對圖像中的**每個**像素,我們都必須預測其類別(*背景*也是其中一個類別)。主要有兩種分割算法: + +* **語義分割**僅告訴像素的類別,並不區分同一類別的不同物件。 +* **實例分割**將類別劃分為不同的實例。 + +例如,對於實例分割,這些羊是不同的物件,但對於語義分割,所有的羊都被表示為一個類別。 + + + +> 圖片來源:[這篇部落格文章](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50) + +有多種神經網絡架構可用於分割,但它們的結構都是相似的。在某種程度上,它類似於你之前學習的自編碼器,但我們的目標不是解構原始圖像,而是解構一個**遮罩**。因此,分割網絡包含以下部分: + +* **編碼器**從輸入圖像中提取特徵。 +* **解碼器**將這些特徵轉換為**遮罩圖像**,其大小和通道數與類別數相對應。 + + + +> 圖片來源:[這篇論文](https://arxiv.org/pdf/2001.05566.pdf) + +我們特別需要提到分割中使用的損失函數。在使用經典自編碼器時,我們需要測量兩幅圖像之間的相似性,可以使用均方誤差(MSE)來完成。在分割中,目標遮罩圖像中的每個像素表示類別編號(在第三維度上進行獨熱編碼),因此我們需要使用特定於分類的損失函數——交叉熵損失,並對所有像素取平均值。如果遮罩是二元的,則使用**二元交叉熵損失**(BCE)。 + +> ✅ 獨熱編碼是一種將類別標籤編碼為向量的方法,其長度等於類別數。可以參考[這篇文章](https://datagy.io/sklearn-one-hot-encode/)了解這種技術。 + +## 醫學影像中的分割 + +在本課中,我們將通過訓練網絡識別醫學影像中的人類痣(也稱為痣)來實際應用分割。我們將使用PH2資料庫的皮膚鏡影像作為圖像來源。該數據集包含200幅圖像,分為三類:典型痣、非典型痣和黑色素瘤。所有圖像還包含對應的**遮罩**,用於勾勒痣的輪廓。 + +> ✅ 這種技術特別適合這種類型的醫學影像,但你還能想到哪些現實世界中的應用場景? + +navi + +> 圖片來源:PH2資料庫 + +我們將訓練一個模型,將任何痣從背景中分割出來。 + +## ✍️ 練習:語義分割 + +打開以下筆記本,了解更多不同的語義分割架構,練習使用它們,並觀察它們的實際效果。 + +* [語義分割 Pytorch](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) +* [語義分割 TensorFlow](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/212) + +## 結論 + +分割是一種非常強大的圖像分類技術,從邊界框進一步發展到像素級分類。它在醫學影像等應用中具有廣泛的用途。 + +## 🚀 挑戰 + +人體分割只是我們可以對人物圖像進行的常見任務之一。其他重要任務包括**骨架檢測**和**姿勢檢測**。試試[OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)庫,看看姿勢檢測的應用。 + +## 回顧與自學 + +這篇[維基百科文章](https://wikipedia.org/wiki/Image_segmentation)提供了該技術各種應用的良好概述。自行學習有關實例分割和全景分割這一領域的子領域。 + +## [作業](lab/README.md) + +在本次實驗中,嘗試使用來自 Kaggle 的[Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)進行**人體分割**。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/12-Segmentation/lab/README.md b/translations/tw/lessons/4-ComputerVision/12-Segmentation/lab/README.md new file mode 100644 index 00000000..6e59d1fc --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/12-Segmentation/lab/README.md @@ -0,0 +1,31 @@ + +# 人體分割 + +來自 [AI 初學者課程](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +在視頻製作中,例如天氣預報,我們經常需要將攝像機拍攝的人像剪裁出來,並將其放置在其他畫面之上。這通常使用 **色鍵技術** 完成,當人像在一個統一顏色的背景前拍攝時,背景會被移除。在本次實驗中,我們將訓練一個神經網絡模型來剪裁出人像的輪廓。 + +## 數據集 + +我們將使用 [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset) 來自 Kaggle。請手動從 Kaggle 下載該數據集。 + +## 起始筆記本 + +通過打開 [BodySegmentation.ipynb](../../../../../../lessons/4-ComputerVision/12-Segmentation/lab/BodySegmentation.ipynb) 開始本次實驗。 + +## 收穫 + +人體分割只是我們可以對人像圖像進行的常見任務之一。其他重要任務包括 **骨架檢測** 和 **姿勢檢測**。可以查看 [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) 庫,了解如何實現這些任務。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/README.md b/translations/tw/lessons/4-ComputerVision/README.md new file mode 100644 index 00000000..91c52972 --- /dev/null +++ b/translations/tw/lessons/4-ComputerVision/README.md @@ -0,0 +1,25 @@ + +# 電腦視覺 + +![電腦視覺內容摘要手繪圖](../../../../translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.tw.png) + +在本節中,我們將學習以下內容: + +* [電腦視覺與 OpenCV 簡介](06-IntroCV/README.md) +* [卷積神經網絡](07-ConvNets/README.md) +* [預訓練網絡與遷移學習](08-TransferLearning/README.md) +* [自編碼器](09-Autoencoders/README.md) +* [生成對抗網絡](10-GANs/README.md) +* [物體檢測](11-ObjectDetection/README.md) +* [語義分割](12-Segmentation/README.md) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/13-TextRep/README.md b/translations/tw/lessons/5-NLP/13-TextRep/README.md new file mode 100644 index 00000000..b8ba563c --- /dev/null +++ b/translations/tw/lessons/5-NLP/13-TextRep/README.md @@ -0,0 +1,85 @@ + +# 表示文字為張量 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/113) + +## 文字分類 + +在本節的第一部分中,我們將專注於**文字分類**任務。我們將使用 [AG News](https://www.kaggle.com/amananandrai/ag-news-classification-dataset) 數據集,其中包含以下類型的新聞文章: + +* 類別:科學/技術 +* 標題:Ky. 公司獲得研究肽類的資助 (AP) +* 內容:AP - 一家由路易斯維爾大學化學研究員創立的公司獲得了一項資助,用於開發... + +我們的目標是根據文字將新聞項目分類到其中一個類別。 + +## 表示文字 + +如果我們希望使用神經網絡解決自然語言處理 (NLP) 任務,我們需要某種方式將文字表示為張量。電腦已經使用像 ASCII 或 UTF-8 這樣的編碼將文字字符表示為映射到螢幕字型的數字。 + +顯示字符映射到 ASCII 和二進制表示的圖示 + +> [圖片來源](https://www.seobility.net/en/wiki/ASCII) + +作為人類,我們理解每個字母**代表**什麼,以及所有字符如何組合形成句子的文字。然而,電腦本身並沒有這種理解,神經網絡必須在訓練過程中學習其含義。 + +因此,我們可以使用不同的方法來表示文字: + +* **字符級表示**,即將文字表示為每個字符對應一個數字。假設我們的文字語料庫中有 *C* 個不同的字符,單詞 *Hello* 將表示為 5x*C* 的張量。每個字母在單熱編碼中對應一個張量列。 +* **單詞級表示**,即我們創建一個文字的**詞彙表**,然後使用單熱編碼表示單詞。這種方法相對更好,因為單個字母本身並沒有太多意義,因此使用更高層次的語義概念——單詞——可以簡化神經網絡的任務。然而,由於詞彙表的大小很大,我們需要處理高維稀疏張量。 + +無論使用哪種表示方法,我們首先需要將文字轉換為**標記**序列,每個標記可以是字符、單詞,甚至是單詞的一部分。然後,我們使用**詞彙表**將標記轉換為數字,通常使用單熱編碼,這些數字可以輸入到神經網絡中。 + +## N-Grams + +在自然語言中,單詞的精確含義只能在上下文中確定。例如,*神經網絡* 和 *捕魚網絡* 的含義完全不同。一種考慮上下文的方法是基於單詞對構建模型,並將單詞對作為獨立的詞彙標記。這樣,句子 *I like to go fishing* 將表示為以下標記序列:*I like*、*like to*、*to go*、*go fishing*。這種方法的問題在於詞彙表的大小顯著增長,像 *go fishing* 和 *go shopping* 這樣的組合由不同的標記表示,儘管它們具有相同的動詞,但並不共享任何語義相似性。 + +在某些情況下,我們可能會考慮使用三元組(tri-grams)——三個單詞的組合。因此,這種方法通常被稱為 **n-grams**。此外,使用字符級表示時使用 n-grams 也是有意義的,在這種情況下,n-grams 大致對應於不同的音節。 + +## Bag-of-Words 和 TF/IDF + +在解決像文字分類這樣的任務時,我們需要能夠用一個固定大小的向量表示文字,該向量將作為最終密集分類器的輸入。最簡單的方法之一是結合所有單詞的個別表示,例如通過相加。如果我們相加每個單詞的單熱編碼,我們將得到一個頻率向量,顯示每個單詞在文字中出現的次數。這種文字表示被稱為 **詞袋** (BoW)。 + + + +> 圖片由作者提供 + +詞袋基本上表示了哪些單詞出現在文字中以及它們的數量,這確實可以很好地指示文字的內容。例如,關於政治的新聞文章可能包含 *總統* 和 *國家* 等單詞,而科學出版物可能包含 *對撞機*、*發現* 等。因此,單詞頻率在許多情況下可以很好地指示文字內容。 + +詞袋的問題在於某些常見單詞,例如 *and*、*is* 等,出現在大多數文字中,並且它們的頻率最高,掩蓋了真正重要的單詞。我們可以通過考慮單詞在整個文檔集合中出現的頻率來降低這些單詞的重要性。這是 TF/IDF 方法的主要思想,該方法在本課程附帶的筆記本中有更詳細的介紹。 + +然而,這些方法都無法完全考慮文字的**語義**。我們需要更強大的神經網絡模型來做到這一點,這將在本節後續部分討論。 + +## ✍️ 練習:文字表示 + +在以下筆記本中繼續學習: + +* [使用 PyTorch 表示文字](../../../../../lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) +* [使用 TensorFlow 表示文字](../../../../../lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) + +## 結論 + +到目前為止,我們已經研究了可以為不同單詞添加頻率權重的技術。然而,它們無法表示含義或順序。正如著名語言學家 J. R. Firth 在1935年所說,“單詞的完整含義總是與上下文相關,任何脫離上下文的含義研究都不能被認真對待。”我們將在課程後續部分學習如何使用語言建模從文字中捕捉上下文信息。 + +## 🚀 挑戰 + +嘗試使用詞袋和不同的數據模型進行其他練習。你可能會從這個 [Kaggle 比賽](https://www.kaggle.com/competitions/word2vec-nlp-tutorial/overview/part-1-for-beginners-bag-of-words) 中獲得靈感。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/213) + +## 回顧與自學 + +在 [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) 上練習你的文字嵌入和詞袋技術。 + +## [作業:筆記本](assignment.md) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/13-TextRep/assignment.md b/translations/tw/lessons/5-NLP/13-TextRep/assignment.md new file mode 100644 index 00000000..ead62604 --- /dev/null +++ b/translations/tw/lessons/5-NLP/13-TextRep/assignment.md @@ -0,0 +1,15 @@ + +# 作業:筆記本 + +使用與本課程相關的筆記本(無論是 PyTorch 還是 TensorFlow 版本),使用您自己的數據集重新運行它們,例如來自 Kaggle 的數據集,並記得標註來源。重寫筆記本以強調您自己的發現。嘗試一些可能帶來驚喜的創新數據集,例如來自 NUFORC 的[這個關於 UFO 目擊事件的數據集](https://www.kaggle.com/datasets/NUFORC/ufo-sightings)。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/14-Embeddings/README.md b/translations/tw/lessons/5-NLP/14-Embeddings/README.md new file mode 100644 index 00000000..3c115d47 --- /dev/null +++ b/translations/tw/lessons/5-NLP/14-Embeddings/README.md @@ -0,0 +1,77 @@ + +# 嵌入 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/114) + +在基於 BoW 或 TF/IDF 訓練分類器時,我們操作的是高維度的詞袋向量,其長度為 `vocab_size`,並且我們明確地將低維度的位置表示向量轉換為稀疏的單熱表示。然而,這種單熱表示並不具備記憶效率。此外,每個詞都被獨立地處理,也就是說,單熱編碼的向量無法表達詞與詞之間的語義相似性。 + +**嵌入**的概念是用低維度的密集向量來表示詞,這些向量能夠在某種程度上反映詞的語義。我們稍後會討論如何構建有意義的詞嵌入,但現在我們只需將嵌入理解為降低詞向量維度的一種方法。 + +嵌入層會將一個詞作為輸入,並生成指定 `embedding_size` 的輸出向量。從某種意義上說,它與 `Linear` 層非常相似,但嵌入層不需要單熱編碼向量作為輸入,而是可以直接接受詞的編號作為輸入,從而避免創建大型的單熱編碼向量。 + +通過在分類器網絡中使用嵌入層作為第一層,我們可以從詞袋模型切換到 **嵌入袋** 模型。在嵌入袋模型中,我們首先將文本中的每個詞轉換為相應的嵌入,然後對所有嵌入計算某種聚合函數,例如 `sum`、`average` 或 `max`。 + +![展示五個序列詞的嵌入分類器的圖片。](../../../../../translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.tw.png) + +> 圖片由作者提供 + +## ✍️ 練習:嵌入 + +繼續學習以下筆記本: +* [使用 PyTorch 的嵌入](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) +* [使用 TensorFlow 的嵌入](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) + +## 語義嵌入:Word2Vec + +雖然嵌入層學會了將詞映射到向量表示,但這種表示並不一定具有語義上的意義。我們希望學習一種向量表示,使得相似詞或同義詞在某種向量距離(例如歐幾里得距離)上彼此接近。 + +為了實現這一點,我們需要以特定方式在大量文本集合上預訓練嵌入模型。一種訓練語義嵌入的方法叫做 [Word2Vec](https://en.wikipedia.org/wiki/Word2vec)。它基於兩種主要架構來生成詞的分佈式表示: + +- **連續詞袋** (CBoW) —— 在這種架構中,我們訓練模型根據上下文預測一個詞。給定 ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$,模型的目標是根據 $(W_{-2},W_{-1},W_1,W_2)$ 預測 $W_0$。 +- **連續跳元** (Skip-Gram) —— 與 CBoW 相反,模型使用上下文窗口中的詞來預測當前詞。 + +CBoW 的速度較快,而 Skip-Gram 的速度較慢,但在表示不常見詞方面表現更好。 + +![展示 CBoW 和 Skip-Gram 將詞轉換為向量的算法圖片。](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.tw.png) + +> 圖片來源:[這篇論文](https://arxiv.org/pdf/1301.3781.pdf) + +Word2Vec 預訓練嵌入(以及其他類似模型,例如 GloVe)也可以用於神經網絡中的嵌入層。然而,我們需要處理詞彙表,因為用於預訓練 Word2Vec/GloVe 的詞彙表可能與我們文本語料庫中的詞彙表不同。查看上述筆記本以了解如何解決這個問題。 + +## 上下文嵌入 + +傳統的預訓練嵌入表示(例如 Word2Vec)的一個主要限制是詞義消歧問題。雖然預訓練嵌入可以捕捉詞在上下文中的部分含義,但每個詞的所有可能含義都被編碼到同一嵌入中。這可能會在下游模型中引發問題,因為許多詞(例如 "play")的含義會因上下文而異。 + +例如,詞 "play" 在以下兩個句子中的含義完全不同: + +- 我去劇院看了一場 **戲劇**。 +- 約翰想和朋友們一起 **玩**。 + +上述預訓練嵌入將 "play" 的這兩種含義表示為同一嵌入。為了解決這一限制,我們需要基於 **語言模型** 構建嵌入,該模型在大量文本語料庫上進行訓練,並且「了解」詞如何在不同上下文中組合。討論上下文嵌入超出了本教程的範圍,但我們會在課程後續討論語言模型時回到這個主題。 + +## 結論 + +在本課中,您學習了如何在 TensorFlow 和 Pytorch 中構建和使用嵌入層,以更好地反映詞的語義。 + +## 🚀 挑戰 + +Word2Vec 已被用於一些有趣的應用,包括生成歌曲歌詞和詩歌。查看[這篇文章](https://www.politetype.com/blog/word2vec-color-poems),了解作者如何使用 Word2Vec 生成詩歌。還可以觀看[Dan Shiffmann 的這段視頻](https://www.youtube.com/watch?v=LSS_bos_TPI&ab_channel=TheCodingTrain),了解該技術的另一種解釋。然後嘗試將這些技術應用於您自己的文本語料庫,或許可以從 Kaggle 獲取。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/214) + +## 回顧與自學 + +閱讀這篇關於 Word2Vec 的論文:[Efficient Estimation of Word Representations in Vector Space](https://arxiv.org/pdf/1301.3781.pdf) + +## [作業:筆記本](assignment.md) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/14-Embeddings/assignment.md b/translations/tw/lessons/5-NLP/14-Embeddings/assignment.md new file mode 100644 index 00000000..b8d29da7 --- /dev/null +++ b/translations/tw/lessons/5-NLP/14-Embeddings/assignment.md @@ -0,0 +1,15 @@ + +# 作業:筆記本 + +使用與本課程相關的筆記本(無論是 PyTorch 或 TensorFlow 版本),使用您自己的數據集重新執行,或許可以使用 Kaggle 上的數據集,並註明來源。重寫筆記本以強調您自己的發現。嘗試使用不同類型的數據集並記錄您的發現,例如使用[這些 Beatles 歌詞](https://www.kaggle.com/datasets/jenlooper/beatles-lyrics)。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/15-LanguageModeling/README.md b/translations/tw/lessons/5-NLP/15-LanguageModeling/README.md new file mode 100644 index 00000000..b1edcbc3 --- /dev/null +++ b/translations/tw/lessons/5-NLP/15-LanguageModeling/README.md @@ -0,0 +1,54 @@ + +# 語言建模 + +語意嵌入(例如 Word2Vec 和 GloVe)實際上是邁向**語言建模**的第一步——建立能夠以某種方式*理解*(或*表示*)語言特性的模型。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/115) + +語言建模的核心理念是以無監督的方式在未標註的數據集上進行訓練。這很重要,因為我們擁有大量未標註的文本,而標註文本的數量則受限於我們能投入的標註工作量。通常,我們可以建立能夠**預測缺失詞**的語言模型,因為在文本中隨機遮蔽一個詞並將其作為訓練樣本是相對容易的。 + +## 嵌入訓練 + +在之前的例子中,我們使用了預訓練的語意嵌入,但了解這些嵌入是如何訓練的也非常有趣。有幾種可能的想法可以用於訓練: + +* **N-Gram** 語言建模,通過查看前 N 個詞元(N-gram)來預測一個詞元。 +* **連續詞袋模型** (CBoW),在詞元序列 $W_{-N}$, ..., $W_N$ 中預測中間詞元 $W_0$。 +* **Skip-gram**,從中間詞元 $W_0$ 預測一組相鄰詞元 {$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$}。 + +![將詞轉換為向量的算法示例](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.tw.png) + +> 圖片來源:[這篇論文](https://arxiv.org/pdf/1301.3781.pdf) + +## ✍️ 範例筆記本:訓練 CBoW 模型 + +繼續學習以下筆記本: + +* [使用 TensorFlow 訓練 CBoW Word2Vec](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) +* [使用 PyTorch 訓練 CBoW Word2Vec](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) + +## 結論 + +在上一課中,我們看到詞嵌入的效果就像魔法一樣!現在我們知道,訓練詞嵌入並不是一項非常複雜的任務,如果需要,我們應該能夠為特定領域的文本訓練自己的詞嵌入。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/215) + +## 回顧與自學 + +* [PyTorch 官方語言建模教程](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html)。 +* [TensorFlow 官方訓練 Word2Vec 模型教程](https://www.TensorFlow.org/tutorials/text/word2vec)。 +* 使用 **gensim** 框架訓練最常用的嵌入只需幾行代碼,詳情請參閱[此文檔](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html)。 + +## 🚀 [作業:訓練 Skip-Gram 模型](lab/README.md) + +在實驗中,我們挑戰你修改本課的代碼以訓練 Skip-Gram 模型,而非 CBoW。[閱讀詳情](lab/README.md)。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/15-LanguageModeling/lab/README.md b/translations/tw/lessons/5-NLP/15-LanguageModeling/lab/README.md new file mode 100644 index 00000000..5f8323b1 --- /dev/null +++ b/translations/tw/lessons/5-NLP/15-LanguageModeling/lab/README.md @@ -0,0 +1,38 @@ + +# 訓練 Skip-Gram 模型 + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +在本次實驗中,我們挑戰你使用 Skip-Gram 技術訓練 Word2Vec 模型。訓練一個帶有嵌入層的網絡,來預測 $N$ 個詞範圍內 Skip-Gram 窗口中的相鄰詞。你可以使用[本課程的代碼](../../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb),稍作修改即可。 + +## 數據集 + +你可以使用任何一本書作為數據集。在 [Project Gutenberg](https://www.gutenberg.org/) 上可以找到許多免費文本,例如,這裡有 Lewis Carroll 的《愛麗絲夢遊仙境》的[直接鏈接](https://www.gutenberg.org/files/11/11-0.txt)。或者,你也可以使用莎士比亞的戲劇,以下代碼可以幫助你獲取: + +```python +path_to_file = tf.keras.utils.get_file( + 'shakespeare.txt', + 'https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt') +text = open(path_to_file, 'rb').read().decode(encoding='utf-8') +``` + +## 探索! + +如果你有時間並且想更深入了解這個主題,可以嘗試探索以下幾個方面: + +* 嵌入層的大小如何影響結果? +* 不同的文本風格如何影響結果? +* 選擇幾個非常不同類型的詞及其同義詞,獲取它們的向量表示,應用 PCA 將維度降至 2,並在 2D 空間中繪製它們。你能看到任何模式嗎? + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/16-RNN/README.md b/translations/tw/lessons/5-NLP/16-RNN/README.md new file mode 100644 index 00000000..772795ca --- /dev/null +++ b/translations/tw/lessons/5-NLP/16-RNN/README.md @@ -0,0 +1,96 @@ + +# 循環神經網路 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/116) + +在之前的章節中,我們使用了豐富的文本語義表示以及嵌入層上的簡單線性分類器。這種架構能夠捕捉句子中詞語的聚合意義,但它無法考慮詞語的**順序**,因為嵌入層上的聚合操作會移除原始文本中的這些信息。由於這些模型無法建模詞語的順序,它們無法解決更複雜或模糊的任務,例如文本生成或問題回答。 + +為了捕捉文本序列的意義,我們需要使用另一種神經網路架構,稱為**循環神經網路**(Recurrent Neural Network,RNN)。在 RNN 中,我們將句子逐個符號傳遞給網路,網路會生成某種**狀態**,然後將該狀態與下一個符號一起再次傳遞給網路。 + +![RNN](../../../../../translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.tw.png) + +> 圖片由作者提供 + +給定輸入序列的符號 X0,...,Xn,RNN 會創建一系列神經網路模塊,並通過反向傳播端到端訓練這個序列。每個網路模塊接受一對 (Xi,Si) 作為輸入,並生成 Si+1 作為結果。最終的狀態 Sn 或 (輸出 Yn) 會進入線性分類器以生成結果。所有的網路模塊共享相同的權重,並通過一次反向傳播端到端訓練。 + +由於狀態向量 S0,...,Sn 被傳遞給網路,它能夠學習詞語之間的序列依賴性。例如,當某個序列中出現詞語 *not* 時,它可以學習在狀態向量中否定某些元素,從而實現否定。 + +> ✅ 由於上圖中所有 RNN 模塊的權重是共享的,因此同一圖可以表示為右側的一個模塊,具有循環反饋迴路,將網路的輸出狀態回傳到輸入。 + +## RNN 單元的結構 + +讓我們來看看一個簡單的 RNN 單元是如何組織的。它接受前一狀態 Si-1 和當前符號 Xi 作為輸入,並需要生成輸出狀態 Si(有時我們也對其他輸出 Yi 感興趣,例如在生成網路的情況下)。 + +一個簡單的 RNN 單元內部有兩個權重矩陣:一個用於轉換輸入符號(我們稱之為 W),另一個用於轉換輸入狀態(H)。在這種情況下,網路的輸出計算公式為 σ(W×Xi+H×Si-1+b),其中 σ 是激活函數,b 是額外的偏置。 + +RNN Cell Anatomy + +> 圖片由作者提供 + +在許多情況下,輸入符號會在進入 RNN 之前通過嵌入層以降低維度。在這種情況下,如果輸入向量的維度是 *emb_size*,而狀態向量是 *hid_size*,則 W 的大小為 *emb_size*×*hid_size*,H 的大小為 *hid_size*×*hid_size*。 + +## 長短期記憶(LSTM) + +經典 RNN 的主要問題之一是所謂的**梯度消失**問題。由於 RNN 是通過一次反向傳播端到端訓練的,它很難將誤差傳遞到網路的第一層,因此網路無法學習遠距符號之間的關係。解決這個問題的一種方法是通過使用所謂的**門**引入**顯式狀態管理**。有兩種著名的架構:**長短期記憶**(Long Short Term Memory,LSTM)和**門控遞歸單元**(Gated Relay Unit,GRU)。 + +![Image showing an example long short term memory cell](../../../../../lessons/5-NLP/16-RNN/images/long-short-term-memory-cell.svg) + +> 圖片來源待定 + +LSTM 網路的組織方式與 RNN 類似,但有兩個狀態會在層與層之間傳遞:實際狀態 C 和隱藏向量 H。在每個單元中,隱藏向量 Hi 與輸入 Xi 進行拼接,並通過**門**控制狀態 C 的變化。每個門都是具有 sigmoid 激活(輸出範圍 [0,1])的神經網路,可以通過與狀態向量相乘來視為逐位掩碼。以下是各個門的功能(從上圖左到右): + +* **遺忘門**:接收隱藏向量並決定需要遺忘狀態向量 C 的哪些部分,哪些需要保留。 +* **輸入門**:從輸入和隱藏向量中提取信息並插入到狀態中。 +* **輸出門**:通過具有 *tanh* 激活的線性層轉換狀態,然後使用隱藏向量 Hi 選擇其部分組件以生成新狀態 Ci+1。 + +狀態 C 的組件可以被視為一些可以開啟或關閉的標誌。例如,當我們在序列中遇到名字 *Alice* 時,我們可能會假設它指的是女性角色,並在狀態中設置一個標誌,表示句子中有一個女性名詞。當我們進一步遇到短語 *and Tom* 時,我們會設置一個標誌,表示句子中有複數名詞。因此,通過操作狀態,我們可以追蹤句子部分的語法屬性。 + +> ✅ 理解 LSTM 內部運作的絕佳資源是 Christopher Olah 的這篇精彩文章 [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/)。 + +## 雙向與多層 RNN + +我們已經討論了單向運作的循環網路,從序列的開頭到結尾。這看起來很自然,因為它類似於我們閱讀和聽取語音的方式。然而,由於在許多實際情況下我們可以隨機訪問輸入序列,因此同時在兩個方向上進行循環計算可能更有意義。這樣的網路稱為**雙向** RNN。在處理雙向網路時,我們需要兩個隱藏狀態向量,每個方向一個。 + +循環網路,無論是單向還是雙向,都能捕捉序列中的某些模式,並將其存儲到狀態向量中或傳遞到輸出中。與卷積網路類似,我們可以在第一層之上構建另一個循環層,以捕捉更高層次的模式,並從第一層提取的低層次模式中構建。這引出了**多層 RNN** 的概念,它由兩個或更多的循環網路組成,前一層的輸出作為下一層的輸入。 + +![Image showing a Multilayer long-short-term-memory- RNN](../../../../../translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.tw.jpg) + +*圖片來自 [這篇精彩文章](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) 作者 Fernando López* + +## ✍️ 練習:嵌入層 + +在以下筆記本中繼續學習: + +* [使用 PyTorch 的 RNN](../../../../../lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) +* [使用 TensorFlow 的 RNN](../../../../../lessons/5-NLP/16-RNN/RNNTF.ipynb) + +## 結論 + +在本單元中,我們了解到 RNN 可用於序列分類,但事實上,它們可以處理更多任務,例如文本生成、機器翻譯等。我們將在下一單元中探討這些任務。 + +## 🚀 挑戰 + +閱讀一些關於 LSTM 的文獻並考慮其應用: + +- [Grid Long Short-Term Memory](https://arxiv.org/pdf/1507.01526v1.pdf) +- [Show, Attend and Tell: Neural Image Caption +Generation with Visual Attention](https://arxiv.org/pdf/1502.03044v2.pdf) + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/216) + +## 回顧與自學 + +- [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) 作者 Christopher Olah。 + +## [作業:筆記本](assignment.md) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/16-RNN/assignment.md b/translations/tw/lessons/5-NLP/16-RNN/assignment.md new file mode 100644 index 00000000..53dfa8bc --- /dev/null +++ b/translations/tw/lessons/5-NLP/16-RNN/assignment.md @@ -0,0 +1,15 @@ + +# 作業:筆記本 + +使用與本課程相關的筆記本(無論是 PyTorch 或 TensorFlow 版本),使用您自己的數據集重新運行它們,例如來自 Kaggle 的數據集,並記得標註來源。重寫筆記本以強調您自己的發現。嘗試使用不同類型的數據集,並記錄您的發現,例如使用像 [這個關於天氣推文的 Kaggle 比賽數據集](https://www.kaggle.com/competitions/crowdflower-weather-twitter/data?select=train.csv) 這樣的文本描述。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/17-GenerativeNetworks/README.md b/translations/tw/lessons/5-NLP/17-GenerativeNetworks/README.md new file mode 100644 index 00000000..a3d923ca --- /dev/null +++ b/translations/tw/lessons/5-NLP/17-GenerativeNetworks/README.md @@ -0,0 +1,88 @@ + +# 生成式網絡 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/117) + +循環神經網絡(RNN)及其門控單元變體,例如長短期記憶單元(LSTM)和門控循環單元(GRU),提供了一種語言建模的機制,因為它們可以學習單詞的排列順序,並對序列中的下一個單詞進行預測。這使得我們可以使用 RNN 進行**生成任務**,例如普通文本生成、機器翻譯,甚至圖像描述。 + +> ✅ 想一想你在輸入時受益於文本補全等生成任務的所有情況。研究一下你喜愛的應用程序,看看它們是否利用了 RNN。 + +在上一單元中討論的 RNN 架構中,每個 RNN 單元會生成下一個隱藏狀態作為輸出。然而,我們也可以為每個循環單元添加另一個輸出,這樣就可以輸出一個**序列**(其長度等於原始序列)。此外,我們可以使用不在每一步接受輸入的 RNN 單元,而僅接受一些初始狀態向量,然後生成一個輸出序列。 + +這使得可以構建不同的神經網絡架構,如下圖所示: + +![顯示常見循環神經網絡模式的圖片。](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.tw.jpg) + +> 圖片來自 [Andrej Karpaty](http://karpathy.github.io/) 的博客文章 [Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) + +* **一對一** 是一個傳統的神經網絡,具有一個輸入和一個輸出 +* **一對多** 是一種生成式架構,接受一個輸入值,並生成一個輸出值序列。例如,如果我們想訓練一個**圖像描述**網絡來生成圖片的文字描述,我們可以將圖片作為輸入,通過 CNN 獲取其隱藏狀態,然後使用一個循環鏈逐字生成描述。 +* **多對一** 對應於我們在上一單元中描述的 RNN 架構,例如文本分類 +* **多對多** 或 **序列對序列** 對應於例如**機器翻譯**的任務,其中第一個 RNN 將輸入序列中的所有信息收集到隱藏狀態中,然後另一個 RNN 鏈將該狀態展開為輸出序列。 + +在本單元中,我們將專注於幫助我們生成文本的簡單生成模型。為了簡化,我們將使用字符級標記化。 + +我們將訓練這個 RNN 逐步生成文本。在每一步中,我們將取一個長度為 `nchars` 的字符序列,並要求網絡為每個輸入字符生成下一個輸出字符: + +![顯示 RNN 生成單詞 'HELLO' 的示例圖片。](../../../../../translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.tw.png) + +在生成文本(推理過程中)時,我們從某個**提示**開始,將其傳遞給 RNN 單元以生成其中間狀態,然後從該狀態開始生成。我們一次生成一個字符,並將狀態和生成的字符傳遞給另一個 RNN 單元以生成下一個字符,直到生成足夠的字符。 + + + +> 圖片由作者提供 + +## ✍️ 練習:生成式網絡 + +在以下筆記本中繼續學習: + +* [使用 PyTorch 的生成式網絡](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) +* [使用 TensorFlow 的生成式網絡](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) + +## 軟文本生成與溫度 + +每個 RNN 單元的輸出是一個字符的概率分佈。如果我們總是選擇概率最高的字符作為生成文本中的下一個字符,文本往往會在相同的字符序列之間反覆循環,如以下示例所示: + +``` +today of the second the company and a second the company ... +``` + +然而,如果我們查看下一個字符的概率分佈,可能會發現幾個最高概率之間的差異並不大,例如一個字符的概率可能是 0.2,另一個是 0.19,等等。例如,在查找序列 '*play*' 的下一個字符時,下一個字符可能是空格,也可能是 **e**(如單詞 *player* 中)。 + +這讓我們得出結論,選擇概率最高的字符並不總是“公平”的,因為選擇第二高的字符仍然可能導致有意義的文本。更明智的做法是從網絡輸出的概率分佈中**抽樣**字符。我們還可以使用一個參數,**溫度**,來平滑概率分佈,如果我們想增加隨機性,或者使其更陡峭,如果我們想更傾向於最高概率的字符。 + +在上面鏈接的筆記本中探索這種軟文本生成的實現方式。 + +## 結論 + +雖然文本生成本身可能很有用,但主要的好處來自於能夠使用 RNN 從某些初始特徵向量生成文本。例如,文本生成被用作機器翻譯的一部分(序列對序列,在這種情況下,*編碼器* 的狀態向量被用來生成或*解碼*翻譯的消息),或者生成圖像的文字描述(在這種情況下,特徵向量來自 CNN 提取器)。 + +## 🚀 挑戰 + +在 Microsoft Learn 上學習一些相關課程 + +* 使用 [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/6-generative-networks/?WT.mc_id=academic-77998-cacaste)/[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/5-generative-networks/?WT.mc_id=academic-77998-cacaste) 進行文本生成 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/217) + +## 回顧與自學 + +以下是一些擴展知識的文章 + +* 使用馬爾可夫鏈、LSTM 和 GPT-2 進行文本生成的不同方法:[博客文章](https://towardsdatascience.com/text-generation-gpt-2-lstm-markov-chain-9ea371820e1e) +* [Keras 文檔](https://keras.io/examples/generative/lstm_character_level_text_generation/)中的文本生成示例 + +## [作業](lab/README.md) + +我們已經了解了如何逐字符生成文本。在實驗中,您將探索基於單詞的文本生成。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/17-GenerativeNetworks/lab/README.md b/translations/tw/lessons/5-NLP/17-GenerativeNetworks/lab/README.md new file mode 100644 index 00000000..67976502 --- /dev/null +++ b/translations/tw/lessons/5-NLP/17-GenerativeNetworks/lab/README.md @@ -0,0 +1,23 @@ + +# 使用 RNN 進行詞級文本生成 + +來自 [AI 初學者課程](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +在這次實驗中,你需要選擇任意一本書,並將其作為數據集來訓練詞級文本生成器。 + +## 數據集 + +你可以使用任何一本書作為數據集。你可以在 [Project Gutenberg](https://www.gutenberg.org/) 找到許多免費文本,例如,這裡是 Lewis Carroll 的《愛麗絲夢遊仙境》的直接連結:[Alice's Adventures in Wonderland](https://www.gutenberg.org/files/11/11-0.txt)。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/18-Transformers/README.md b/translations/tw/lessons/5-NLP/18-Transformers/README.md new file mode 100644 index 00000000..e6cb056d --- /dev/null +++ b/translations/tw/lessons/5-NLP/18-Transformers/README.md @@ -0,0 +1,121 @@ + +# 注意力機制與Transformer + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/118) + +在自然語言處理(NLP)領域中,**機器翻譯**是一個非常重要的問題,這是支撐像 Google 翻譯這類工具的核心任務。在本節中,我們將專注於機器翻譯,或者更廣泛地說,任何*序列到序列*的任務(也稱為**句子轉換**)。 + +使用 RNN 時,序列到序列的實現是通過兩個遞歸網路完成的,其中一個網路(**編碼器**)將輸入序列壓縮為隱藏狀態,而另一個網路(**解碼器**)將該隱藏狀態展開為翻譯結果。然而,這種方法存在一些問題: + +* 編碼器網路的最終狀態很難記住句子的開頭,導致模型在處理長句子時效果不佳。 +* 序列中的所有詞對結果的影響相同。然而,實際上,輸入序列中的某些特定詞往往對輸出序列的影響更大。 + +**注意力機制**提供了一種方法,能夠為每個輸出預測加權每個輸入向量的上下文影響。其實現方式是通過在輸入 RNN 的中間狀態與輸出 RNN 之間創建捷徑。這樣,在生成輸出符號 yt 時,我們會考慮所有輸入的隱藏狀態 hi,並賦予不同的權重係數 αt,i。 + +![顯示具有加性注意力層的編碼器/解碼器模型的圖片](../../../../../translated_images/encoder-decoder-attention.7a726296894fb567aa2898c94b17b3289087f6705c11907df8301df9e5eeb3de.tw.png) + +> [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) 中的加性注意力機制編碼器-解碼器模型,圖片來源於[這篇博客文章](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html) + +注意力矩陣 {αi,j} 表示某些輸入詞在生成輸出序列中特定詞時所起的作用程度。以下是一個這樣的矩陣示例: + +![顯示 RNNsearch-50 找到的樣本對齊的圖片,取自 Bahdanau - arviz.org](../../../../../translated_images/bahdanau-fig3.09ba2d37f202a6af11de6c82d2d197830ba5f4528d9ea430eb65fd3a75065973.tw.png) + +> 圖片來自 [Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf)(圖3) + +注意力機制是當前或接近當前 NLP 領域最先進技術的關鍵因素。然而,添加注意力機制會大幅增加模型參數的數量,這導致了 RNN 的擴展問題。RNN 的一個主要限制是其遞歸特性使得訓練過程難以批量化和並行化。在 RNN 中,序列的每個元素都需要按順序處理,這意味著它無法輕易並行化。 + +![具有注意力的編碼器解碼器](../../../../../lessons/5-NLP/18-Transformers/images/EncDecAttention.gif) + +> 圖片來自 [Google 的博客](https://research.googleblog.com/2016/09/a-neural-network-for-machine.html) + +注意力機制的採用結合了這一限制,促成了如今我們所熟知和使用的最先進 Transformer 模型的誕生,例如 BERT 和 Open-GPT3。 + +## Transformer 模型 + +Transformer 的核心思想之一是避免 RNN 的序列特性,並創建一個在訓練過程中可並行化的模型。這是通過實現以下兩個概念來完成的: + +* 位置編碼 +* 使用自注意力機制來捕捉模式,而不是使用 RNN(或 CNN)(這也是為什麼介紹 Transformer 的論文被稱為 *[Attention is all you need](https://arxiv.org/abs/1706.03762)*) + +### 位置編碼/嵌入 + +位置編碼的概念如下: +1. 使用 RNN 時,詞元的相對位置由步數表示,因此不需要顯式表示。 +2. 然而,一旦我們切換到注意力機制,我們需要知道序列中詞元的相對位置。 +3. 為了獲得位置編碼,我們將詞元序列與序列中的詞元位置序列(即數字序列 0,1, ...)結合。 +4. 然後,我們將詞元位置與詞元嵌入向量混合。為了將位置(整數)轉換為向量,我們可以使用不同的方法: + +* 可訓練嵌入,類似於詞元嵌入。我們在此採用這種方法。我們在詞元和它們的位置上應用嵌入層,生成相同維度的嵌入向量,然後將它們相加。 +* 固定位置編碼函數,這是原始論文中提出的方法。 + + + +> 圖片由作者提供 + +通過位置嵌入,我們可以將原始詞元及其在序列中的位置嵌入到一起。 + +### 多頭自注意力 + +接下來,我們需要在序列中捕捉一些模式。為此,Transformer 使用了**自注意力**機制,這本質上是將注意力應用於相同的輸入和輸出序列。應用自注意力使我們能夠考慮句子中的**上下文**,並查看哪些詞是相互關聯的。例如,它可以幫助我們理解代詞(如 *it*)所指代的詞,並考慮上下文: + +![](../../../../../translated_images/CoreferenceResolution.861924d6d384a7d68d8d0039d06a71a151f18a796b8b1330239d3590bd4947eb.tw.png) + +> 圖片來自 [Google 博客](https://research.googleblog.com/2017/08/transformer-novel-neural-network.html) + +在 Transformer 中,我們使用**多頭注意力**來賦予網路捕捉多種類型依賴關係的能力,例如長期與短期詞關係、共指關係與其他關係等。 + +[TensorFlow Notebook](../../../../../lessons/5-NLP/18-Transformers/TransformersTF.ipynb) 包含有關 Transformer 層實現的更多細節。 + +### 編碼器-解碼器注意力 + +在 Transformer 中,注意力機制用於兩個地方: + +* 使用自注意力捕捉輸入文本中的模式 +* 執行序列翻譯——這是編碼器和解碼器之間的注意力層。 + +編碼器-解碼器注意力與本節開頭描述的 RNN 中的注意力機制非常相似。以下動畫圖解釋了編碼器-解碼器注意力的作用。 + +![顯示 Transformer 模型中計算過程的動畫 GIF](../../../../../lessons/5-NLP/18-Transformers/images/transformer-animated-explanation.gif) + +由於每個輸入位置可以獨立映射到每個輸出位置,Transformer 比 RNN 更容易並行化,這使得更大且更具表達力的語言模型成為可能。每個注意力頭可以用於學習不同的詞之間的關係,從而改進下游的自然語言處理任務。 + +## BERT + +**BERT**(Bidirectional Encoder Representations from Transformers)是一個非常大的多層 Transformer 網路,*BERT-base* 有 12 層,*BERT-large* 有 24 層。該模型首先在大規模文本數據(維基百科 + 書籍)上進行無監督訓練(預測句子中的被遮蔽詞)。在預訓練過程中,模型吸收了大量的語言理解能力,這些能力可以通過微調其他數據集來利用。這個過程被稱為**遷移學習**。 + +![圖片來自 http://jalammar.github.io/illustrated-bert/](../../../../../translated_images/jalammarBERT-language-modeling-masked-lm.34f113ea5fec4362e39ee4381aab7cad06b5465a0b5f053a0f2aa05fbe14e746.tw.png) + +> 圖片 [來源](http://jalammar.github.io/illustrated-bert/) + +## ✍️ 練習:Transformer + +在以下筆記本中繼續學習: + +* [PyTorch 中的 Transformer](../../../../../lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) +* [TensorFlow 中的 Transformer](../../../../../lessons/5-NLP/18-Transformers/TransformersTF.ipynb) + +## 結論 + +在本課中,您學習了 Transformer 和注意力機制,這些都是 NLP 工具箱中的重要工具。Transformer 架構有許多變體,包括 BERT、DistilBERT、BigBird、OpenGPT3 等,可以進行微調。[HuggingFace 套件](https://github.com/huggingface/) 提供了用 PyTorch 和 TensorFlow 訓練這些架構的資源庫。 + +## 🚀 挑戰 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/218) + +## 回顧與自學 + +* [博客文章](https://mchromiak.github.io/articles/2017/Sep/12/Transformer-Attention-is-all-you-need/),解釋了經典的 [Attention is all you need](https://arxiv.org/abs/1706.03762) 論文。 +* [一系列博客文章](https://towardsdatascience.com/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452),詳細解釋了 Transformer 的架構。 + +## [作業](assignment.md) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/18-Transformers/assignment.md b/translations/tw/lessons/5-NLP/18-Transformers/assignment.md new file mode 100644 index 00000000..eb92c4eb --- /dev/null +++ b/translations/tw/lessons/5-NLP/18-Transformers/assignment.md @@ -0,0 +1,15 @@ + +# 作業:Transformers + +在 HuggingFace 上嘗試使用 Transformers!試著使用他們提供的腳本,來操作網站上各種可用的模型:https://huggingface.co/docs/transformers/run_scripts。嘗試使用他們的一個數據集,然後從本課程或 Kaggle 匯入一個你自己的數據集,看看是否能生成有趣的文本。製作一個筆記本來記錄你的發現。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/19-NER/README.md b/translations/tw/lessons/5-NLP/19-NER/README.md new file mode 100644 index 00000000..6d450afe --- /dev/null +++ b/translations/tw/lessons/5-NLP/19-NER/README.md @@ -0,0 +1,93 @@ + +# 命名實體識別 + +到目前為止,我們主要集中在一個 NLP 任務——分類。然而,還有其他 NLP 任務可以通過神經網絡完成。其中一個任務是 **[命名實體識別](https://wikipedia.org/wiki/Named-entity_recognition)** (NER),它處理識別文本中的特定實體,例如地點、人物姓名、日期時間範圍、化學公式等。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/119) + +## 使用 NER 的範例 + +假設你想開發一個自然語言聊天機器人,類似於 Amazon Alexa 或 Google Assistant。智能聊天機器人的工作方式是通過對輸入句子進行文本分類來*理解*使用者的需求。分類的結果是所謂的 **意圖**,它決定了聊天機器人應該執行的操作。 + +Bot NER + +> 圖片由作者提供 + +然而,使用者可能會在短語中提供一些參數。例如,當詢問天氣時,她可能會指定地點或日期。機器人應該能夠理解這些實體,並相應地填充參數槽,然後執行操作。而這正是 NER 的作用所在。 + +> ✅ 另一個範例是 [分析科學醫學論文](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)。我們需要尋找的主要內容是特定的醫學術語,例如疾病和醫學物質。雖然少量疾病可能可以通過子字串搜索提取,但更複雜的實體,例如化學化合物和藥物名稱,則需要更複雜的方法。 + +## NER 作為標記分類 + +NER 模型本質上是 **標記分類模型**,因為對於每個輸入標記,我們需要決定它是否屬於某個實體,如果屬於——屬於哪個實體類別。 + +考慮以下論文標題: + +**三尖瓣反流** 和 **碳酸鋰** **毒性** 在一名新生兒中。 + +這裡的實體是: + +* 三尖瓣反流是一種疾病 (`DIS`) +* 碳酸鋰是一種化學物質 (`CHEM`) +* 毒性也是一種疾病 (`DIS`) + +注意,一個實體可能跨越多個標記。而且,如本例所示,我們需要區分兩個連續的實體。因此,通常為每個實體使用兩個類別——一個指定實體的第一個標記(通常使用 `B-` 前綴,表示 **開始**),另一個表示實體的延續部分(`I-`,表示 **內部標記**)。我們還使用 `O` 作為類別來表示所有 **其他** 標記。這種標記標籤方法稱為 [BIO 標籤](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging))(或 IOB)。標記後,我們的標題將如下所示: + +標記 | 標籤 +------|----- +三尖瓣 | B-DIS +反流 | I-DIS +和 | O +碳酸 | B-CHEM +鋰 | I-CHEM +毒性 | B-DIS +在 | O +一名 | O +新生兒 | O +中 | O +。 | O + +由於我們需要在標記和類別之間建立一對一的對應關係,我們可以從這個圖中訓練一個最右側的 **多對多** 神經網絡模型: + +![顯示常見循環神經網絡模式的圖片。](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.tw.jpg) + +> *圖片來自 [這篇部落格文章](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) 作者 [Andrej Karpathy](http://karpathy.github.io/)。NER 標記分類模型對應於此圖片中的最右側網絡架構。* + +## 訓練 NER 模型 + +由於 NER 模型本質上是標記分類模型,我們可以使用我們已熟悉的 RNN 來完成這項任務。在這種情況下,每個循環網絡的區塊都會返回標記 ID。以下範例筆記本展示了如何訓練 LSTM 進行標記分類。 + +## ✍️ 範例筆記本:NER + +繼續學習以下筆記本: + +* [使用 TensorFlow 的 NER](../../../../../lessons/5-NLP/19-NER/NER-TF.ipynb) + +## 結論 + +NER 模型是一種 **標記分類模型**,這意味著它可以用於執行標記分類。這是一個 NLP 中非常常見的任務,有助於識別文本中的特定實體,包括地點、姓名、日期等。 + +## 🚀 挑戰 + +完成以下連結的作業,訓練一個醫學術語的命名實體識別模型,然後嘗試在不同的數據集上進行測試。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/219) + +## 回顧與自學 + +閱讀部落格文章 [循環神經網絡的非凡效能](http://karpathy.github.io/2015/05/21/rnn-effectiveness/),並按照文章中的進一步閱讀部分加深你的知識。 + +## [作業](lab/README.md) + +在本課程的作業中,你需要訓練一個醫學實體識別模型。你可以從本課程中描述的 LSTM 模型訓練開始,然後使用 BERT 轉換器模型。閱讀 [指導說明](lab/README.md) 以獲取所有詳細資訊。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/19-NER/lab/README.md b/translations/tw/lessons/5-NLP/19-NER/lab/README.md new file mode 100644 index 00000000..96765bd1 --- /dev/null +++ b/translations/tw/lessons/5-NLP/19-NER/lab/README.md @@ -0,0 +1,59 @@ + +# 命名實體識別 (NER) + +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 + +## 任務 + +在這個實驗中,你需要訓練一個針對醫學術語的命名實體識別模型。 + +## 數據集 + +為了訓練 NER 模型,我們需要一個正確標註的醫學實體數據集。[BC5CDR 數據集](https://biocreative.bioinformatics.udel.edu/tasks/biocreative-v/track-3-cdr/) 包含來自超過 1500 篇論文的疾病和化學實體標註。你可以在其網站註冊後下載該數據集。 + +BC5CDR 數據集的格式如下: + +``` +6794356|t|Tricuspid valve regurgitation and lithium carbonate toxicity in a newborn infant. +6794356|a|A newborn with massive tricuspid regurgitation, atrial flutter, congestive heart failure, and a high serum lithium level is described. This is the first patient to initially manifest tricuspid regurgitation and atrial flutter, and the 11th described patient with cardiac disease among infants exposed to lithium compounds in the first trimester of pregnancy. Sixty-three percent of these infants had tricuspid valve involvement. Lithium carbonate may be a factor in the increasing incidence of congenital heart disease when taken during early pregnancy. It also causes neurologic depression, cyanosis, and cardiac arrhythmia when consumed prior to delivery. +6794356 0 29 Tricuspid valve regurgitation Disease D014262 +6794356 34 51 lithium carbonate Chemical D016651 +6794356 52 60 toxicity Disease D064420 +... +``` + +在這個數據集中,第一行和第二行分別是論文標題和摘要,接下來是個別的實體,包含其在標題+摘要區塊中的起始和結束位置。除了實體類型外,你還可以獲得該實體在某些醫學本體中的本體 ID。 + +你需要撰寫一些 Python 程式碼,將其轉換為 BIO 編碼格式。 + +## 網絡架構 + +第一次嘗試 NER 可以使用 LSTM 網絡,就像你在課堂中看到的範例一樣。然而,在 NLP 任務中,[Transformer 架構](https://en.wikipedia.org/wiki/Transformer_(machine_learning_model)),特別是 [BERT 語言模型](https://en.wikipedia.org/wiki/BERT_(language_model)),通常能夠取得更好的結果。預訓練的 BERT 模型能夠理解語言的基本結構,並且可以用相對較小的數據集和計算成本進行特定任務的微調。 + +由於我們計劃將 NER 應用於醫學場景,因此使用在醫學文本上訓練的 BERT 模型是合理的選擇。Microsoft Research 發布了一個名為 [PubMedBERT][PubMedBERT] 的預訓練模型([相關論文][PubMedBERT-Pub]),該模型使用 [PubMed](https://pubmed.ncbi.nlm.nih.gov/) 資料庫中的文本進行了微調。 + +訓練 Transformer 模型的事實標準是 [Hugging Face Transformers](https://huggingface.co/) 庫。該庫還包含一個由社群維護的預訓練模型庫,包括 PubMedBERT。要加載並使用此模型,我們只需要幾行程式碼: + +```python +model_name = "microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract" +classes = ... # number of classes: 2*entities+1 +tokenizer = AutoTokenizer.from_pretrained(model_name) +model = BertForTokenClassification.from_pretrained(model_name, classes) +``` + +這段程式碼為我們提供了用於標記分類任務的 `model`(使用 `classes` 數量的類別),以及可以將輸入文本分割為標記的 `tokenizer` 物件。你需要將數據集轉換為 BIO 格式,並考慮到 PubMedBERT 的標記化方式。你可以參考 [這段 Python 程式碼](https://gist.github.com/shwars/580b55684be3328eb39ecf01b9cbbd88) 作為靈感。 + +## 收穫 + +這項任務非常接近於你在實際工作中可能遇到的任務,特別是當你希望從大量自然語言文本中獲取更多洞見時。在我們的案例中,我們可以將訓練好的模型應用於 [COVID 相關論文數據集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge),看看我們能夠獲得哪些洞見。[這篇部落格文章](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/) 和 [這篇論文](https://www.mdpi.com/2504-2289/6/1/4) 描述了可以使用 NER 在這些論文語料庫上進行的研究。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/20-LangModels/README.md b/translations/tw/lessons/5-NLP/20-LangModels/README.md new file mode 100644 index 00000000..1d0a1f61 --- /dev/null +++ b/translations/tw/lessons/5-NLP/20-LangModels/README.md @@ -0,0 +1,64 @@ + +# 預訓練大型語言模型 + +在我們之前的所有任務中,我們都是使用標註數據集來訓練神經網絡以執行特定任務。而對於像 BERT 這樣的大型 Transformer 模型,我們使用自監督的方式進行語言建模來構建語言模型,然後通過進一步的特定領域訓練將其專門化用於特定的下游任務。然而,已經證明大型語言模型也可以在沒有任何特定領域訓練的情況下解決許多任務。能夠做到這一點的一類模型被稱為 **GPT**:生成式預訓練 Transformer。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/120) + +## 文本生成與困惑度 + +神經網絡能夠在沒有下游訓練的情況下執行通用任務的想法,來自於 [Language Models are Unsupervised Multitask Learners](https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf) 這篇論文。其主要思想是,許多其他任務可以通過 **文本生成** 來建模,因為理解文本本質上意味著能夠生成文本。由於模型是在包含人類知識的大量文本上進行訓練的,因此它也對各種主題變得熟悉。 + +> 理解並能夠生成文本也意味著對我們周圍的世界有所了解。人類在很大程度上也是通過閱讀來學習的,而 GPT 網絡在這方面與人類相似。 + +文本生成網絡通過預測下一個單詞的概率 $$P(w_N)$$ 來工作。然而,下一個單詞的無條件概率等於該單詞在文本語料庫中的出現頻率。GPT 能夠給出基於前面單詞的下一個單詞的 **條件概率**:$$P(w_N | w_{n-1}, ..., w_0)$$ + +> 您可以在我們的 [初學者數據科學課程](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/1-Introduction/04-stats-and-probability) 中了解更多關於概率的內容。 + +語言生成模型的質量可以通過 **困惑度** 來定義。這是一種內在的度量,允許我們在沒有任何特定任務數據集的情況下衡量模型的質量。它基於 *句子的概率* 的概念——模型對可能是真實的句子賦予高概率(即模型對此不 **困惑**),而對於不太合理的句子(例如 *Can it does what?*)賦予低概率。當我們給模型提供來自真實文本語料庫的句子時,我們期望它們具有高概率和低 **困惑度**。數學上,困惑度定義為測試集的歸一化逆概率: +$$ +\mathrm{Perplexity}(W) = \sqrt[N]{1\over P(W_1,...,W_N)} +$$ + +**您可以使用 [Hugging Face 提供的 GPT 驅動文本編輯器](https://transformer.huggingface.co/doc/gpt2-large)** 來試驗文本生成。在這個編輯器中,您可以開始撰寫文本,按下 **[TAB]** 鍵會為您提供幾個補全選項。如果它們太短或您不滿意,請再次按下 [TAB],您將獲得更多選項,包括更長的文本片段。 + +## GPT 是一個家族 + +GPT 並不是單一的模型,而是一系列由 [OpenAI](https://openai.com) 開發和訓練的模型。 + +在 GPT 模型家族中,我們有: + +| [GPT-2](https://huggingface.co/docs/transformers/model_doc/gpt2#openai-gpt2) | [GPT-3](https://openai.com/research/language-models-are-few-shot-learners) | [GPT-4](https://openai.com/gpt-4) | +| -- | -- | -- | +|語言模型,參數量高達 15 億。| 語言模型,參數量高達 1750 億 | 參數量達到 100 萬億,接受圖像和文本輸入,並輸出文本。| + +GPT-3 和 GPT-4 模型可以通過 [Microsoft Azure 的認知服務](https://azure.microsoft.com/en-us/services/cognitive-services/openai-service/#overview?WT.mc_id=academic-77998-cacaste) 或 [OpenAI API](https://openai.com/api/) 獲得。 + +## 提示工程 + +由於 GPT 已經在大量數據上進行了訓練,能夠理解語言和代碼,因此它可以根據輸入(提示)生成輸出。提示是 GPT 的輸入或查詢,通過它用戶向模型提供任務指令以完成下一步操作。為了獲得期望的結果,您需要最有效的提示,這涉及選擇合適的詞語、格式、短語甚至符號。這種方法被稱為 [提示工程](https://learn.microsoft.com/en-us/shows/ai-show/the-basics-of-prompt-engineering-with-azure-openai-service?WT.mc_id=academic-77998-bethanycheum)。 + +[此文檔](https://learn.microsoft.com/en-us/semantic-kernel/prompt-engineering/?WT.mc_id=academic-77998-bethanycheum) 提供了有關提示工程的更多信息。 + +## ✍️ 範例筆記本:[與 OpenAI-GPT 的互動](../../../../../lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) + +繼續學習以下筆記本: + +* [使用 OpenAI-GPT 和 Hugging Face Transformers 生成文本](../../../../../lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) + +## 結論 + +新的通用預訓練語言模型不僅建模語言結構,還包含大量的自然語言知識。因此,它們可以在零樣本或少樣本設置中有效地解決一些 NLP 任務。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/220) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/5-NLP/README.md b/translations/tw/lessons/5-NLP/README.md new file mode 100644 index 00000000..75208e4d --- /dev/null +++ b/translations/tw/lessons/5-NLP/README.md @@ -0,0 +1,78 @@ + +# 自然語言處理 + +![NLP任務摘要手繪圖](../../../../translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.tw.png) + +在本章節中,我們將專注於使用神經網絡來處理與**自然語言處理 (NLP)**相關的任務。我們希望電腦能夠解決許多NLP問題: + +* **文本分類**是一種典型的分類問題,針對文本序列進行分類。例如,將電子郵件分類為垃圾郵件或非垃圾郵件,或者將文章分類為體育、商業、政治等。此外,在開發聊天機器人時,我們通常需要理解使用者的意圖——這就是所謂的**意圖分類**。意圖分類通常需要處理多個類別。 +* **情感分析**是一種典型的回歸問題,我們需要為句子的正面/負面情感賦予一個數值。一種更高級的情感分析是**基於方面的情感分析** (ABSA),它不是為整個句子賦予情感,而是為句子的不同部分(方面)賦予情感,例如:*在這家餐廳,我喜歡菜餚,但氛圍很糟糕*。 +* **命名實體識別** (NER) 是指從文本中提取特定實體的問題。例如,我們需要理解在句子*我明天要飛往巴黎*中,*明天*指的是日期,*巴黎*是地點。 +* **關鍵字提取**類似於NER,但我們需要自動提取對句子含義重要的詞語,而不需要針對特定實體類型進行預訓練。 +* **文本聚類**在需要將相似的句子分組時非常有用,例如技術支持對話中的相似請求。 +* **問答**是指模型回答特定問題的能力。模型接收一段文本和一個問題作為輸入,並需要提供文本中包含答案的位置(有時需要生成答案文本)。 +* **文本生成**是指模型生成新文本的能力。它可以被視為一種分類任務,根據某些*文本提示*預測下一個字母/單詞。高級文本生成模型,例如GPT-3,能夠通過使用[提示編程](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0)或[提示工程](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)技術來解決其他NLP任務,例如分類。 +* **文本摘要**是一種技術,當我們希望電腦“閱讀”長文本並用幾句話進行摘要時使用。 +* **機器翻譯**可以被視為一種結合一種語言的文本理解和另一種語言的文本生成的技術。 + +最初,大多數NLP任務是使用傳統方法(例如語法)來解決的。例如,在機器翻譯中,解析器被用來將初始句子轉換為語法樹,然後提取高層語義結構以表示句子的含義,基於這些含義和目標語言的語法生成結果。如今,許多NLP任務使用神經網絡更有效地解決。 + +> 許多經典的NLP方法已在[自然語言處理工具包 (NLTK)](https://www.nltk.org) Python庫中實現。線上有一本很棒的[NLTK書籍](https://www.nltk.org/book/),涵蓋了如何使用NLTK解決不同的NLP任務。 + +在我們的課程中,我們將主要專注於使用神經網絡進行NLP,並在需要時使用NLTK。 + +我們已經學習了如何使用神經網絡處理表格數據和圖像。這些數據類型與文本的主要區別在於,文本是一種可變長度的序列,而圖像的輸入大小是事先已知的。雖然卷積網絡可以從輸入數據中提取模式,但文本中的模式更為複雜。例如,否定可能與主語分隔許多詞語(例如:*我不喜歡橙子*,與*我不喜歡那些又大又多彩又美味的橙子*),但仍應被解釋為一個模式。因此,為了處理語言,我們需要引入新的神經網絡類型,例如*循環網絡*和*Transformer*。 + +## 安裝庫 + +如果您使用本地Python環境運行本課程,可能需要使用以下命令安裝所有NLP所需的庫: + +**PyTorch** +```bash +pip install -r requirements-torch.txt +``` +**TensorFlow** +```bash +pip install -r requirements-tf.txt +``` + +> 您可以在[Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste)上嘗試使用TensorFlow進行NLP。 + +## GPU警告 + +在本章節中,我們的一些範例將訓練相當大的模型。 +* **使用支持GPU的電腦**:建議在支持GPU的電腦上運行您的筆記本,以減少處理大型模型時的等待時間。 +* **GPU記憶體限制**:使用GPU可能會導致GPU記憶體不足的情況,特別是在訓練大型模型時。 +* **GPU記憶體消耗**:訓練過程中GPU記憶體的消耗取決於多種因素,包括小批量大小。 +* **減少小批量大小**:如果遇到GPU記憶體問題,可以考慮減少代碼中的小批量大小作為解決方案。 +* **TensorFlow GPU記憶體釋放**:舊版本的TensorFlow可能無法正確釋放GPU記憶體,特別是在一個Python內核中訓練多個模型時。為了有效管理GPU記憶體使用,您可以配置TensorFlow僅在需要時分配GPU記憶體。 +* **代碼包含**:要設置TensorFlow僅在需要時增長GPU記憶體分配,請在您的筆記本中包含以下代碼: + +```python +physical_devices = tf.config.list_physical_devices('GPU') +if len(physical_devices)>0: + tf.config.experimental.set_memory_growth(physical_devices[0], True) +``` + +如果您對從經典機器學習角度學習NLP感興趣,請訪問[這套課程](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)。 + +## 本章節內容 +在本章節中,我們將學習: + +* [將文本表示為張量](13-TextRep/README.md) +* [詞嵌入](14-Emdeddings/README.md) +* [語言建模](15-LanguageModeling/README.md) +* [循環神經網絡](16-RNN/README.md) +* [生成式網絡](17-GenerativeNetworks/README.md) +* [Transformer](18-Transformers/README.md) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/6-Other/21-GeneticAlgorithms/README.md b/translations/tw/lessons/6-Other/21-GeneticAlgorithms/README.md new file mode 100644 index 00000000..2a14f560 --- /dev/null +++ b/translations/tw/lessons/6-Other/21-GeneticAlgorithms/README.md @@ -0,0 +1,90 @@ + +# 基因演算法 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/121) + +**基因演算法** (GA) 是基於一種**演化式方法**的人工智慧技術,透過模擬族群的演化過程來尋找特定問題的最佳解。基因演算法由 [John Henry Holland](https://wikipedia.org/wiki/John_Henry_Holland) 在1975年提出。 + +基因演算法的核心概念包括: + +* 問題的有效解可以用**基因**來表示 +* **交叉**允許我們結合兩個解,生成新的有效解 +* **選擇**透過某種**適應度函數**來挑選更優的解 +* **突變**用於打破局部最小值的限制,促進全局最佳化 + +如果你想要實現基因演算法,需要以下幾個步驟: + +* 找到一種方法,使用**基因** g∈Γ 來編碼問題的解 +* 在基因集合 Γ 上定義**適應度函數** fit: Γ→**R**,函數值越小表示解越好 +* 定義**交叉**機制,用於結合兩個基因以生成新的有效解 crossover: Γ2→Γ +* 定義**突變**機制 mutate: Γ→Γ + +在許多情況下,交叉和突變通常是操作基因(如數字序列或位元向量)的簡單算法。 + +基因演算法的具體實現可能因案例而異,但其整體結構如下: + +1. 選擇初始族群 G⊂Γ +2. 隨機選擇本步驟要執行的操作:交叉或突變 +3. **交叉**: + * 隨機選擇兩個基因 g1, g2 ∈ G + * 計算交叉結果 g=crossover(g1,g2) + * 如果 fit(g)1) 或 fit(g)2),則用 g 替換族群中的相應基因 +4. **突變** - 隨機選擇基因 g∈G,並用 mutate(g) 替換 +5. 從第2步重複,直到適應度函數值足夠小,或達到步驟數限制。 + +## 常見任務 + +基因演算法通常用於解決以下任務: + +1. 排程最佳化 +1. 最佳化物品打包 +1. 最佳化切割 +1. 加速窮舉搜索 + +## ✍️ 練習:基因演算法 + +繼續學習以下筆記本中的內容: + +前往[此筆記本](../../../../../lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb),查看基因演算法的兩個應用範例: + +1. 公平分配寶藏 +1. 八皇后問題 + +## 結論 + +基因演算法被用於解決許多問題,包括物流和搜索問題。這個領域的靈感來自心理學與計算機科學的交叉研究。 + +## 🚀 挑戰 + +「基因演算法易於實現,但其行為難以理解。」[來源](https://wikipedia.org/wiki/Genetic_algorithm) +進行一些研究,找到基因演算法的實現範例,例如解數獨問題,並以草圖或流程圖的形式解釋其工作原理。 + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/221) + +## 回顧與自學 + +觀看[這部精彩影片](https://www.youtube.com/watch?v=qv6UVOQ0F44),了解計算機如何使用基因演算法訓練的神經網絡學習玩超級瑪利歐。我們將在[下一節](../22-DeepRL/README.md)中學習更多類似的遊戲學習技術。 + +## [作業:丟番圖方程](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) + +你的目標是解決所謂的**丟番圖方程**——一種具有整數根的方程。例如,考慮方程 a+2b+3c+4d=30,你需要找到滿足此方程的整數根。 + +*此作業的靈感來自[這篇文章](https://habr.com/post/128704/)。* + +提示: + +1. 可以考慮根的範圍為 [0;30] +1. 作為基因,可以使用根值的列表 + +使用 [Diophantine.ipynb](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) 作為起點。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/lessons/6-Other/22-DeepRL/README.md b/translations/tw/lessons/6-Other/22-DeepRL/README.md new file mode 100644 index 00000000..63ad6d18 --- /dev/null +++ b/translations/tw/lessons/6-Other/22-DeepRL/README.md @@ -0,0 +1,126 @@ + +# 深度強化學習 + +強化學習(Reinforcement Learning, RL)被視為與監督學習和非監督學習並列的基本機器學習範式之一。在監督學習中,我們依賴於已知結果的數據集,而強化學習則基於**透過實踐學習**。例如,當我們第一次接觸一款電腦遊戲時,即使不知道規則,我們也會開始玩,並且很快能透過遊玩過程和調整行為來提升技能。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/122) + +要進行強化學習,我們需要: + +* 一個**環境**或**模擬器**,用來設定遊戲規則。我們應該能夠在模擬器中運行實驗並觀察結果。 +* 一個**獎勵函數**,用來指示我們的實驗是否成功。例如,在學習玩電腦遊戲的情況下,獎勵可以是我們的最終得分。 + +基於獎勵函數,我們應該能夠調整行為並提升技能,以便下次表現得更好。強化學習與其他類型的機器學習的主要區別在於,在強化學習中,我們通常不知道自己是否贏了或輸了,直到遊戲結束。因此,我們無法判斷某個單獨的動作是否是好的——我們只能在遊戲結束時收到獎勵。 + +在強化學習過程中,我們通常會進行許多實驗。在每次實驗中,我們需要在遵循目前學到的最佳策略(**利用**)和探索新的可能狀態(**探索**)之間取得平衡。 + +## OpenAI Gym + +一個非常適合強化學習的工具是 [OpenAI Gym](https://gym.openai.com/)——一個**模擬環境**,可以模擬從 Atari 遊戲到平衡桿物理學等多種環境。它是訓練強化學習算法最受歡迎的模擬環境之一,由 [OpenAI](https://openai.com/) 維護。 + +> **Note**: 你可以在 [這裡](https://gym.openai.com/envs/#classic_control) 查看 OpenAI Gym 提供的所有環境。 + +## CartPole 平衡 + +你可能見過現代的平衡裝置,例如 *Segway* 或 *陀螺車*。它們能夠通過調整輪子的運動來自動平衡,這是基於加速度計或陀螺儀的信號。在本節中,我們將學習如何解決一個類似的問題——平衡一根桿子。這類似於馬戲團表演者需要在手上平衡一根桿子的情況——但這裡的平衡僅發生在一維空間中。 + +一個簡化的平衡問題被稱為 **CartPole** 問題。在 CartPole 世界中,我們有一個可以左右移動的水平滑塊,目標是讓垂直桿子在滑塊上保持平衡。 + +a cartpole + +要創建並使用這個環境,我們需要幾行 Python 代碼: + +```python +import gym +env = gym.make("CartPole-v1") + +env.reset() +done = False +total_reward = 0 +while not done: + env.render() + action = env.action_space.sample() + observaton, reward, done, info = env.step(action) + total_reward += reward + +print(f"Total reward: {total_reward}") +``` + +每個環境都可以以相同的方式訪問: +* `env.reset` 開始一個新的實驗 +* `env.step` 執行一個模擬步驟。它接收來自**動作空間**的一個**動作**,並返回一個**觀察值**(來自觀察空間),以及一個獎勵和一個終止標誌。 + +在上面的例子中,我們在每一步執行隨機動作,因此實驗的壽命非常短: + +![non-balancing cartpole](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-nobalance.gif) + +強化學習算法的目標是訓練一個模型——所謂的**策略** π——它能根據給定的狀態返回相應的動作。我們也可以將策略視為概率性的,例如,對於任何狀態 *s* 和動作 *a*,它將返回應該在狀態 *s* 下採取動作 *a* 的概率 π(*a*|*s*)。 + +## 策略梯度算法 + +建模策略的最明顯方法是創建一個神經網絡,該網絡將狀態作為輸入,並返回相應的動作(或者更確切地說,是所有動作的概率)。在某種意義上,這類似於普通的分類任務,但有一個主要區別——我們事先不知道在每一步應該採取哪些動作。 + +這裡的想法是估計這些概率。我們構建一個**累積獎勵**向量,顯示實驗中每一步的總獎勵。我們還應用**獎勵折扣**,通過將早期的獎勵乘以某個係數 γ=0.99,來減少早期獎勵的影響。然後,我們強化實驗路徑中產生較大獎勵的那些步驟。 + +> 想了解更多關於策略梯度算法的內容,並查看其實際應用,請參考[示例筆記本](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb)。 + +## Actor-Critic 算法 + +策略梯度方法的一個改進版本被稱為 **Actor-Critic**。其主要思想是神經網絡將被訓練來返回兩個結果: + +* 策略,決定應該採取的動作。這部分被稱為 **actor**。 +* 對於當前狀態下可以期望獲得的總獎勵的估計——這部分被稱為 **critic**。 + +在某種意義上,這種架構類似於 [GAN](../../4-ComputerVision/10-GANs/README.md),我們有兩個網絡相互對抗訓練。在 Actor-Critic 模型中,actor 提出我們需要採取的動作,而 critic 嘗試批判性地估計結果。然而,我們的目標是讓這兩個網絡協同訓練。 + +由於我們知道實驗中的真實累積獎勵以及 critic 返回的結果,因此構建一個損失函數來最小化它們之間的差異相對容易。這將給我們**critic 損失**。我們可以使用與策略梯度算法相同的方法計算**actor 損失**。 + +運行這些算法之一後,我們可以期望 CartPole 表現如下: + +![a balancing cartpole](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-balance.gif) + +## ✍️ 練習:策略梯度和 Actor-Critic 強化學習 + +在以下筆記本中繼續學習: + +* [TensorFlow 中的強化學習](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) +* [PyTorch 中的強化學習](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) + +## 其他強化學習任務 + +強化學習如今是一個快速增長的研究領域。一些有趣的強化學習例子包括: + +* 教電腦玩 **Atari 遊戲**。這個問題的挑戰在於,我們沒有簡單的向量形式的狀態,而是截圖——我們需要使用 CNN 將這些屏幕圖像轉換為特徵向量,或者提取獎勵信息。Atari 遊戲可在 Gym 中使用。 +* 教電腦下棋,例如國際象棋和圍棋。最近,像 **Alpha Zero** 這樣的最先進程序是通過兩個代理相互對弈並在每一步中改進來從零開始訓練的。 +* 在工業中,強化學習被用於從模擬中創建控制系統。一個名為 [Bonsai](https://azure.microsoft.com/services/project-bonsai/?WT.mc_id=academic-77998-cacaste) 的服務專門為此設計。 + +## 結論 + +我們現在已經學會了如何通過提供定義遊戲期望狀態的獎勵函數,並給予智能探索搜索空間的機會,來訓練代理以取得良好結果。我們成功嘗試了兩種算法,並在相對較短的時間內取得了良好的結果。然而,這只是你進入強化學習領域的起點,如果你想深入研究,應該考慮參加一門專門的課程。 + +## 🚀 挑戰 + +探索「其他強化學習任務」部分列出的應用,並嘗試實現其中一個! + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/222) + +## 回顧與自學 + +在我們的 [初學者機器學習課程](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/README.md) 中了解更多關於經典強化學習的內容。 + +觀看[這段精彩的影片](https://www.youtube.com/watch?v=qv6UVOQ0F44),了解電腦如何學會玩《超級瑪利歐》。 + +## 作業:[訓練一輛山地車](lab/README.md) + +在這次作業中,你的目標是訓練一個不同的 Gym 環境——[山地車](https://www.gymlibrary.ml/environments/classic_control/mountain_car/)。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/lessons/6-Other/22-DeepRL/lab/README.md b/translations/tw/lessons/6-Other/22-DeepRL/lab/README.md new file mode 100644 index 00000000..cbfbecd9 --- /dev/null +++ b/translations/tw/lessons/6-Other/22-DeepRL/lab/README.md @@ -0,0 +1,23 @@ + +## 環境介紹 + +Mountain Car 環境是一個汽車被困在山谷中的情境。你的目標是跳出山谷並到達旗幟所在的位置。你可以執行的動作包括向左加速、向右加速或保持不動。你可以觀察汽車在 x 軸上的位置以及速度。 + +## 啟動筆記本 + +通過打開 [MountainCar.ipynb](../../../../../../lessons/6-Other/22-DeepRL/lab/MountainCar.ipynb) 開始這次實驗。 + +## 重點 + +在這次實驗中,你應該學到將 RL 演算法應用到新環境通常是相當直接的,因為 OpenAI Gym 的所有環境都具有相同的介面,而演算法本身並不過度依賴環境的特性。你甚至可以重新組織 Python 程式碼,以便將任何環境作為參數傳遞給 RL 演算法。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/6-Other/23-MultiagentSystems/README.md b/translations/tw/lessons/6-Other/23-MultiagentSystems/README.md new file mode 100644 index 00000000..9b47d401 --- /dev/null +++ b/translations/tw/lessons/6-Other/23-MultiagentSystems/README.md @@ -0,0 +1,164 @@ + +# 多代理系統 + +實現智慧的一種可能方法是所謂的**湧現**(或**協同**)方法,這基於以下事實:許多相對簡單的代理的組合行為可以導致整個系統的更複雜(或更智能)的行為。理論上,這基於[集體智慧](https://en.wikipedia.org/wiki/Collective_intelligence)、[湧現主義](https://en.wikipedia.org/wiki/Global_brain)和[演化控制論](https://en.wikipedia.org/wiki/Global_brain)的原則,這些原則指出,當低層系統被適當地組合成高層系統時,會產生某種附加價值(即所謂的*超系統轉換原則*)。 + +## [課前測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/123) + +**多代理系統**的方向在1990年代因應互聯網和分散式系統的增長而在人工智慧領域中湧現。經典的人工智慧教科書之一[《人工智慧:現代方法》](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach)從多代理系統的角度探討了經典人工智慧的觀點。 + +多代理方法的核心概念是**代理**——一個存在於某個**環境**中的實體,它可以感知並對環境進行操作。這是一個非常廣泛的定義,代理可以有許多不同的類型和分類: + +* 根據其推理能力: + - **反應型**代理通常具有簡單的請求-響應類型行為 + - **推理型**代理使用某種邏輯推理和/或規劃能力 +* 根據代理執行代碼的位置: + - **靜態**代理在專用的網絡節點上工作 + - **移動**代理可以在網絡節點之間移動其代碼 +* 根據其行為: + - **被動代理**沒有特定目標。這類代理可以對外部刺激作出反應,但不會主動採取行動。 + - **主動代理**有一些目標並努力追求 + - **認知代理**涉及複雜的規劃和推理 + +如今,多代理系統被應用於許多領域: + +* 在遊戲中,許多非玩家角色使用某種人工智慧,可以被視為智能代理 +* 在視頻製作中,渲染涉及人群的複雜3D場景通常使用多代理模擬 +* 在系統建模中,多代理方法用於模擬複雜模型的行為。例如,多代理方法已成功用於預測COVID-19疾病在全球的傳播。類似的方法可以用於模擬城市交通,並觀察其對交通規則變化的反應。 +* 在複雜的自動化系統中,每個設備可以作為獨立的代理,這使得整個系統不再是單一的,並且更加穩健。 + +我們不會花太多時間深入探討多代理系統,但會考慮一個**多代理建模**的例子。 + +## NetLogo + +[NetLogo](https://ccl.northwestern.edu/netlogo/)是一個基於修改版[Logo](https://en.wikipedia.org/wiki/Logo_(programming_language))編程語言的多代理建模環境。這種語言是為了教孩子編程概念而開發的,它允許你控制一個名為**烏龜**的代理,該代理可以移動並留下痕跡。這使得創建複雜的幾何圖形成為可能,這是一種非常直觀的方式來理解代理的行為。 + +在NetLogo中,我們可以使用`create-turtles`命令創建許多烏龜。然後我們可以命令所有烏龜執行一些動作(例如下面的例子中向前移動10點): + +``` +create-turtles 10 +ask turtles [ + forward 10 +] +``` + +當然,所有烏龜都做同樣的事情並不有趣,因此我們可以`ask`某些烏龜群體,例如那些在某個點附近的烏龜。我們還可以使用`breed [cats cat]`命令創建不同*品種*的烏龜。這裡`cat`是品種的名稱,我們需要指定單數和複數形式,因為不同的命令使用不同的形式以提高清晰度。 + +> ✅ 我們不會深入學習NetLogo語言本身——如果你有興趣了解更多,可以訪問出色的[初學者互動式NetLogo詞典](https://ccl.northwestern.edu/netlogo/bind/)資源。 + +你可以[下載](https://ccl.northwestern.edu/netlogo/download.shtml)並安裝NetLogo來試用。 + +### 模型庫 + +NetLogo的一大優勢是它包含一個可供試用的工作模型庫。進入**File → Models Library**,你可以選擇許多類別的模型。 + +NetLogo模型庫 + +> Dmitry Soshnikov提供的模型庫截圖 + +你可以打開其中一個模型,例如**Biology → Flocking**。 + +### 主要原則 + +打開模型後,你會進入NetLogo的主界面。以下是一個描述狼和羊的種群模型,給定有限資源(草地)。 + +![NetLogo主界面](../../../../../translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.tw.png) + +> Dmitry Soshnikov提供的截圖 + +在這個界面上,你可以看到: + +* **界面**部分包含: + - 所有代理生活的主要場地 + - 不同的控制項:按鈕、滑塊等 + - 用於顯示模擬參數的圖表 +* **代碼**標籤包含編輯器,你可以在其中輸入NetLogo程序 + +在大多數情況下,界面會有一個**Setup**按鈕,用於初始化模擬狀態,以及一個**Go**按鈕,用於開始執行。這些按鈕由代碼中的相應處理程序處理,代碼看起來像這樣: + +``` +to go [ +... +] +``` + +NetLogo的世界由以下對象組成: + +* **代理**(烏龜)可以在場地上移動並執行某些操作。你可以使用`ask turtles [...]`語法命令代理,括號中的代碼由所有代理以*烏龜模式*執行。 +* **補丁**是場地上的方形區域,代理生活在其上。你可以引用同一補丁上的所有代理,或者更改補丁顏色和其他屬性。你也可以`ask patches`執行某些操作。 +* **觀察者**是一個獨特的代理,控制整個世界。所有按鈕處理程序都以*觀察者模式*執行。 + +> ✅ 多代理環境的美妙之處在於,烏龜模式或補丁模式下運行的代碼由所有代理並行執行。因此,通過編寫少量代碼並編程個別代理的行為,你可以創建整個模擬系統的複雜行為。 + +### 群聚行為 + +作為多代理行為的例子,我們來看看**[群聚行為](https://en.wikipedia.org/wiki/Flocking_(behavior))**。群聚是一種複雜模式,非常類似於鳥群的飛行方式。觀察它們飛行時,你可能會認為它們遵循某種集體算法,或者擁有某種*集體智慧*。然而,這種複雜行為的產生是因為每個個體代理(在這種情況下是一隻*鳥*)只觀察距離它很近的其他代理,並遵循三個簡單的規則: + +* **對齊**——朝鄰近代理的平均方向轉向 +* **凝聚**——朝鄰居的平均位置轉向(*長距吸引*) +* **分離**——當靠近其他鳥時,試圖遠離(*短距排斥*) + +你可以運行群聚行為的例子並觀察其行為。你還可以調整參數,例如*分離程度*或*視距範圍*,定義每隻鳥能看到多遠。注意,如果你將視距範圍減少到0,所有鳥都變得盲目,群聚行為停止。如果你將分離減少到0,所有鳥聚集成一條直線。 + +> ✅ 切換到**代碼**標籤,查看群聚行為的三個規則(對齊、凝聚和分離)如何在代碼中實現。注意我們如何僅引用視距範圍內的代理。 + +### 其他可觀察的模型 + +還有一些有趣的模型可以供你實驗: + +* **Art → Fireworks**展示了如何將煙火視為個別火流的集體行為 +* **Social Science → Traffic Basic**和**Social Science → Traffic Grid**展示了城市交通在1D和2D網格中有或沒有交通燈的模型。模擬中的每輛車遵循以下規則: + - 如果前方空間是空的——加速(直到某個最大速度) + - 如果看到前方有障礙物——剎車(你可以調整司機的視距範圍) +* **Social Science → Party**展示了人們在雞尾酒會上如何聚集。你可以找到能最快提升群體幸福感的參數組合。 + +從這些例子中可以看出,多代理模擬是一種非常有用的方法,可以理解由遵循相同或相似邏輯的個體組成的複雜系統的行為。它還可以用於控制虛擬代理,例如電腦遊戲中的[非玩家角色](https://en.wikipedia.org/wiki/NPC),或3D動畫世界中的代理。 + +## 推理型代理 + +上述代理非常簡單,使用某種算法對環境變化作出反應。因此,它們是**反應型代理**。然而,有時代理可以進行推理和規劃其行動,這種情況下它們被稱為**推理型代理**。 + +一個典型的例子是個人代理接收到人類指令去預訂度假行程。假設互聯網上有許多代理可以幫助它。它需要聯繫其他代理以查看哪些航班可用,不同日期的酒店價格是多少,並嘗試談判最佳價格。當度假計劃完成並得到主人確認後,它可以進行預訂。 + +為了做到這一點,代理需要**溝通**。成功溝通需要: + +* 一些**交換知識的標準語言**,例如[知識交換格式](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format)(KIF)和[知識查詢與操作語言](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language)(KQML)。這些語言基於[言語行為理論](https://en.wikipedia.org/wiki/Speech_act)設計。 +* 這些語言還應包括一些基於不同**拍賣類型**的**談判協議**。 +* 使用的**共同本體**,以便它們引用相同的概念並了解其語義 +* 一種**發現**不同代理能做什麼的方法,也基於某種本體 + +推理型代理比反應型代理更複雜,因為它們不僅對環境變化作出反應,還應能夠*主動*採取行動。一種提出的推理型代理架構是所謂的信念-願望-意圖(BDI)代理: + +* **信念**形成代理對環境的知識集。它可以結構化為知識庫或代理可以應用於環境中特定情況的一組規則。 +* **願望**定義代理想要做什麼,即其目標。例如,上述個人助理代理的目標是預訂行程,而酒店代理的目標是最大化利潤。 +* **意圖**是代理為實現其目標而計劃的具體行動。行動通常改變環境並導致與其他代理的溝通。 + +有一些平台可用於構建多代理系統,例如[JADE](https://jade.tilab.com/)。[這篇論文](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf)包含了多代理平台的回顧,以及多代理系統的簡史及其不同的使用場景。 + +## 結論 + +多代理系統可以採取非常不同的形式並應用於許多不同的領域。 +它們通常專注於個別代理的簡單行為,並通過**協同效應**實現整個系統的更複雜行為。 + +## 🚀 挑戰 + +將本課程應用於現實世界,嘗試構思一個可以解決問題的多代理系統。例如,多代理系統需要做什麼才能優化校車路線?它如何在麵包店中運作? + +## [課後測驗](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/223) + +## 回顧與自學 + +回顧此類系統在工業中的應用。選擇一個領域,例如製造業或視頻遊戲行業,探索多代理系統如何用於解決獨特問題。 + +## [NetLogo作業](assignment.md) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/6-Other/23-MultiagentSystems/assignment.md b/translations/tw/lessons/6-Other/23-MultiagentSystems/assignment.md new file mode 100644 index 00000000..c7e9a99a --- /dev/null +++ b/translations/tw/lessons/6-Other/23-MultiagentSystems/assignment.md @@ -0,0 +1,17 @@ + +# NetLogo 作業 + +選擇 NetLogo 資料庫中的一個模型,並使用它來盡可能真實地模擬一個現實生活中的情境。一個不錯的例子是調整「替代視覺化」資料夾中的病毒模型,展示它如何用於模擬 COVID-19 的傳播。你能否建立一個模擬現實生活中病毒傳播的模型? + +透過保存一份副本並製作一個視頻演示,說明該模型如何與現實情境相關聯,來展示你的成果。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/lessons/7-Ethics/README.md b/translations/tw/lessons/7-Ethics/README.md new file mode 100644 index 00000000..7fb604c3 --- /dev/null +++ b/translations/tw/lessons/7-Ethics/README.md @@ -0,0 +1,52 @@ + +# 倫理與負責任的人工智慧 + +你已經快完成這門課程了,希望到目前為止,你已清楚了解人工智慧是基於一系列正式的數學方法,這些方法能幫助我們在資料中找到關聯性,並訓練模型以模仿某些人類行為。在這個歷史時刻,我們認為人工智慧是一個非常強大的工具,可以從資料中提取模式,並應用這些模式來解決新的問題。 + +## [課前測驗](https://white-water-09ec41f0f.azurestaticapps.net/quiz/5/) + +然而,在科幻作品中,我們經常看到人工智慧對人類構成威脅的故事。通常這些故事圍繞某種人工智慧的反叛展開,當人工智慧決定與人類對抗時,這暗示人工智慧擁有某種情感或能做出開發者未預見的決策。 + +我們在這門課程中學到的人工智慧僅僅是大型矩陣運算。它是一個非常強大的工具,可以幫助我們解決問題,但就像任何其他強大的工具一樣——它既可以用於善,也可以用於惡。重要的是,它可能會被*濫用*。 + +## 負責任人工智慧的原則 + +為了避免人工智慧的意外或故意濫用,微軟提出了重要的[負責任人工智慧原則](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-77998-cacaste)。以下概念是這些原則的基礎: + +* **公平性**與*模型偏差*這個重要問題相關,模型偏差可能是由於使用了有偏差的訓練資料。例如,當我們試圖預測某人獲得軟體開發工作機會的可能性時,模型可能更偏向男性,僅僅因為訓練資料可能偏向男性群體。我們需要仔細平衡訓練資料並調查模型,以避免偏差,並確保模型考慮到更相關的特徵。 +* **可靠性與安全性**。人工智慧模型本質上可能會犯錯。一個神經網路返回的是概率,我們需要在做決策時考慮到這一點。每個模型都有一定的精確度和召回率,我們需要理解這些指標,以防止錯誤建議可能造成的傷害。 +* **隱私與安全性**具有一些人工智慧特定的影響。例如,當我們使用某些資料來訓練模型時,這些資料會以某種方式“整合”到模型中。一方面,這提高了安全性和隱私性,另一方面,我們需要記住模型是基於哪些資料訓練的。 +* **包容性**意味著我們不是在建造人工智慧來取代人類,而是為了增強人類並使我們的工作更具創造性。這也與公平性相關,因為在處理代表性不足的社群時,我們收集的大多數資料集可能存在偏差,我們需要確保這些社群被納入並正確地由人工智慧處理。 +* **透明性**。這包括確保我們始終清楚人工智慧的使用。此外,在可能的情況下,我們希望使用*可解釋*的人工智慧系統。 +* **問責性**。當人工智慧模型做出某些決策時,責任歸屬並不總是清晰的。我們需要確保我們理解人工智慧決策的責任所在。在大多數情況下,我們希望將人類納入重要決策的過程中,以便實際的人承擔責任。 + +## 負責任人工智慧的工具 + +微軟開發了[負責任人工智慧工具箱](https://github.com/microsoft/responsible-ai-toolbox),其中包含一系列工具: + +* 可解釋性儀表板 (InterpretML) +* 公平性儀表板 (FairLearn) +* 錯誤分析儀表板 +* 負責任人工智慧儀表板,包括: + + - EconML - 用於因果分析的工具,專注於假設性問題 + - DiCE - 用於反事實分析的工具,幫助您了解需要改變哪些特徵才能影響模型的決策 + +如需更多有關人工智慧倫理的資訊,請參閱機器學習課程中的[這一課程](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/3-fairness?WT.mc_id=academic-77998-cacaste),其中包括作業。 + +## 回顧與自學 + +參加這個[學習路徑](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77998-cacaste),以了解更多有關負責任人工智慧的內容。 + +## [課後測驗](https://white-water-09ec41f0f.azurestaticapps.net/quiz/6/) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/README.md b/translations/tw/lessons/README.md new file mode 100644 index 00000000..c784ecc0 --- /dev/null +++ b/translations/tw/lessons/README.md @@ -0,0 +1,17 @@ + +# 概覽 + +![概覽手繪圖](../../../translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.tw.png) + +> 手繪筆記由 [Tomomi Imura](https://twitter.com/girlie_mac) 提供 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/lessons/X-Extras/X1-MultiModal/README.md b/translations/tw/lessons/X-Extras/X1-MultiModal/README.md new file mode 100644 index 00000000..30c50f2f --- /dev/null +++ b/translations/tw/lessons/X-Extras/X1-MultiModal/README.md @@ -0,0 +1,88 @@ + +# 多模態網絡 + +在變壓器模型成功解決 NLP 任務後,相同或類似的架構也被應用於計算機視覺任務。現在越來越多的人對於構建能夠*結合*視覺和自然語言能力的模型產生了興趣。其中一個嘗試是由 OpenAI 完成的,稱為 CLIP 和 DALL.E。 + +## 對比圖像預訓練(CLIP) + +CLIP 的主要理念是能夠比較文本提示與圖像,並確定圖像與提示的匹配程度。 + +![CLIP 架構](../../../../../translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.tw.png) + +> *圖片來自[這篇博客文章](https://openai.com/blog/clip/)* + +該模型是基於從互聯網獲取的圖像及其標題進行訓練的。對於每個批次,我們取 N 對(圖像,文本),並將它們轉換為某些向量表示 I 和 T。這些表示隨後會進行匹配。損失函數被定義為最大化一對(例如 I 和 T)之間向量的餘弦相似度,並最小化所有其他對之間的餘弦相似度。這就是為什麼這種方法被稱為**對比學習**。 + +CLIP 模型/庫可以從 [OpenAI GitHub](https://github.com/openai/CLIP) 獲取。該方法在[這篇博客文章](https://openai.com/blog/clip/)中有描述,並在[這篇論文](https://arxiv.org/pdf/2103.00020.pdf)中有更詳細的說明。 + +一旦該模型完成預訓練,我們可以給它一批圖像和一批文本提示,它將返回一個概率張量。CLIP 可以用於多種任務: + +**圖像分類** + +假設我們需要將圖像分類為貓、狗和人類。在這種情況下,我們可以給模型一張圖像,以及一系列文本提示:“*一張貓的圖片*”、“*一張狗的圖片*”、“*一張人類的圖片*”。在結果的 3 個概率向量中,我們只需選擇值最高的索引。 + +![CLIP 用於圖像分類](../../../../../translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.tw.png) + +> *圖片來自[這篇博客文章](https://openai.com/blog/clip/)* + +**基於文本的圖像搜索** + +我們也可以反過來操作。如果我們有一組圖像,我們可以將這組圖像傳遞給模型,並提供一個文本提示——這將返回與給定提示最相似的圖像。 + +## ✍️ 範例:[使用 CLIP 進行圖像分類和圖像搜索](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) + +打開 [Clip.ipynb](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) 筆記本,查看 CLIP 的實際應用。 + +## 使用 VQGAN+CLIP 進行圖像生成 + +CLIP 還可以用於從文本提示生成**圖像**。為了實現這一點,我們需要一個**生成器模型**,該模型能夠基於某些向量輸入生成圖像。其中一個這樣的模型稱為 [VQGAN](https://compvis.github.io/taming-transformers/)(向量量化生成對抗網絡)。 + +VQGAN 與普通 [GAN](../../4-ComputerVision/10-GANs/README.md) 的主要區別在於以下幾點: +* 使用自回歸變壓器架構生成一系列上下文豐富的視覺部分,這些部分構成了圖像。而這些視覺部分則由 [CNN](../../4-ComputerVision/07-ConvNets/README.md) 學習。 +* 使用子圖像鑑別器來檢測圖像的部分是“真實”還是“偽造”(與傳統 GAN 的“全有或全無”方法不同)。 + +可以在 [Taming Transformers](https://compvis.github.io/taming-transformers/) 網站上了解更多關於 VQGAN 的信息。 + +VQGAN 與傳統 GAN 的一個重要區別在於,後者可以從任何輸入向量生成一張像樣的圖像,而 VQGAN 可能生成一張不連貫的圖像。因此,我們需要進一步引導圖像創建過程,而這可以通過 CLIP 完成。 + +![VQGAN+CLIP 架構](../../../../../translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.tw.png) + +為了生成與文本提示相對應的圖像,我們從一些隨機編碼向量開始,將其傳遞給 VQGAN 以生成圖像。然後使用 CLIP 生成一個損失函數,該函數顯示圖像與文本提示的匹配程度。目標是最小化這個損失,通過反向傳播調整輸入向量參數。 + +一個實現 VQGAN+CLIP 的優秀庫是 [Pixray](http://github.com/pixray/pixray) + +![由 Pixray 生成的圖片](../../../../../translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.tw.png) | ![由 Pixray 生成的圖片](../../../../../translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.tw.png) | ![由 Pixray 生成的圖片](../../../../../translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.tw.png) +----|----|---- +由提示 *一幅年輕男性文學教師手持書本的水彩特寫肖像* 生成的圖片 | 由提示 *一幅年輕女性計算機科學教師手持電腦的油畫特寫肖像* 生成的圖片 | 由提示 *一幅年長男性數學教師站在黑板前的油畫特寫肖像* 生成的圖片 + +> 圖片來自 [Dmitry Soshnikov](http://soshnikov.com) 的 **人工教師** 系列 + +## DALL-E +### [DALL-E 1](https://openai.com/research/dall-e) +DALL-E 是一個基於 GPT-3 的版本,專門用於從提示生成圖像。它擁有 120 億個參數。 + +與 CLIP 不同,DALL-E 將文本和圖像作為單一的令牌流進行處理。因此,從多個提示中可以基於文本生成圖像。 + +### [DALL-E 2](https://openai.com/dall-e-2) +DALL-E 1 和 2 的主要區別在於,DALL-E 2 能夠生成更真實的圖像和藝術作品。 + +使用 DALL-E 生成圖像的範例: +![由 DALL-E 生成的圖片](../../../../../translated_images/DALL·E%202023-06-20%2015.56.56%20-%20a%20closeup%20watercolor%20portrait%20of%20young%20male%20teacher%20of%20literature%20with%20a%20book.6c235e8271d9ed10ce985d86aeb241a58518958647973af136912116b9518fce.tw.png) | ![由 DALL-E 生成的圖片](../../../../../translated_images/DALL·E%202023-06-20%2015.57.43%20-%20a%20closeup%20oil%20portrait%20of%20young%20female%20teacher%20of%20computer%20science%20with%20a%20computer.f21dc4166340b6c8b4d1cb57efd1e22127407f9b28c9ac7afe11344065369e64.tw.png) | ![由 DALL-E 生成的圖片](../../../../../translated_images/DALL·E%202023-06-20%2015.58.42%20-%20%20a%20closeup%20oil%20portrait%20of%20old%20male%20teacher%20of%20mathematics%20in%20front%20of%20blackboard.d331c2dfbdc3f7c46aa65c0809066f5e7ed4b49609cd259852e760df21051e4a.tw.png) +----|----|---- +由提示 *一幅年輕男性文學教師手持書本的水彩特寫肖像* 生成的圖片 | 由提示 *一幅年輕女性計算機科學教師手持電腦的油畫特寫肖像* 生成的圖片 | 由提示 *一幅年長男性數學教師站在黑板前的油畫特寫肖像* 生成的圖片 + +## 參考資料 + +* VQGAN 論文:[Taming Transformers for High-Resolution Image Synthesis](https://compvis.github.io/taming-transformers/paper/paper.pdf) +* CLIP 論文:[Learning Transferable Visual Models From Natural Language Supervision](https://arxiv.org/pdf/2103.00020.pdf) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/tw/lessons/sketchnotes/LICENSE.md b/translations/tw/lessons/sketchnotes/LICENSE.md new file mode 100644 index 00000000..0bd5b14e --- /dev/null +++ b/translations/tw/lessons/sketchnotes/LICENSE.md @@ -0,0 +1,193 @@ + +歸屬-相同方式共享 4.0 國際版 + +======================================================================= + +創用 CC 組織(Creative Commons Corporation,簡稱「創用 CC」)不是律師事務所,亦不提供法律服務或法律建議。分發創用 CC 公共授權條款並不構成律師與客戶或其他關係。創用 CC 以「現狀」基礎提供其授權條款及相關資訊。創用 CC 不對其授權條款、根據其條款和條件授權的任何材料或相關資訊提供任何保證,並在法律允許的最大範圍內免責於因使用這些內容而導致的任何損害。 + +使用創用 CC 公共授權條款 + +創用 CC 公共授權條款提供了一套標準條款和條件,創作者及其他權利持有人可用於分享受版權及以下公共授權條款中指定的某些其他權利保護的原創作品及其他材料。以下考量僅供參考,並非詳盡無遺,亦不構成我們授權條款的一部分。 + + 對授權人的考量:我們的公共授權條款旨在供那些有權授予公眾使用材料許可的人使用,這些材料的使用通常受版權及某些其他權利的限制。我們的授權條款是不可撤銷的。授權人在應用授權條款之前,應仔細閱讀並理解其條款和條件。授權人還應在應用我們的授權條款之前確保擁有所有必要的權利,以便公眾能夠按照預期重複使用材料。授權人應清楚標記任何不受授權條款約束的材料,包括其他創用 CC 授權的材料,或根據版權例外或限制使用的材料。更多授權人考量請參見: + wiki.creativecommons.org/Considerations_for_licensors + + 對公眾的考量:通過使用我們的公共授權條款,授權人授予公眾根據指定條款和條件使用被授權材料的許可。如果因任何原因不需要授權人的許可——例如,因為適用的版權例外或限制——則該使用不受授權條款的約束。我們的授權條款僅授予授權人有權授予的版權及某些其他權利下的許可。對被授權材料的使用可能仍因其他原因受到限制,包括其他人對材料擁有的版權或其他權利。授權人可能會提出特別要求,例如要求標記或描述所有更改。雖然我們的授權條款不要求這樣做,但我們鼓勵您在合理的情況下尊重這些要求。更多公眾考量請參見: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +創用 CC 歸屬-相同方式共享 4.0 國際公共授權條款 + +當您行使以下定義的授權權利時,即表示您接受並同意受本創用 CC 歸屬-相同方式共享 4.0 國際公共授權條款(「公共授權條款」)的條款和條件約束。在本公共授權條款可被解釋為合同的範圍內,您因接受這些條款和條件而被授予授權權利,授權人因根據這些條款和條件提供被授權材料而獲得利益,從而授予您這些權利。 + +第 1 節 —— 定義 + + a. 衍生材料是指受版權及類似權利保護的材料,該材料基於被授權材料進行翻譯、改編、編排、轉化或以其他方式修改,並因此需要授權人持有的版權及類似權利的許可。就本公共授權條款而言,當被授權材料是音樂作品、表演或聲音錄製時,當被授權材料與動態影像同步時,總是會產生衍生材料。 + + b. 改編者授權是指您根據本公共授權條款的條款和條件,對您在衍生材料中的貢獻所適用的版權及類似權利所採用的授權。 + + c. BY-SA 相容授權是指列於 creativecommons.org/compatiblelicenses 並經創用 CC 批准為與本公共授權條款基本等同的授權。 + + d. 版權及類似權利是指版權和/或與版權密切相關的類似權利,包括但不限於表演權、廣播權、聲音錄製權及特殊數據庫權利,而不考慮這些權利的標籤或分類方式。就本公共授權條款而言,第 2(b)(1)-(2) 節中規定的權利不屬於版權及類似權利。 + + e. 有效技術措施是指在未經適當授權的情況下,根據 1996 年 12 月 20 日通過的《世界知識產權組織版權條約》第 11 條及/或類似國際協議履行義務的法律,無法被規避的措施。 + + f. 例外和限制是指適用於您使用被授權材料的版權及類似權利的任何例外或限制,例如合理使用或合理處理。 + + g. 授權元素是指創用 CC 公共授權條款名稱中列出的授權屬性。本公共授權條款的授權元素為歸屬和相同方式共享。 + + h. 被授權材料是指授權人應用本公共授權條款的藝術或文學作品、數據庫或其他材料。 + + i. 授權權利是指根據本公共授權條款的條款和條件授予您的權利,這些權利僅限於適用於您使用被授權材料的所有版權及類似權利,且授權人有權授予這些權利。 + + j. 授權人是指根據本公共授權條款授予權利的個人或實體。 + + k. 分享是指以任何需要授權權利許可的方式或過程向公眾提供材料,例如複製、公開展示、公開表演、分發、傳播、通信或進口,以及以公眾成員可以在其選擇的時間和地點訪問材料的方式向公眾提供材料。 + + l. 特殊數據庫權利是指除版權以外的權利,這些權利源自 1996 年 3 月 11 日歐洲議會和理事會通過的《數據庫法律保護指令》(96/9/EC),以及其修訂或繼任版本,以及世界其他地區的基本等同權利。 + + m. 您是指根據本公共授權條款行使授權權利的個人或實體。「您的」具有相應的含義。 + +第 2 節 —— 範圍 + + a. 授權授予 + + 1. 根據本公共授權條款的條款和條件,授權人特此授予您全球範圍內的、免版稅的、不可再授權的、非排他性的、不可撤銷的授權,行使被授權材料的授權權利,包括: + + a. 複製和分享被授權材料,無論是全部還是部分;以及 + + b. 製作、複製和分享衍生材料。 + + 2. 例外和限制。為避免疑義,當例外和限制適用於您的使用時,本公共授權條款不適用,您無需遵守其條款和條件。 + + 3. 期限。本公共授權條款的期限規定於第 6(a) 節。 + + 4. 媒體和格式;允許的技術修改。授權人授權您在現有或未來創建的所有媒體和格式中行使授權權利,並進行必要的技術修改以實現此目的。授權人放棄及/或同意不主張任何禁止您進行必要技術修改的權利或權限,包括為行使授權權利而繞過有效技術措施的技術修改。就本公共授權條款而言,僅僅進行本第 2(a)(4) 節授權的修改永遠不會產生衍生材料。 + + 5. 下游接收者。 + + a. 授權人的要約——被授權材料。每位被授權材料的接收者自動收到授權人根據本公共授權條款條款和條件行使授權權利的要約。 + + b. 授權人的額外要約——衍生材料。每位從您處接收衍生材料的接收者自動收到授權人根據您應用的改編者授權條款行使衍生材料授權權利的要約。 + + c. 無下游限制。您不得對被授權材料施加任何額外或不同的條款和條件,也不得應用任何有效技術措施,若這樣做會限制任何接收者行使授權權利。 + + 6. 無背書。本公共授權條款中的任何內容均不構成或可被解釋為授權您聲稱或暗示您與授權人或其他根據第 3(a)(1)(A)(i) 節規定應被歸屬的人有關聯、受到支持或授予官方地位,或您的使用被授權材料與此相關。 + + b. 其他權利 + + 1. 道德權利(如完整性權)不在本公共授權條款的授權範圍內,亦不包括公開權、隱私權及/或其他類似的個人權利;然而,在可能的範圍內,授權人放棄及/或同意不主張授權人持有的此類權利,以便您在有限範圍內行使授權權利,但不包括其他情況。 + + 2. 專利權和商標權不在本公共授權條款的授權範圍內。 + + 3. 在可能的範圍內,授權人放棄向您收取行使授權權利的版稅的權利,無論是直接收取還是通過任何自願或可放棄的法定或強制性授權計劃的收費機構收取。在所有其他情況下,授權人明確保留收取此類版稅的權利。 + +第 3 節 —— 授權條件 + +您行使授權權利的行為明確受以下條件約束。 + + a. 歸屬 + + 1. 如果您分享被授權材料(包括修改後的形式),您必須: + + a. 保留以下內容(如果授權人隨被授權材料提供): + + i. 被授權材料創作者及任何其他指定接受歸屬者的身份識別(包括授權人要求的合理方式,如使用筆名); + ii. 版權聲明; + iii. 提及本公共授權條款的聲明; + iv. 提及免責聲明的聲明; + v. 在合理可行的範圍內,提供被授權材料的 URI 或超連結; + + b. 表明您是否修改了被授權材料,並保留任何先前修改的說明;以及 + + c. 表明被授權材料是根據本公共授權條款授權的,並包括本公共授權條款的文本或 URI 或超連結。 + + 2. 您可以根據您分享被授權材料的媒介、方式和上下文,以任何合理的方式滿足第 3(a)(1) 節的條件。例如,提供包含所需資訊的資源的 URI 或超連結可能是合理的。 + + 3. 如果授權人要求,您必須在合理可行的範圍內移除第 3(a)(1)(A) 節要求的任何資訊。 + + b. 相同方式共享 + + 除第 3(a) 節的條件外,如果您分享您製作的衍生材料,還需遵守以下條件: + + 1. 您應用的改編者授權必須是具有相同授權元素的創用 CC 授權(本版本或更高版本),或是 BY-SA 相容授權。 + + 2. 您必須包括您應用的改編者授權的文本或 URI 或超連結。您可以根據您分享衍生材料的媒介、方式和上下文,以任何合理的方式滿足此條件。 + + 3. 您不得對衍生材料施加任何額外或不同的條款和條件,也不得應用任何有效技術措施,若這樣做會限制根據您應用的改編者授權授予的權利的行使。 + +第 4 節 —— 特殊數據庫權利 + +當授權權利包括適用於您使用被授權材料的特殊數據庫權利時: + + a. 為避免疑義,第 2(a)(1) 節授予您提取、重複使用、複製和分享數據庫內容全部或實質部分的權利; + + b. 如果您將數據庫內容全部或實質部分納入您擁有特殊數據庫權利的數據庫中: +權利,然後您擁有特殊資料庫權利的資料庫(但不包括其個別內容)屬於改編素材, + +包括為了第 3(b) 節的目的;以及 +c. 如果您分享資料庫的全部或大部分內容,您必須遵守第 3(a) 節中的條件。 + +為免疑義,第 4 節是補充條款,並不取代您在本公共授權條款下的義務,當授權權利包括其他版權及類似權利時。 + + +第 5 節 —— 免責聲明與責任限制。 + +a. 除非授權人另有單獨承諾,在可能的範圍內,授權人按「現狀」及「可用」的方式提供授權素材,並且不對授權素材作出任何形式的陳述或保證,無論是明示、暗示、法定或其他形式的保證。這包括但不限於所有權、適銷性、特定用途的適用性、不侵權、無潛在或其他缺陷、準確性,或是否存在錯誤(無論是否已知或可發現)的保證。在某些地區,若免責聲明不被允許全部或部分適用,則此免責聲明可能不適用於您。 + +b. 在可能的範圍內,授權人無論基於任何法律理論(包括但不限於過失)或其他原因,均不對您因本公共授權條款或使用授權素材而產生的任何直接、特殊、間接、附帶、後果性、懲罰性、示範性或其他損失、成本、費用或損害承擔責任,即使授權人已被告知可能發生此類損失、成本、費用或損害。在某些地區,若責任限制不被允許全部或部分適用,則此限制可能不適用於您。 + +c. 上述免責聲明與責任限制應在可能的範圍內解釋為最接近於完全免責與放棄所有責任的方式。 + + +第 6 節 —— 有效期與終止。 + +a. 本公共授權條款適用於此處授權的版權及類似權利的有效期。然而,如果您未遵守本公共授權條款,則您根據本公共授權條款的權利將自動終止。 + +b. 如果您根據第 6(a) 節喪失使用授權素材的權利,該權利可在以下情況下恢復: + +1. 在您發現違規後 30 天內糾正違規行為,則自糾正之日起自動恢復;或 +2. 經授權人明確恢復。 + +為免疑義,第 6(b) 節不影響授權人因您違反本公共授權條款而尋求補救的任何權利。 + +c. 為免疑義,授權人也可以根據其他條款或條件提供授權素材,或隨時停止分發授權素材;然而,這不會終止本公共授權條款。 + +d. 第 1、5、6、7 和 8 節在本公共授權條款終止後仍然有效。 + + +第 7 節 —— 其他條款與條件。 + +a. 除非授權人明確同意,授權人不受您傳達的任何額外或不同條款與條件的約束。 + +b. 關於授權素材的任何安排、理解或協議,若未在此處陳述,則與本公共授權條款的條款與條件分開且獨立。 + + +第 8 節 —— 解釋。 + +a. 為免疑義,本公共授權條款不會且不得被解釋為減少、限制、約束或施加條件於任何在未經本公共授權條款許可的情況下,依法可對授權素材進行的使用。 + +b. 在可能的範圍內,如果本公共授權條款的任何條款被認為不可執行,則該條款應自動調整至最低必要程度以使其可執行。如果該條款無法調整,則應從本公共授權條款中刪除,而不影響其餘條款與條件的可執行性。 + +c. 除非授權人明確同意,否則本公共授權條款的任何條款或條件均不得被放棄,且任何未遵守的行為均不得被視為已獲同意。 + +d. 本公共授權條款中的任何內容均不得構成或被解釋為對授權人或您適用的任何司法管轄區或權限的法律程序的特權與豁免的限制或放棄。 + + +======================================================================= + +Creative Commons 並非其公共授權條款的當事方。然而,Creative Commons 可選擇將其公共授權條款應用於其發布的素材,在這些情況下,Creative Commons 將被視為「授權人」。Creative Commons 公共授權條款的文本已根據 CC0 公共領域貢獻聲明捐贈至公共領域。除非為表明素材是根據 Creative Commons 公共授權條款共享或根據 Creative Commons 政策(發布於 creativecommons.org/policies)另行允許的有限目的,Creative Commons 不授權在未經其事先書面同意的情況下使用「Creative Commons」商標或任何其他 Creative Commons 的商標或標誌,包括但不限於對其公共授權條款的任何未經授權的修改或任何其他關於授權素材使用的安排、理解或協議。為免疑義,本段不構成本公共授權條款的一部分。 + +Creative Commons 可通過 creativecommons.org 聯繫。 + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file diff --git a/translations/tw/lessons/sketchnotes/README.md b/translations/tw/lessons/sketchnotes/README.md new file mode 100644 index 00000000..3718eb50 --- /dev/null +++ b/translations/tw/lessons/sketchnotes/README.md @@ -0,0 +1,17 @@ + +所有課程的手繪筆記可以在這裡下載。 + +🎨 創作者:Tomomi Imura (Twitter: [@girlie_mac](https://twitter.com/girlie_mac), GitHub: [girliemac](https://github.com/girliemac)) + +[![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/zh/README.md b/translations/zh/README.md index d1ed8249..5d555fb6 100644 --- a/translations/zh/README.md +++ b/translations/zh/README.md @@ -1,140 +1,156 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/AI-For-Beginners.svg)](https://github.com/microsoft/AI-For-Beginners/blob/main/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub license](https://img.shields.io/github/license/microsoft/AI-For-Beginners.svg)](https://github.com/microsoft/AI-For-Beginners/blob/main/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/AI-For-Beginners.svg)](https://GitHub.com/microsoft/AI-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/AI-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/AI-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/) -[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD) -[![Gitter](https://badges.gitter.im/Microsoft/ai-for-beginners.svg)](https://gitter.im/Microsoft/ai-for-beginners?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/AI-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/AI-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/AI-For-Beginners/stargazers/) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD) +[![Gitter](https://badges.gitter.im/Microsoft/ai-for-beginners.svg)](https://gitter.im/Microsoft/ai-for-beginners?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) +[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) -# 初学者的人工智能 - 课程大纲 +# 人工智能入门 - 课程大纲 -|![ Sketchnote by [(@girlie_mac)](https://twitter.com/girlie_mac) ](./lessons/sketchnotes/ai-overview.png)| -|:---:| -| 初学者的人工智能 - _Sketchnote by [@girlie_mac](https://twitter.com/girlie_mac)_ | +|![ 由 [(@girlie_mac)](https://twitter.com/girlie_mac) 绘制的草图 ](./lessons/sketchnotes/ai-overview.png)| +|:---:| +| 人工智能入门 - _草图由 [@girlie_mac](https://twitter.com/girlie_mac) 绘制_ | -通过我们为期12周、24节课的课程,探索**人工智能**(AI)的世界!该课程包括实用课程、测验和实验室,适合初学者,涵盖了如TensorFlow和PyTorch等工具,以及人工智能的伦理问题。 +通过我们的 12 周、24 节课程大纲,探索**人工智能**(AI)的世界!课程包括实践课程、测验和实验室,适合初学者,涵盖了 TensorFlow 和 PyTorch 等工具,以及 AI 的伦理问题。 -## 您将学到的内容 +## 你将学到什么 -**[课程思维导图](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)** +**[课程思维导图](http://soshnikov.com/courses/ai-for-beginners/mindmap.html)** -在这个课程中,您将学习: +在本课程中,你将学习: -* 人工智能的不同方法,包括“老派”的符号方法,以及**知识表示**和推理([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence))。 -* **神经网络**和**深度学习**,这是现代人工智能的核心。我们将通过在两个最流行的框架中使用代码来阐明这些重要主题的概念 - [TensorFlow](http://Tensorflow.org)和[PyTorch](http://pytorch.org)。 -* 用于处理图像和文本的**神经架构**。我们将涵盖最近的模型,但可能在最先进的技术上略显不足。 -* 不太流行的人工智能方法,如**遗传算法**和**多智能体系统**。 +* 人工智能的不同方法,包括“传统的”基于符号的**知识表示**和推理方法([GOFAI](https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence))。 +* **神经网络**和**深度学习**,它们是现代 AI 的核心。我们将使用两种最流行的框架 [TensorFlow](http://Tensorflow.org) 和 [PyTorch](http://pytorch.org) 的代码来说明这些重要主题背后的概念。 +* 用于处理图像和文本的**神经网络架构**。我们将涵盖一些最新的模型,但可能不包括最前沿的内容。 +* 不太流行的 AI 方法,例如**遗传算法**和**多智能体系统**。 -我们在此课程中不会涵盖的内容: +本课程不包括以下内容: -> [在我们的Microsoft Learn集合中查找此课程的所有额外资源](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) +> [在我们的 Microsoft Learn 资源集合中找到本课程的所有附加资源](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) -* 使用**AI在商业中的应用**的商业案例。考虑参加Microsoft Learn上的[商业用户的AI入门](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum)学习路径,或与[INSEAD](https://www.insead.edu/)合作开发的[AI商业学校](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum)。 -* **经典机器学习**,在我们的[初学者机器学习课程](http://github.com/Microsoft/ML-for-Beginners)中有详细描述。 -* 使用**[认知服务](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)**构建的实际AI应用。为此,我们建议您从Microsoft Learn的[计算机视觉](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum)、[自然语言处理](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum)、**[使用Azure OpenAI服务的生成式AI](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)**等模块开始学习。 -* 特定的机器学习 **云框架**,例如 [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum)、[Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum) 或 [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum)。建议使用 [使用 Azure Machine Learning 构建和运营机器学习解决方案](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) 和 [使用 Azure Databricks 构建和运营机器学习解决方案](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) 的学习路径。 -* **对话式人工智能** 和 **聊天机器人**。有一个单独的 [创建对话式 AI 解决方案](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) 学习路径,您还可以参考 [这篇博客文章](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/) 获取更多细节。 -* 深度学习背后的 **深层数学**。为此,我们推荐由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 合著的 [深度学习](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618),该书也可以在线阅读,网址为 [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/)。 +* **AI 在商业中的应用案例**。建议学习 Microsoft Learn 上的 [面向商业用户的 AI 入门](https://docs.microsoft.com/learn/paths/introduction-ai-for-business-users/?WT.mc_id=academic-77998-bethanycheum) 学习路径,或与 [INSEAD](https://www.insead.edu/) 合作开发的 [AI 商学院](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-bethanycheum)。 +* **经典机器学习**,这部分内容已在我们的 [机器学习入门课程](http://github.com/Microsoft/ML-for-Beginners) 中详细描述。 +* 使用 **[认知服务](https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=academic-77998-bethanycheum)** 构建的实际 AI 应用。建议从 Microsoft Learn 的模块开始学习 [计算机视觉](https://docs.microsoft.com/learn/paths/create-computer-vision-solutions-azure-cognitive-services/?WT.mc_id=academic-77998-bethanycheum)、[自然语言处理](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-bethanycheum)、**[Azure OpenAI 服务的生成式 AI](https://learn.microsoft.com/en-us/training/paths/develop-ai-solutions-azure-openai/?WT.mc_id=academic-77998-bethanycheum)** 等内容。 +* 特定的机器学习**云框架**,如 [Azure Machine Learning](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-bethanycheum)、[Microsoft Fabric](https://learn.microsoft.com/en-us/training/paths/get-started-fabric/?WT.mc_id=academic-77998-bethanycheum) 或 [Azure Databricks](https://docs.microsoft.com/learn/paths/data-engineer-azure-databricks?WT.mc_id=academic-77998-bethanycheum)。建议学习 [使用 Azure Machine Learning 构建和操作机器学习解决方案](https://docs.microsoft.com/learn/paths/build-ai-solutions-with-azure-ml-service/?WT.mc_id=academic-77998-bethanycheum) 和 [使用 Azure Databricks 构建和操作机器学习解决方案](https://docs.microsoft.com/learn/paths/build-operate-machine-learning-solutions-azure-databricks/?WT.mc_id=academic-77998-bethanycheum) 学习路径。 +* **对话式 AI** 和 **聊天机器人**。可以参考 [创建对话式 AI 解决方案](https://docs.microsoft.com/learn/paths/create-conversational-ai-solutions/?WT.mc_id=academic-77998-bethanycheum) 学习路径,或阅读 [这篇博客文章](https://soshnikov.com/azure/hello-bot-conversational-ai-on-microsoft-platform/) 了解更多细节。 +* **深度学习的数学原理**。建议阅读 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 的 [Deep Learning](https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618),也可以在线访问 [https://www.deeplearningbook.org/](https://www.deeplearningbook.org/)。 -如果您想温和地了解 _云中的人工智能_ 主题,可以考虑参加 [在 Azure 上开始使用人工智能](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) 学习路径。 +如果想要轻松了解 _云端 AI_ 主题,可以学习 [在 Azure 上开始人工智能之旅](https://docs.microsoft.com/learn/paths/get-started-with-artificial-intelligence-on-azure/?WT.mc_id=academic-77998-bethanycheum) 学习路径。 -# 内容 +# 课程内容 -| | 课程链接 | PyTorch/Keras/TensorFlow | 实验室 | -| :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ | -| 0 | [课程设置](./lessons/0-course-setup/setup.md) | [设置您的开发环境](./lessons/0-course-setup/how-to-run.md) | | -| I | [**人工智能简介**](./lessons/1-Intro/README.md) | | | -| 01 | [人工智能的介绍与历史](./lessons/1-Intro/README.md) | - | - | -| II | **符号人工智能** | -| 02 | [知识表示与专家系统](./lessons/2-Symbolic/README.md) | [专家系统](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) / [本体](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) /[概念图](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) | | -| III | [**神经网络简介**](./lessons/3-NeuralNetworks/README.md) ||| -| 03 | [感知机](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [笔记本](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [实验室](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) | -| 04 | [多层感知机与创建我们自己的框架](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [笔记本](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [实验室](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) | -| 05 | [框架简介 (PyTorch/TensorFlow) 和过拟合](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [实验室](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) | -| IV | [**计算机视觉**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [在 Microsoft Azure 上探索计算机视觉](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) | -| 06 | [计算机视觉简介. OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [实验室](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) | -| 07 | [卷积神经网络](./lessons/4-ComputerVision/07-ConvNets/README.md) & [CNN 架构](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [实验室](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) | -| 08 | [预训练网络和迁移学习](./lessons/4-ComputerVision/08-TransferLearning/README.md) 和 [训练技巧](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [实验室](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) | -| 09 | [自编码器和变分自编码器 (VAEs)](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | | -| 10 | [生成对抗网络与艺术风格迁移](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | | -| 11 | [目标检测](./lessons/4-ComputerVision/11-ObjectDetection/README.md) | [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) | [实验室](./lessons/4-ComputerVision/11-ObjectDetection/lab/README.md) | -| 12 | [语义分割. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) | | +| | 课程链接 | PyTorch/Keras/TensorFlow | 实验室 | +| :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ | +| 0 | [课程设置](./lessons/0-course-setup/setup.md) | [设置开发环境](./lessons/0-course-setup/how-to-run.md) | | +| I | [**AI 简介**](./lessons/1-Intro/README.md) | | | +| 01 | [AI 简介与历史](./lessons/1-Intro/README.md) | - | - | +| II | **符号 AI** | +| 02 | [知识表示与专家系统](./lessons/2-Symbolic/README.md) | [专家系统](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) / [本体论](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) /[概念图](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) | | +| III | [**神经网络简介**](./lessons/3-NeuralNetworks/README.md) ||| +| 03 | [感知机](./lessons/3-NeuralNetworks/03-Perceptron/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) | [实验室](./lessons/3-NeuralNetworks/03-Perceptron/lab/README.md) | +| 04 | [多层感知机与创建我们自己的框架](./lessons/3-NeuralNetworks/04-OwnFramework/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) | [实验室](./lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md) | +| 05 | [框架简介(PyTorch/TensorFlow)与过拟合](./lessons/3-NeuralNetworks/05-Frameworks/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) / [Keras](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [实验室](./lessons/3-NeuralNetworks/05-Frameworks/lab/README.md) | +| IV | [**计算机视觉**](./lessons/4-ComputerVision/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) / [TensorFlow](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste)| [在 Microsoft Azure 上探索计算机视觉](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) | +| 06 | [计算机视觉简介. OpenCV](./lessons/4-ComputerVision/06-IntroCV/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) | [实验室](./lessons/4-ComputerVision/06-IntroCV/lab/README.md) | +| 07 | [卷积神经网络](./lessons/4-ComputerVision/07-ConvNets/README.md) & [CNN 架构](./lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) /[TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) | [实验室](./lessons/4-ComputerVision/07-ConvNets/lab/README.md) | +| 08 | [预训练网络和迁移学习](./lessons/4-ComputerVision/08-TransferLearning/README.md) 和 [训练技巧](./lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [实验](./lessons/4-ComputerVision/08-TransferLearning/lab/README.md) | +| 09 | [自动编码器和变分自动编码器 (VAEs)](./lessons/4-ComputerVision/09-Autoencoders/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) | | +| 10 | [生成对抗网络 (GANs) 和艺术风格迁移](./lessons/4-ComputerVision/10-GANs/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/GANTF.ipynb) | | +| 11 | [目标检测](./lessons/4-ComputerVision/11-ObjectDetection/README.md) | [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) | [实验](./lessons/4-ComputerVision/11-ObjectDetection/lab/README.md) | +| 12 | [语义分割. U-Net](./lessons/4-ComputerVision/12-Segmentation/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) / [TensorFlow](../../(https:/github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb)) | | | V | [**自然语言处理**](./lessons/5-NLP/README.md) | [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) /[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) | [在 Microsoft Azure 上探索自然语言处理](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum)| -| 13 | [文本表示。Bow/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | | -| 14 | [语义词嵌入。Word2Vec 和 GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | | -| 15 | [语言建模。训练自己的嵌入](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [实验室](./lessons/5-NLP/15-LanguageModeling/lab/README.md) | -| 16 | [递归神经网络](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | | -| 17 | [生成式递归网络](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.md) / [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.md) | [实验室](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) | -| 18 | [变压器。BERT。](./lessons/5-NLP/18-Transformers/READMEtransformers.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | | -| 19 | [命名实体识别](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [实验室](./lessons/5-NLP/19-NER/lab/README.md) | -| 20 | [大型语言模型、提示编程和少量任务](./lessons/5-NLP/20-LangModels/READMELargeLang.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | | +| 13 | [文本表示. Bow/TF-IDF](./lessons/5-NLP/13-TextRep/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) | | +| 14 | [语义词嵌入. Word2Vec 和 GloVe](./lessons/5-NLP/14-Embeddings/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) | | +| 15 | [语言建模. 训练自己的嵌入](./lessons/5-NLP/15-LanguageModeling/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) | [实验](./lessons/5-NLP/15-LanguageModeling/lab/README.md) | +| 16 | [循环神经网络 (RNN)](./lessons/5-NLP/16-RNN/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) / [TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/RNNTF.ipynb) | | +| 17 | [生成循环网络](./lessons/5-NLP/17-GenerativeNetworks/README.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.md) / [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.md) | [实验](./lessons/5-NLP/17-GenerativeNetworks/lab/README.md) | +| 18 | [Transformer. BERT.](./lessons/5-NLP/18-Transformers/READMEtransformers.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/TransformersTF.ipynb) | | +| 19 | [命名实体识别 (NER)](./lessons/5-NLP/19-NER/README.md) | [TensorFlow](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/19-NER/NER-TF.ipynb) | [实验](./lessons/5-NLP/19-NER/lab/README.md) | +| 20 | [大型语言模型、提示编程和少样本任务](./lessons/5-NLP/20-LangModels/READMELargeLang.md) | [PyTorch](https://microsoft.github.io/AI-For-Beginners/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) | | | VI | **其他 AI 技术** || | -| 21 | [遗传算法](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [笔记本](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | | -| 22 | [深度强化学习](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [实验室](./lessons/6-Other/22-DeepRL/lab/README.md) | +| 21 | [遗传算法](./lessons/6-Other/21-GeneticAlgorithms/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) | | +| 22 | [深度强化学习](./lessons/6-Other/22-DeepRL/README.md) | [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) /[TensorFlow](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) | [实验](./lessons/6-Other/22-DeepRL/lab/README.md) | | 23 | [多智能体系统](./lessons/6-Other/23-MultiagentSystems/README.md) | | | -| VII | **人工智能伦理** | | | -| 24 | [人工智能伦理与负责任的人工智能](./lessons/7-Ethics/README.md) | [微软学习:负责任的人工智能原则](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | | +| VII | **AI伦理** | | | +| 24 | [AI伦理与负责任的AI](./lessons/7-Ethics/README.md) | [Microsoft Learn: 负责任的AI原则](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) | | | IX | **额外内容** | | | -| 25 | [多模态网络、CLIP 和 VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [笔记本](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) | | +| 25 | [多模态网络、CLIP 和 VQGAN](./lessons/X-Extras/X1-MultiModal/README.md) | [Notebook](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) | | ## 每节课包含 * 预读材料 -* 可执行的 Jupyter 笔记本,通常特定于某个框架(**PyTorch** 或 **TensorFlow**)。可执行的笔记本还包含大量理论材料,因此要理解该主题,您需要至少完成一个版本的笔记本(无论是 PyTorch 还是 TensorFlow)。 -* **实验室**,针对某些主题,提供了尝试将所学材料应用于特定问题的机会。 -* 一些部分包含指向 [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) 模块的链接,涵盖相关主题。 +* 可执行的 Jupyter Notebook,通常针对特定框架(**PyTorch** 或 **TensorFlow**)。可执行的 Notebook 还包含大量理论内容,因此要理解主题,您需要至少阅读一个版本的 Notebook(PyTorch 或 TensorFlow)。 +* **实验**:部分主题提供实验,您可以尝试将所学内容应用于具体问题。 +* 部分章节包含链接到 [**MS Learn**](https://learn.microsoft.com/en-us/collections/7w28iy2xrqzdj0?WT.mc_id=academic-77998-bethanycheum) 模块,涵盖相关主题。 -## 开始使用 +## 入门指南 -- 我们创建了一个 [设置课程](./lessons/0-course-setup/setup.md) 来帮助您设置开发环境。 - 对于教育工作者,我们也创建了一个 [课程设置课程](./lessons/0-course-setup/for-teachers.md)! -- 如何 [在 VSCode 或 Codepace 中运行代码](./lessons/0-course-setup/how-to-run.md) +- 我们创建了一个 [设置课程](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/setup.md),帮助您设置开发环境。 +- 对于教育工作者,我们还创建了一个 [课程设置指南](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/for-teachers.md)! +- 如何 [在 VSCode 或 Codepace 中运行代码](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/0-course-setup/how-to-run.md) -请按照以下步骤操作: +按照以下步骤操作: -分叉仓库:点击此页面右上角的“Fork”按钮。 +Fork 仓库:点击页面右上角的 "Fork" 按钮。 克隆仓库:`git clone https://github.com/microsoft/AI-For-Beginners.git` -别忘了给这个仓库加星(🌟),以便以后更容易找到。 +别忘了给这个仓库加星标 (🌟),方便以后找到。 -## 结识其他学习者 +## 认识其他学习者 -加入我们的 [官方 AI Discord 服务器](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum),与其他学习这门课程的学习者见面并建立联系,获得支持。 +加入我们的 [官方 AI Discord 服务器](https://aka.ms/genai-discord?WT.mc_id=academic-105485-bethanycheum),与其他学习者交流并获得支持。 -## 测验 +如果您在构建过程中有产品反馈或问题,请访问我们的 [Azure AI Foundry 开发者论坛](https://aka.ms/foundry/forum) -> **关于测验的说明**:所有测验都包含在 etc\quiz-app 文件夹中的 Quiz-app 中,它们在测验中链接,可以在本地运行或部署到 Azure;请按照 `quiz-app` 文件夹中的说明进行操作。它们正在逐步本地化。 +## 测验 +> **关于测验的说明**:所有测验都存储在 etc\quiz-app 文件夹中的 Quiz-app 文件夹内。它们通过课程内容链接到测验应用程序,该应用程序可以在本地运行或部署到 Azure;请按照 `quiz-app` 文件夹中的说明操作。测验正在逐步进行本地化。 +## 寻求帮助 -## 需要帮助 - -您有建议或发现拼写或代码错误吗?请提出问题或创建拉取请求。 +您有建议或发现拼写或代码错误吗?请提交问题或创建拉取请求。 ## 特别感谢 -* **✍️ 主要作者:** [Dmitry Soshnikov](http://soshnikov.com),博士 -* **🔥 编辑:** [Jen Looper](https://twitter.com/jenlooper),博士 -* **🎨 手绘插图:** [Tomomi Imura](https://twitter.com/girlie_mac) -* **✅ 测验创建者:** [Lateefah Bello](https://github.com/CinnamonXI), [MLSA](https://studentambassadors.microsoft.com/) +* **✍️ 主要作者:** [Dmitry Soshnikov](http://soshnikov.com), 博士 +* **🔥 编辑:** [Jen Looper](https://twitter.com/jenlooper), 博士 +* **🎨 手绘笔记插画师:** [Tomomi Imura](https://twitter.com/girlie_mac) +* **✅ 测验创建者:** [Lateefah Bello](https://github.com/CinnamonXI), [MLSA](https://studentambassadors.microsoft.com/) * **🙏 核心贡献者:** [Evgenii Pishchik](https://github.com/Pe4enIks) ## 其他课程 -我们的团队还制作了其他课程!请查看: +我们的团队还制作了其他课程!查看以下内容: -* [初学者的数据科学](https://aka.ms/ds4beginners) -* [**版本 2.0** 初学者的生成 AI](https://aka.ms/genai-beginners) -* [**新** 初学者的网络安全](https://github.com/microsoft/Security-101??WT.mc_id=academic-96948-sayoung) -* [初学者的网页开发](https://aka.ms/webdev-beginners) -* [初学者的物联网](https://aka.ms/iot-beginners) -* [初学者的机器学习](https://aka.ms/ml4beginners) -* [初学者的 XR 开发](https://aka.ms/xr-dev-for-beginners) -* [掌握 GitHub Copilot 进行 AI 配对编程](https://aka.ms/GitHubCopilotAI) +- [初学者生成式 AI](https://aka.ms/genai-beginners) +- [初学者生成式 AI .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [使用 JavaScript 的生成式 AI](https://github.com/microsoft/generative-ai-with-javascript) +- [使用 Java 的生成式 AI](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [初学者 AI](https://aka.ms/ai-beginners) +- [初学者数据科学](https://aka.ms/datascience-beginners) +- [初学者机器学习](https://aka.ms/ml-beginners) +- [初学者网络安全](https://github.com/microsoft/Security-101) +- [初学者 Web 开发](https://aka.ms/webdev-beginners) +- [初学者物联网](https://aka.ms/iot-beginners) +- [初学者 XR 开发](https://github.com/microsoft/xr-development-for-beginners) +- [掌握 GitHub Copilot 的智能使用](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [为 C#/.NET 开发者掌握 GitHub Copilot](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [选择你的 Copilot 冒险](https://github.com/microsoft/CopilotAdventures) **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/SECURITY.md b/translations/zh/SECURITY.md index 47e1dbd7..871de9bf 100644 --- a/translations/zh/SECURITY.md +++ b/translations/zh/SECURITY.md @@ -1,40 +1,49 @@ + ## 安全性 -微软非常重视我们软件产品和服务的安全性,这包括通过我们的 GitHub 组织管理的所有源代码库,这些组织包括 [Microsoft](https://github.com/Microsoft)、[Azure](https://github.com/Azure)、[DotNet](https://github.com/dotnet)、[AspNet](https://github.com/aspnet)、[Xamarin](https://github.com/xamarin) 和 [我们的 GitHub 组织](https://opensource.microsoft.com/)。 +Microsoft 非常重视我们软件产品和服务的安全性,这包括通过我们的 GitHub 组织管理的所有源代码库,这些组织包括 [Microsoft](https://github.com/Microsoft)、[Azure](https://github.com/Azure)、[DotNet](https://github.com/dotnet)、[AspNet](https://github.com/aspnet)、[Xamarin](https://github.com/xamarin) 和 [我们的 GitHub 组织](https://opensource.microsoft.com/)。 -如果您认为在任何微软拥有的代码库中发现了符合 [微软安全漏洞定义](https://aka.ms/opensource/security/definition) 的安全漏洞,请按照下面的说明向我们报告。 +如果您认为在任何 Microsoft 拥有的代码库中发现了符合 [Microsoft 对安全漏洞的定义](https://aka.ms/opensource/security/definition) 的安全漏洞,请按照以下描述向我们报告。 ## 报告安全问题 **请不要通过公共 GitHub 问题报告安全漏洞。** -相反,请将其报告给微软安全响应中心(MSRC),网址为 [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report)。 +相反,请通过 Microsoft 安全响应中心 (MSRC) 报告,网址为 [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report)。 -如果您希望在不登录的情况下提交,请发送电子邮件至 [secure@microsoft.com](mailto:secure@microsoft.com)。如果可能,请使用我们的 PGP 密钥加密您的消息;请从 [微软安全响应中心 PGP 密钥页面](https://aka.ms/opensource/security/pgpkey) 下载它。 +如果您更愿意在不登录的情况下提交,请发送电子邮件至 [secure@microsoft.com](mailto:secure@microsoft.com)。如果可能,请使用我们的 PGP 密钥加密您的消息;您可以从 [Microsoft 安全响应中心 PGP 密钥页面](https://aka.ms/opensource/security/pgpkey) 下载密钥。 -您应该在 24 小时内收到回复。如果由于某种原因您没有收到,请通过电子邮件跟进,以确保我们收到了您的原始消息。更多信息可以在 [microsoft.com/msrc](https://aka.ms/opensource/security/msrc) 找到。 +您应该会在 24 小时内收到回复。如果由于某种原因未收到,请通过电子邮件跟进以确保我们收到了您的原始消息。更多信息请访问 [microsoft.com/msrc](https://aka.ms/opensource/security/msrc)。 -请包括以下请求的信息(尽可能提供)以帮助我们更好地理解可能问题的性质和范围: +请尽可能提供以下所需信息,以帮助我们更好地理解问题的性质和范围: - * 问题类型(例如,缓冲区溢出、SQL 注入、跨站脚本等) + * 问题类型(例如,缓冲区溢出、SQL 注入、跨站脚本攻击等) * 与问题表现相关的源文件的完整路径 * 受影响源代码的位置(标签/分支/提交或直接 URL) - * 重现问题所需的任何特殊配置 - * 重现问题的逐步说明 - * 概念证明或利用代码(如果可能) + * 复现问题所需的任何特殊配置 + * 复现问题的分步说明 + * 概念验证或漏洞利用代码(如果可能) * 问题的影响,包括攻击者可能如何利用该问题 -这些信息将帮助我们更快地处理您的报告。 +这些信息将帮助我们更快地对您的报告进行分类和处理。 -如果您是为了漏洞赏金而报告,更完整的报告可以有助于获得更高的赏金奖励。请访问我们的 [微软漏洞赏金计划](https://aka.ms/opensource/security/bounty) 页面以获取有关我们当前计划的更多详细信息。 +如果您是为漏洞赏金计划报告问题,更完整的报告可能会有助于获得更高的赏金奖励。有关我们当前计划的更多详细信息,请访问 [Microsoft 漏洞赏金计划](https://aka.ms/opensource/security/bounty) 页面。 ## 首选语言 -我们希望所有沟通使用英语。 +我们更倾向于使用英语进行所有交流。 ## 政策 -微软遵循 [协调漏洞披露](https://aka.ms/opensource/security/cvd) 原则。 +Microsoft 遵循 [协调漏洞披露](https://aka.ms/opensource/security/cvd) 原则。 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于重要信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或错误解释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/etc/CODE_OF_CONDUCT.md b/translations/zh/etc/CODE_OF_CONDUCT.md index 3396ae89..7502157f 100644 --- a/translations/zh/etc/CODE_OF_CONDUCT.md +++ b/translations/zh/etc/CODE_OF_CONDUCT.md @@ -1,12 +1,21 @@ -# 微软开源行为准则 + +# Microsoft 开源行为准则 -该项目已采纳 [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)。 +本项目已采用 [Microsoft 开源行为准则](https://opensource.microsoft.com/codeofconduct/)。 资源: -- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) -- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) -- 如有疑问或顾虑,请联系 [opencode@microsoft.com](mailto:opencode@microsoft.com) +- [Microsoft 开源行为准则](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft 行为准则常见问题](https://opensource.microsoft.com/codeofconduct/faq/) +- 如有疑问或需帮助,请联系 [opencode@microsoft.com](mailto:opencode@microsoft.com) -**免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误读不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/etc/CONTRIBUTING.md b/translations/zh/etc/CONTRIBUTING.md index 7bec419c..c5dc084b 100644 --- a/translations/zh/etc/CONTRIBUTING.md +++ b/translations/zh/etc/CONTRIBUTING.md @@ -1,20 +1,31 @@ + # 贡献 -本项目欢迎贡献和建议。大多数贡献需要您同意一份贡献者许可协议(CLA),声明您有权利并且确实授予我们使用您贡献的权利。有关详细信息,请访问 https://cla.microsoft.com。 +本项目欢迎贡献和建议。大多数贡献需要您同意贡献者许可协议 (CLA),声明您拥有权利并实际授予我们使用您的贡献的权利。详情请访问 https://cla.microsoft.com。 -当您提交拉取请求时,CLA-bot 将自动确定您是否需要提供 CLA,并适当地装饰 PR(例如,标签、评论)。只需按照机器人提供的说明进行操作。您只需在所有使用我们 CLA 的仓库中执行一次此操作。 +当您提交拉取请求时,CLA-bot 会自动判断您是否需要提供 CLA,并适当地标记 PR(例如,标签、评论)。只需按照机器人提供的指示操作即可。您只需在所有使用我们 CLA 的代码库中完成一次此操作。 -本项目已采纳 [Microsoft 开源行为准则](https://opensource.microsoft.com/codeofconduct/)。有关更多信息,请参见 [行为准则常见问题解答](https://opensource.microsoft.com/codeofconduct/faq/) 或通过 [opencode@microsoft.com](mailto:opencode@microsoft.com) 联系我们,提出任何其他问题或意见。 +本项目已采用 [Microsoft 开源行为准则](https://opensource.microsoft.com/codeofconduct/)。 +有关更多信息,请参阅 [行为准则常见问题](https://opensource.microsoft.com/codeofconduct/faq/) +或通过 [opencode@microsoft.com](mailto:opencode@microsoft.com) 联系我们,提出其他问题或意见。 -# 寻找贡献 +# 寻求贡献 -我们目前积极寻找以下主题的贡献: +我们目前正在积极寻找以下主题的贡献: -- [ ] 编写深度强化学习部分 -- [ ] 改进目标检测部分 + 笔记本 -- [ ] PyTorch Lightning(针对 [此部分](https://github.com/microsoft/AI-For-Beginners/blob/main/3-NeuralNetworks/05-Frameworks/README.md)) -- [ ] 编写命名实体识别部分 + 示例 -- [ ] 为 [此部分](https://github.com/microsoft/AI-For-Beginners/tree/main/5-NLP/15-LanguageModeling) 创建训练我们自己的嵌入示例 +- [ ] 撰写关于深度强化学习的章节 +- [ ] 改进关于目标检测的章节和笔记本 +- [ ] PyTorch Lightning(针对[此章节](https://github.com/microsoft/AI-For-Beginners/blob/main/3-NeuralNetworks/05-Frameworks/README.md)) +- [ ] 撰写关于命名实体识别的章节和示例 +- [ ] 为[此章节](https://github.com/microsoft/AI-For-Beginners/tree/main/5-NLP/15-LanguageModeling)创建训练自定义嵌入的示例 **免责声明**: -本文件是使用基于机器的人工智能翻译服务进行翻译的。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或错误解释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/etc/Mindmap.md b/translations/zh/etc/Mindmap.md index 0e614efa..ae4e149a 100644 --- a/translations/zh/etc/Mindmap.md +++ b/translations/zh/etc/Mindmap.md @@ -1,23 +1,32 @@ -# AI + +# 人工智能 -## [AI简介](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/1-Intro/README.md) - - AI定义 - - AI历史 - - AI方法 - - 自上而下/符号 - - 自下而上/神经 - - 进化 - - 协同/涌现AI - - [微软AI商业学校](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-cacaste) +## [人工智能简介](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/1-Intro/README.md) + - 人工智能定义 + - 人工智能历史 + - 人工智能方法 + - 自上而下/符号主义 + - 自下而上/神经网络 + - 演化方法 + - 协同/涌现人工智能 + - [微软人工智能商业学院](https://www.microsoft.com/ai/ai-business-school/?WT.mc_id=academic-77998-cacaste) -## [符号AI](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/README.md) +## [符号主义人工智能](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/README.md) - 知识表示 - [专家系统](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb) - - [本体](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) + - [本体论](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb) - 语义网 ## [神经网络](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/README.md) - - [感知器](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/README.md) + - [感知机](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/03-Perceptron/README.md) - [多层网络](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/04-OwnFramework/README.md) - [框架简介](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/README.md) - [PyTorch](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) @@ -25,52 +34,54 @@ - [过拟合](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/3-NeuralNetworks/05-Frameworks/Overfitting.md) ## [计算机视觉](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/README.md) - - 在微软学习平台上 - - [AI基础:探索计算机视觉](https://docs.microsoft.com/learn/paths/explore-computer-vision-microsoft-azure/?WT.mc_id=academic-77998-cacaste) - - [使用PyTorch进行计算机视觉](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) - - [使用TensorFlow进行计算机视觉](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste) + - 在微软学习平台 + - [人工智能基础:探索计算机视觉](https://docs.microsoft.com/learn/paths/explore-computer-vision-microsoft-azure/?WT.mc_id=academic-77998-cacaste) + - [使用 PyTorch 的计算机视觉](https://docs.microsoft.com/learn/modules/intro-computer-vision-pytorch/?WT.mc_id=academic-77998-cacaste) + - [使用 TensorFlow 的计算机视觉](https://docs.microsoft.com/learn/modules/intro-computer-vision-TensorFlow/?WT.mc_id=academic-77998-cacaste) - [计算机视觉简介:OpenCV](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/06-IntroCV/README.md) - [卷积网络](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/README.md) - - [CNN架构](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) + - [卷积神经网络架构](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md) - [迁移学习](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/README.md) - [训练技巧](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md) - - [自编码器和变分自编码器](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/README.md) + - [自动编码器和变分自动编码器](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/09-Autoencoders/README.md) - [生成对抗网络](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/README.md) - [风格迁移](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) - [目标检测](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/11-ObjectDetection/README.md) - - [分割](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/README.md) - + - [图像分割](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/4-ComputerVision/12-Segmentation/README.md) + ## [自然语言处理](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/README.md) - - 在微软学习平台上 - - [AI基础:探索自然语言处理](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-cacaste) - - [使用PyTorch进行自然语言处理](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) - - [使用TensorFlow进行自然语言处理](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) -- [文本表示](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/README.md) + - 在微软学习平台 + - [人工智能基础:探索自然语言处理](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77998-cacaste) + - [使用 PyTorch 的自然语言处理](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) + - [使用 TensorFlow 的自然语言处理](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-TensorFlow/?WT.mc_id=academic-77998-cacaste) + - [文本表示](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/13-TextRep/README.md) - 词袋模型 - TF/IDF - [语义嵌入](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/14-Embeddings/README.md) - Word2Vec - GloVE - [语言建模](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/15-LanguageModeling) - - [递归神经网络](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/README.md) + - [循环神经网络](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/16-RNN/README.md) - LSTM - GRU - - [生成式递归网络](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/README.md) - - [变换器和BERT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/README.md) + - [生成式循环网络](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/17-GenerativeNetworks/README.md) + - [Transformer 和 BERT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/18-Transformers/README.md) - [命名实体识别](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/19-NER/README.md) - - [文本生成和GPT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/20-LanguageModels/README.md) + - [文本生成与 GPT](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/5-NLP/20-LanguageModels/README.md) + ## 其他技术 - [遗传算法](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/21-GeneticAlgorithms/README.md) - [深度强化学习](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/22-DeepRL/README.md) - [多智能体系统](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/6-Other/23-MultiagentSystems/README.md) ## [人工智能伦理](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/7-Ethics/README.md) - - [微软学习:负责任的人工智能](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) + - [微软学习平台上的负责任人工智能](https://docs.microsoft.com/learn/paths/responsible-ai-business-principles/?WT.mc_id=academic-77998-cacaste) + ## 额外内容 - [多模态网络](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/README.md) - [CLIP](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/X-Extras/X1-MultiModal/Clip.ipynb) - DALL-E - VQ-GAN -**免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或误释不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/etc/SUPPORT.md b/translations/zh/etc/SUPPORT.md index a961cdc9..ca28b491 100644 --- a/translations/zh/etc/SUPPORT.md +++ b/translations/zh/etc/SUPPORT.md @@ -1,14 +1,23 @@ + # 支持 -## 如何提交问题和寻求帮助 +## 如何提交问题和获取帮助 -该项目使用 GitHub Issues 来跟踪错误和功能请求。在提交新问题之前,请先搜索现有问题以避免重复。对于新问题,请将您的错误或功能请求作为新问题提交。 +此项目使用 GitHub Issues 来跟踪错误和功能请求。在提交新问题之前,请先搜索现有问题以避免重复。对于新问题,请将您的错误或功能请求作为新问题提交。 -如需关于使用此项目的帮助和问题,请使用讨论板。 +如果需要帮助或对使用此项目有疑问,请使用讨论板。 ## Microsoft 支持政策 -对该项目的支持仅限于上述列出的资源。 +对此项目的支持仅限于上述列出的资源。 -**免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业的人类翻译。我们对因使用本翻译而产生的任何误解或误释不承担任何责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/etc/TRANSLATIONS.md b/translations/zh/etc/TRANSLATIONS.md index 16f0d0ee..c3afa225 100644 --- a/translations/zh/etc/TRANSLATIONS.md +++ b/translations/zh/etc/TRANSLATIONS.md @@ -1,36 +1,45 @@ -# 通过翻译课程贡献 + +# 通过翻译课程内容贡献 -我们欢迎对本课程中课程的翻译! +我们欢迎对本课程内容进行翻译! ## 指南 -每个课程文件夹和课程介绍文件夹中都有包含翻译后的markdown文件的文件夹。 +每个课程文件夹和课程介绍文件夹中都有包含翻译后的 Markdown 文件的子文件夹。 -> 请注意,请勿翻译代码示例文件中的任何代码;唯一需要翻译的内容是README、作业和测验。谢谢! +> 注意,请不要翻译代码示例文件中的任何代码;唯一需要翻译的内容是 README、作业和测验。谢谢! -翻译后的文件应遵循以下命名约定: +翻译后的文件应遵循以下命名规范: **README._[language]_.md** -其中 _[language]_ 是遵循ISO 639-1标准的两字母语言缩写(例如,`README.es.md`表示西班牙语,`README.nl.md`表示荷兰语)。 +其中 _[language]_ 是遵循 ISO 639-1 标准的两位语言缩写(例如,西班牙语为 `README.es.md`,荷兰语为 `README.nl.md`)。 **assignment._[language]_.md** -与README类似,请翻译作业。 +与 README 文件类似,请翻译作业文件。 **测验** -1. 通过在此处添加文件,将您的翻译添加到quiz-app中:https://github.com/microsoft/AI-For-Beginners/tree/main/etc/quiz-app/src/assets/translations,并遵循适当的命名约定(en.json,fr.json)。**不过,请不要本地化“true”或“false”这两个词。谢谢!** +1. 将您的翻译添加到测验应用中,通过在以下位置添加文件:https://github.com/microsoft/AI-For-Beginners/tree/main/etc/quiz-app/src/assets/translations,并遵循正确的命名规范(例如 en.json, fr.json)。**请不要翻译 'true' 或 'false' 这两个词,谢谢!** -2. 将您的语言代码添加到quiz-app的App.vue文件中的下拉菜单中。 +2. 在测验应用的 App.vue 文件中添加您的语言代码到下拉菜单中。 -3. 编辑quiz-app的[translations index.js文件](https://github.com/microsoft/AI-For-Beginners/blob/main/etc/quiz-app/src/assets/translations/index.js)以添加您的语言。 +3. 编辑测验应用的 [translations index.js 文件](https://github.com/microsoft/AI-For-Beginners/blob/main/etc/quiz-app/src/assets/translations/index.js),以添加您的语言。 -4. 最后,编辑您翻译后的README.md文件中的所有测验链接,使其直接指向您的翻译测验:https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1 变为 https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1?loc=id +4. 最后,编辑您翻译后的 README.md 文件中的所有测验链接,使其直接指向您的翻译版测验:https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1 改为 https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/1?loc=id -**谢谢** +**感谢您!** -我们非常感谢您的努力! +我们真诚地感谢您的努力! **免责声明**: -本文件使用机器翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或错误解释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/etc/quiz-app/README.md b/translations/zh/etc/quiz-app/README.md index f50b6fa4..432631be 100644 --- a/translations/zh/etc/quiz-app/README.md +++ b/translations/zh/etc/quiz-app/README.md @@ -1,18 +1,27 @@ + # 测验 -这些测验是 https://aka.ms/ai-beginners 上 AI 课程的课前和课后测验。 +这些测验是 AI 课程(https://aka.ms/ai-beginners)的课前和课后测验。 -## 添加翻译的测验集 +## 添加翻译后的测验集 -通过在 `assets/translations` 文件夹中创建匹配的测验结构来添加测验翻译。规范测验位于 `assets/translations/en`。测验按课程分为几个组。确保将编号与正确的测验部分对齐。本课程总共有 40 个测验,编号从 0 开始。 +通过在 `assets/translations` 文件夹中创建相应的测验结构来添加测验翻译。原始测验位于 `assets/translations/en` 文件夹中。测验按照课程分为多个组别。请确保编号与正确的测验部分对齐。整个课程共有 40 个测验,编号从 0 开始。 -编辑完翻译后,编辑翻译文件夹中的 index.js 文件,以按照 `en` 中的约定导入所有文件。 +编辑翻译内容后,修改翻译文件夹中的 `index.js` 文件,按照 `en` 文件夹中的约定导入所有文件。 -在 `assets/translations` 中编辑 `index.js` 文件,以导入新的翻译文件。 +接着,编辑 `assets/translations` 文件夹中的 `index.js` 文件,导入新翻译的文件。 -然后,在此应用程序中的 `App.vue` 下拉菜单中添加您的语言。将本地化缩写与您的语言文件夹名称匹配。 +然后,编辑此应用中的 `App.vue` 文件中的下拉菜单,添加您的语言。确保本地化缩写与您的语言文件夹名称匹配。 -最后,如果存在,编辑翻译课程中的所有测验链接,以包括此本地化作为查询参数,例如:`?loc=fr`。 +最后,编辑翻译课程中的所有测验链接(如果存在),将本地化作为查询参数添加,例如:`?loc=fr`。 ## 项目设置 @@ -20,13 +29,13 @@ npm install ``` -### 为开发编译和热重载 +### 编译并热加载用于开发 ``` npm run serve ``` -### 为生产编译和压缩 +### 编译并压缩用于生产 ``` npm run build @@ -42,55 +51,56 @@ npm run lint 请参阅 [配置参考](https://cli.vuejs.org/config/)。 -致谢:感谢这个测验应用程序的原始版本: https://github.com/arpan45/simple-quiz-vue +致谢:感谢此测验应用的原始版本:https://github.com/arpan45/simple-quiz-vue ## 部署到 Azure -以下是帮助您入门的逐步指南: +以下是帮助您入门的分步指南: -1. 叉一个 GitHub 仓库 -确保您的静态 Web 应用代码在您的 GitHub 仓库中。叉这个仓库。 +1. Fork GitHub 仓库 +确保您的静态 Web 应用代码在 GitHub 仓库中。Fork 此仓库。 -2. 创建 Azure 静态 Web 应用 -- 创建一个 [Azure 账户](http://azure.microsoft.com) -- 访问 [Azure 门户](https://portal.azure.com) -- 点击“创建资源”,搜索“静态 Web 应用”。 +2. 创建 Azure 静态 Web 应用 +- 创建一个 [Azure 账户](http://azure.microsoft.com) +- 访问 [Azure 门户](https://portal.azure.com) +- 点击“创建资源”,搜索“静态 Web 应用”。 - 点击“创建”。 -3. 配置静态 Web 应用 -- 基本信息:订阅:选择您的 Azure 订阅。 -- 资源组:创建一个新的资源组或使用现有的。 -- 名称:为您的静态 Web 应用提供一个名称。 -- 区域:选择离您的用户最近的区域。 +3. 配置静态 Web 应用 +- 基本信息: + - 订阅:选择您的 Azure 订阅。 + - 资源组:创建一个新的资源组或使用现有的资源组。 + - 名称:为您的静态 Web 应用提供一个名称。 + - 区域:选择离您的用户最近的区域。 -- #### 部署详情: -- 来源:选择“GitHub”。 -- GitHub 账户:授权 Azure 访问您的 GitHub 账户。 -- 组织:选择您的 GitHub 组织。 -- 仓库:选择包含您静态 Web 应用的仓库。 -- 分支:选择您想要部署的分支。 +- #### 部署详情: + - 源:选择“GitHub”。 + - GitHub 账户:授权 Azure 访问您的 GitHub 账户。 + - 组织:选择您的 GitHub 组织。 + - 仓库:选择包含静态 Web 应用的仓库。 + - 分支:选择您要部署的分支。 -- #### 构建详情: -- 构建预设:选择您的应用构建所用的框架(例如,React、Angular、Vue 等)。 -- 应用位置:指定包含您应用代码的文件夹(例如,如果在根目录,则为 /)。 -- API 位置:如果您有 API,请指定其位置(可选)。 -- 输出位置:指定生成输出的文件夹(例如,build 或 dist)。 +- #### 构建详情: + - 构建预设:选择您的应用所使用的框架(例如 React、Angular、Vue 等)。 + - 应用位置:指定包含应用代码的文件夹(例如,如果在根目录,则为 /)。 + - API 位置:如果有 API,请指定其位置(可选)。 + - 输出位置:指定生成的构建输出所在的文件夹(例如 build 或 dist)。 -4. 审核并创建 -审核您的设置并点击“创建”。Azure 将设置所需的资源并在您的仓库中创建 GitHub Actions 工作流。 +4. 审核并创建 +审核您的设置并点击“创建”。Azure 将设置必要的资源,并在您的仓库中创建一个 GitHub Actions 工作流。 -5. GitHub Actions 工作流 -Azure 将自动在您的仓库中创建一个 GitHub Actions 工作流文件(.github/workflows/azure-static-web-apps-.yml)。该工作流将处理构建和部署过程。 +5. GitHub Actions 工作流 +Azure 会自动在您的仓库中创建一个 GitHub Actions 工作流文件(.github/workflows/azure-static-web-apps-.yml)。此工作流将处理构建和部署过程。 -6. 监控部署 -转到您的 GitHub 仓库中的“操作”选项卡。 -您应该看到一个正在运行的工作流。此工作流将构建并将您的静态 Web 应用部署到 Azure。 -一旦工作流完成,您的应用将在提供的 Azure URL 上上线。 +6. 监控部署 +前往 GitHub 仓库中的“Actions”标签页。 +您应该会看到一个正在运行的工作流。此工作流将构建并部署您的静态 Web 应用到 Azure。 +工作流完成后,您的应用将在提供的 Azure URL 上上线。 ### 示例工作流文件 -以下是 GitHub Actions 工作流文件可能的示例: -name: Azure Static Web Apps CI/CD +以下是 GitHub Actions 工作流文件的示例: +name: Azure Static Web Apps CI/CD ``` on: push: @@ -120,8 +130,8 @@ jobs: ``` ### 其他资源 -- [Azure 静态 Web 应用文档](https://learn.microsoft.com/azure/static-web-apps/getting-started) -- [GitHub Actions 文档](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) +- [Azure 静态 Web 应用文档](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [GitHub Actions 文档](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) -**免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而产生的任何误解或错误解释不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/0-course-setup/for-teachers.md b/translations/zh/lessons/0-course-setup/for-teachers.md index 050006ea..8256dfbd 100644 --- a/translations/zh/lessons/0-course-setup/for-teachers.md +++ b/translations/zh/lessons/0-course-setup/for-teachers.md @@ -1,26 +1,35 @@ -# 对于教育工作者 + +# 给教育工作者 -您想在课堂上使用这个课程吗?请随意使用! +想在课堂上使用这套课程吗?请随意使用! -实际上,您可以通过使用 GitHub Classroom 在 GitHub 本身中使用它。 +事实上,您可以通过 GitHub Classroom 在 GitHub 上直接使用它。 -为此,请先克隆这个仓库。您需要为每一节课创建一个仓库,因此您需要将每个文件夹提取到一个单独的仓库中。这样,[GitHub Classroom](https://classroom.github.com/classrooms) 就可以单独处理每一节课。 +要做到这一点,请先 fork 此仓库。您需要为每节课创建一个单独的仓库,因此需要将每个文件夹提取到一个独立的仓库中。这样,[GitHub Classroom](https://classroom.github.com/classrooms) 就可以分别识别每节课。 -这些[完整说明](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/)将为您提供如何设置课堂的思路。 +这些[完整的说明](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/)可以帮助您了解如何设置您的课堂。 -## 按照当前状态使用仓库 +## 按原样使用此仓库 -如果您希望按照当前状态使用这个仓库,而不使用 GitHub Classroom,也可以做到。您需要与学生沟通,告诉他们一起完成哪一节课。 +如果您希望按当前形式使用此仓库,而不使用 GitHub Classroom,这也是可以的。您需要与学生沟通,一起完成哪一节课程。 -在在线格式(如 Zoom、Teams 或其他)中,您可以为测验形成小组讨论室,并指导学生帮助他们准备学习。然后邀请学生参加测验,并在特定时间将他们的答案作为“问题”提交。对于作业,如果您希望学生在公开的环境中协作工作,也可以采取同样的方法。 +在在线教学环境中(如 Zoom、Teams 或其他平台),您可以为测验创建分组讨论室,并指导学生为学习做好准备。然后邀请学生参加测验,并在特定时间以“issues”的形式提交答案。如果您希望学生公开协作完成作业,也可以采用类似的方式。 -如果您更喜欢更私密的格式,可以让学生将课程逐节克隆到他们自己的 GitHub 私有仓库中,并给予您访问权限。然后他们可以私下完成测验和作业,并通过您课堂仓库中的问题提交给您。 +如果您更喜欢更私密的形式,可以让学生逐节 fork 课程到他们自己的 GitHub 私有仓库,并授予您访问权限。这样,他们可以私下完成测验和作业,并通过您课堂仓库中的 issues 提交给您。 -在在线课堂格式中,有很多方法可以使这一切顺利进行。请告诉我们什么对您最有效! +在在线课堂中,有很多方法可以让这套课程发挥作用。请告诉我们哪种方式最适合您! ## 请分享您的想法 -我们希望这个课程能为您和您的学生提供帮助。请在讨论板上给我们反馈! +我们希望这套课程能够满足您和学生的需求。请在讨论区中给我们反馈! -**免责声明**: -本文件使用机器翻译服务进行了翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/0-course-setup/how-to-run.md b/translations/zh/lessons/0-course-setup/how-to-run.md index 89cd8b2a..831020ef 100644 --- a/translations/zh/lessons/0-course-setup/how-to-run.md +++ b/translations/zh/lessons/0-course-setup/how-to-run.md @@ -1,12 +1,21 @@ + # 如何运行代码 -本课程包含许多可执行的示例和实验室,您可能希望运行这些示例。为了做到这一点,您需要能够在本课程提供的 Jupyter Notebooks 中执行 Python 代码。您有几种运行代码的选项: +本课程包含许多可执行的示例和实验室,您可能希望运行这些代码。为此,您需要能够在本课程提供的 Jupyter Notebooks 中执行 Python 代码。以下是几种运行代码的方式: ## 在本地计算机上运行 -要在本地计算机上运行代码,您需要安装某个版本的 Python。我个人推荐安装 **[miniconda](https://conda.io/en/latest/miniconda.html)** - 这是一个相对轻量的安装,它支持 `conda` 包管理器,用于不同的 Python **虚拟环境**。 +要在本地计算机上运行代码,您需要安装某个版本的 Python。我个人推荐安装 **[miniconda](https://conda.io/en/latest/miniconda.html)**——这是一种轻量级的安装方式,支持用于不同 Python **虚拟环境**的 `conda` 包管理器。 -安装完 miniconda 后,您需要克隆该代码库并创建一个用于本课程的虚拟环境: +安装 miniconda 后,您需要克隆代码库并创建一个用于本课程的虚拟环境: ```bash git clone http://github.com/microsoft/ai-for-beginners @@ -17,51 +26,51 @@ conda activate ai4beg ### 使用带有 Python 扩展的 Visual Studio Code -使用本课程的最佳方式可能是通过带有 [Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) 的 [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) 打开它。 +使用本课程的最佳方式可能是通过 [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) 和 [Python 扩展](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) 打开它。 -> **注意**:一旦您克隆并在 VS Code 中打开目录,它会自动建议您安装 Python 扩展。您还需要按照上述说明安装 miniconda。 +> **注意**:克隆并在 VS Code 中打开目录后,系统会自动建议您安装 Python 扩展。您还需要按照上述说明安装 miniconda。 -> **注意**:如果 VS Code 建议您在容器中重新打开代码库,您需要拒绝此请求,以使用本地 Python 安装。 +> **注意**:如果 VS Code 建议您在容器中重新打开代码库,请拒绝此操作以使用本地 Python 安装。 ### 在浏览器中使用 Jupyter -您还可以直接在自己计算机的浏览器中使用 Jupyter 环境。实际上,经典 Jupyter 和 Jupyter Hub 都提供了相当方便的开发环境,具有自动补全、代码高亮等功能。 +您还可以直接在自己的计算机浏览器中使用 Jupyter 环境。实际上,经典 Jupyter 和 Jupyter Hub 都提供了非常方便的开发环境,包括自动补全、代码高亮等功能。 -要在本地启动 Jupyter,请进入课程目录,并执行: +要在本地启动 Jupyter,请进入课程目录并执行以下命令: ```bash jupyter notebook -``` -或 +``` +或 ```bash jupyterhub -``` -然后您可以导航到任何 `.ipynb` files, open them and start working. +``` +然后,您可以导航到任意 `.ipynb` 文件,打开并开始工作。 -### Running in container +### 在容器中运行 -One alternative to Python installation would be to run the code in container. Since our repository contains special `.devcontainer` 文件夹,该文件夹指示如何为该代码库构建容器,VS Code 会建议您在容器中重新打开代码。这将需要 Docker 安装,并且会更复杂,因此我们建议更有经验的用户使用此选项。 +Python 安装的一个替代方案是使用容器运行代码。由于我们的代码库包含一个特殊的 `.devcontainer` 文件夹,指示如何为此代码库构建容器,VS Code 会提示您在容器中重新打开代码。这需要安装 Docker,并且操作会更复杂,因此我们建议更有经验的用户使用此方法。 -## 在云中运行 +## 在云端运行 -如果您不想在本地安装 Python,并且可以访问一些云资源 - 一个不错的替代方案是通过云运行代码。您可以通过几种方式做到这一点: +如果您不想在本地安装 Python,并且可以访问一些云资源,那么在云端运行代码是一个不错的选择。以下是几种方法: -* 使用 **[GitHub Codespaces](https://github.com/features/codespaces)**,这是在 GitHub 上为您创建的虚拟环境,可以通过 VS Code 浏览器界面访问。如果您可以访问 Codespaces,您只需点击代码库中的 **Code** 按钮,启动一个代码空间,几乎可以立即开始运行。 -* 使用 **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**。 [Binder](https://mybinder.org) 是为像您这样的人在云中提供的免费计算资源,以测试 GitHub 上的一些代码。主页上有一个按钮可以在 Binder 中打开代码库 - 这应该会快速将您带到 Binder 网站,Binder 会构建底层容器并无缝启动 Jupyter Web 界面。 +* 使用 **[GitHub Codespaces](https://github.com/features/codespaces)**,这是 GitHub 为您创建的虚拟环境,可通过 VS Code 的浏览器界面访问。如果您有 Codespaces 的访问权限,只需点击代码库中的 **Code** 按钮,启动一个 codespace,即可快速开始运行。 +* 使用 **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**。 [Binder](https://mybinder.org) 是为像您这样的用户提供的免费云计算资源,用于测试 GitHub 上的代码。在代码库首页有一个按钮可以在 Binder 中打开代码库——这会快速将您带到 Binder 网站,自动构建底层容器并无缝启动 Jupyter 网页界面。 -> **注意**:为了防止滥用,Binder 阻止访问某些网络资源。这可能会导致某些代码无法正常工作,特别是那些从公共互联网获取模型和/或数据集的代码。您可能需要寻找一些解决方法。此外,Binder 提供的计算资源相当基础,因此训练将会很慢,尤其是在后面的更复杂的课程中。 +> **注意**:为防止滥用,Binder 对某些网络资源的访问进行了限制。这可能会导致某些代码无法运行,例如从公共互联网获取模型或数据集的代码。您可能需要找到一些替代方法。此外,Binder 提供的计算资源相对基础,因此在后续更复杂的课程中,训练速度会很慢。 -## 在云中使用 GPU 运行 +## 在云端使用 GPU 运行 -本课程中的一些后续课程将极大受益于 GPU 支持,否则训练将会非常缓慢。您可以遵循以下几种选择,特别是如果您可以通过 [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) 或通过您的机构访问云: +本课程的一些后续课程如果有 GPU 支持会受益匪浅,否则训练速度会非常慢。如果您可以通过 [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) 或您的机构访问云资源,可以选择以下几种方式: -* 创建 [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) 并通过 Jupyter 连接到它。然后,您可以直接将代码库克隆到该机器上,开始学习。NC 系列虚拟机支持 GPU。 +* 创建 [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste),并通过 Jupyter 连接到它。然后,您可以直接将代码库克隆到虚拟机上并开始学习。NC 系列虚拟机支持 GPU。 -> **注意**:某些订阅,包括 Azure for Students,并不默认提供 GPU 支持。您可能需要通过技术支持请求额外的 GPU 核心。 +> **注意**:某些订阅(包括 Azure for Students)默认不提供 GPU 支持。您可能需要通过技术支持请求额外的 GPU 核心。 -* 创建 [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste),然后在其中使用 Notebook 功能。 [此视频](https://azure-for-academics.github.io/quickstart/azureml-papers/) 展示了如何将代码库克隆到 Azure ML notebook 中并开始使用。 +* 创建 [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste),然后使用其中的 Notebook 功能。[此视频](https://azure-for-academics.github.io/quickstart/azureml-papers/) 展示了如何将代码库克隆到 Azure ML Notebook 并开始使用。 -您还可以使用 Google Colab,它提供了一些免费的 GPU 支持,并可以在其中上传 Jupyter Notebooks,逐个执行它们。 +您还可以使用 Google Colab,它提供一些免费的 GPU 支持,并将 Jupyter Notebooks 上传到其中逐一执行。 **免责声明**: -本文件是使用机器翻译的人工智能翻译服务进行翻译的。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于重要信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误读不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/0-course-setup/setup.md b/translations/zh/lessons/0-course-setup/setup.md index 387c08e5..91a0cb37 100644 --- a/translations/zh/lessons/0-course-setup/setup.md +++ b/translations/zh/lessons/0-course-setup/setup.md @@ -1,45 +1,54 @@ -# 开始使用本课程 + +# 开始学习本课程 ## 你是学生吗? -通过以下资源开始学习: +可以通过以下资源开始学习: -* [学生中心页面](https://docs.microsoft.com/learn/student-hub?WT.mc_id=academic-77998-cacaste) 在这个页面上,你会找到初学者资源、学生包,甚至获取免费证书凭证的方法。这是你想要收藏并不时查看的一页,因为我们每月至少会更换一次内容。 -* [微软学生学习大使](https://studentambassadors.microsoft.com?WT.mc_id=academic-77998-cacaste) 加入全球学生大使社区,这可能是你进入微软的途径。 +* [学生中心页面](https://docs.microsoft.com/learn/student-hub?WT.mc_id=academic-77998-cacaste) 在这个页面,你可以找到入门资源、学生包,甚至是获取免费认证券的方法。建议将此页面加入书签,并定期查看,因为我们至少每月更新一次内容。 +* [Microsoft 学生学习大使](https://studentambassadors.microsoft.com?WT.mc_id=academic-77998-cacaste) 加入一个全球学生大使社区,这可能是你进入 Microsoft 的途径。 -**学生们**,有几种方式可以使用这个课程。首先,你可以直接阅读文本并在 GitHub 上查看代码。如果你想在任何笔记本中运行代码 - [请阅读我们的说明](./etc/how-to-run.md),并在[这篇博客文章](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)中找到更多建议。 +**学生们**,有几种方式可以使用本课程。首先,你可以直接在 GitHub 上阅读文本并查看代码。如果你想运行任何笔记本中的代码,请[阅读我们的说明](./etc/how-to-run.md),并在[这篇博客文章](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)中找到更多建议。 -> **注意**: [关于如何运行本课程中代码的说明](/how-to-run.md) +> **Note**: [如何运行本课程代码的说明](./how-to-run.md) ## 自学 -然而,如果你想将课程作为自学项目,我们建议你将整个仓库分叉到自己的 GitHub 账户,并独立或与小组一起完成练习: +如果你想将本课程作为一个自学项目,我们建议你将整个仓库 fork 到自己的 GitHub 账户,并独立完成练习,或者与小组一起完成: -* 从一项课前测验开始。 -* 阅读讲座的介绍文本。 -* 如果讲座有额外的笔记本,逐一查看,阅读并执行代码。如果同时提供 TensorFlow 和 PyTorch 笔记本,你可以专注于其中一个 - 选择你喜欢的框架。 -* 笔记本通常包含一些挑战,需要你稍微调整代码以进行实验。 -* 参加课后测验。 -* 如果模块附带实验室 - 完成作业。 -* 访问 [讨论板](https://github.com/microsoft/AI-For-Beginners/discussions) 来“畅所欲言”。 +* 从课前测验开始。 +* 阅读课程的介绍文本。 +* 如果课程包含额外的笔记本,逐步阅读并运行代码。如果同时提供了 TensorFlow 和 PyTorch 的笔记本,你可以专注于其中一个,选择你喜欢的框架。 +* 笔记本中通常包含一些需要你稍作修改代码以进行实验的挑战。 +* 完成课后测验。 +* 如果模块附带实验室,完成相关作业。 +* 访问 [讨论板](https://github.com/microsoft/AI-For-Beginners/discussions) 进行“公开学习”。 -> 为了进一步学习,我们建议遵循这些 [Microsoft Learn](https://docs.microsoft.com/en-us/users/dmitrysoshnikov-9132/collections/31zgizg2p418yo/?WT.mc_id=academic-77998-cacaste) 模块和学习路径。 +> 对于进一步学习,我们推荐关注这些 [Microsoft Learn](https://docs.microsoft.com/en-us/users/dmitrysoshnikov-9132/collections/31zgizg2p418yo/?WT.mc_id=academic-77998-cacaste) 模块和学习路径。 -**教师们**,我们在[为教师提供的一些建议](/for-teachers.md)中包含了如何使用本课程的建议。 +**教师们**,我们[提供了一些建议](/for-teachers.md)供您参考如何使用本课程。 --- ## 教学法 -在构建本课程时,我们选择了两个教学原则:确保它是实践性 **基于项目** 的,并且包含 **频繁的测验**。 +在设计本课程时,我们选择了两个教学原则:确保课程是**基于项目的实践**,并且包含**频繁的测验**。 -通过确保内容与项目相符,学生的参与感会增强,概念的保留也会提高。此外,课前的低风险测验可以设定学生学习某个主题的意图,而课后的第二次测验则确保进一步的知识保留。这个课程设计得灵活且有趣,可以整体或部分进行学习。项目从小开始,到 12 周周期结束时变得越来越复杂。 +通过确保内容与项目相结合,学习过程会更具吸引力,同时有助于学生更好地掌握概念。此外,课前的低风险测验可以引导学生专注于学习主题,而课后的测验则进一步巩固知识。本课程设计灵活有趣,可以完整学习,也可以选择部分内容。项目从简单开始,到 12 周课程结束时逐渐变得复杂。 -> **关于测验的说明**: 所有测验都包含在 [这个应用](https://red-field-0a6ddfd03.1.azurestaticapps.net/) 中,共有 50 个测验,每个测验包含三个问题。它们在课程中链接,但测验应用可以在本地运行;请按照 `etc/quiz-app` 文件夹中的说明操作。 +> **关于测验的说明**:所有测验都包含在[这个应用程序](https://red-field-0a6ddfd03.1.azurestaticapps.net/)中,共有 50 个测验,每个测验包含三个问题。测验链接嵌入在课程中,但测验应用程序也可以本地运行;请按照 `etc/quiz-app` 文件夹中的说明操作。 ## 离线访问 -你可以通过使用 [Docsify](https://docsify.js.org/#/) 在离线状态下运行此文档。分叉此仓库, [在本地机器上安装 Docsify](https://docsify.js.org/#/quickstart),然后在该仓库的 `etc/docsify` 文件夹中,输入 `docsify serve`。网站将在你的本地主机的 3000 端口提供服务: `localhost:3000`。课程的 PDF 文件可以在 [这个链接](../../../../../../etc/pdf/readme.pdf) 中找到。 +你可以使用 [Docsify](https://docsify.js.org/#/) 离线运行此文档。Fork 此仓库,在本地机器上[安装 Docsify](https://docsify.js.org/#/quickstart),然后在此仓库的根文件夹中输入 `docsify serve`。网站将通过本地端口 3000 提供服务:`localhost:3000`。课程的 PDF 版本可通过[此链接](../../../../../../../../../etc/pdf/readme.pdf)获取。 **免责声明**: -本文件是使用基于机器的人工智能翻译服务进行翻译的。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原文件的母语版本应被视为权威来源。对于重要信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本作为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/1-Intro/README.md b/translations/zh/lessons/1-Intro/README.md index 142e387a..34137ebc 100644 --- a/translations/zh/lessons/1-Intro/README.md +++ b/translations/zh/lessons/1-Intro/README.md @@ -1,56 +1,66 @@ -> 图片来自 [Dmitry Soshnikov](http://soshnikov.com) + +> 图片由 [Dmitry Soshnikov](http://soshnikov.com) 提供 -随着时间的推移,计算资源变得更加便宜,数据也变得更加丰富,因此神经网络方法在许多领域(如计算机视觉或语音理解)与人类竞争时表现出了出色的性能。在过去十年中,人工智能一词主要被用作神经网络的同义词,因为我们听到的大多数人工智能成功案例都是基于它们的。 +随着时间的推移,计算资源变得更加廉价,同时可用的数据量也大幅增加,因此神经网络方法在许多领域(如计算机视觉或语音理解)中开始展现出与人类竞争的卓越表现。在过去的十年里,“人工智能”这个术语大多被用作“神经网络”的同义词,因为我们听到的大多数人工智能成功案例都基于神经网络。 -我们可以观察到方法的变化,例如,在创建一个下棋的计算机程序时: +我们可以通过创建国际象棋程序的演变来观察这些方法的变化: -* 早期的国际象棋程序基于搜索——程序明确尝试估计在给定的下一步中对手可能的走法,并根据可以在几步内实现的最佳位置选择一个最佳走法。这导致了所谓的 [alpha-beta 剪枝](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning) 搜索算法的发展。 -* 搜索策略在游戏结束时表现良好,因为搜索空间受限于少量可能的走法。然而,在游戏开始时,搜索空间巨大,算法可以通过学习人类玩家之间的现有对局来改进。后续实验采用了所谓的 [案例推理](https://en.wikipedia.org/wiki/Case-based_reasoning),程序在知识库中寻找与当前游戏位置非常相似的案例。 -* 现代赢得人类玩家的程序基于神经网络和 [强化学习](https://en.wikipedia.org/wiki/Reinforcement_learning),这些程序通过与自己对弈并从自身错误中学习来学习下棋——就像人类学习下棋时一样。然而,计算机程序可以在更短的时间内进行更多的对局,从而可以更快地学习。 +* 早期的国际象棋程序基于搜索算法——程序会显式地尝试估算对手在接下来几步中的可能走法,并根据几步内可以达到的最佳局面选择最优走法。这种方法促成了所谓的 [alpha-beta 剪枝](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning) 搜索算法的发展。 +* 搜索策略在游戏后期效果较好,因为此时搜索空间由于可能走法较少而受到限制。然而,在游戏开局阶段,搜索空间非常庞大,因此可以通过从人类棋局中学习来改进算法。后来的实验采用了所谓的 [基于案例的推理](https://en.wikipedia.org/wiki/Case-based_reasoning),程序会在知识库中寻找与当前棋局非常相似的案例。 +* 能够战胜人类玩家的现代程序基于神经网络和 [强化学习](https://en.wikipedia.org/wiki/Reinforcement_learning),这些程序通过长时间与自己对弈并从自己的错误中学习来掌握棋艺——这与人类学习下棋的方式非常相似。然而,计算机程序可以在更短的时间内进行更多的对局,因此学习速度远快于人类。 -✅ 进行一些研究,了解其他 AI 玩过的游戏。 +✅ 研究一下其他由人工智能参与的游戏。 -同样,我们可以看到创建“对话程序”(可能通过图灵测试)的方式是如何变化的: +同样,我们也可以看到“对话程序”(可能通过图灵测试)的开发方法是如何变化的: -* 早期的此类程序如 [Eliza](https://en.wikipedia.org/wiki/ELIZA),基于非常简单的语法规则和将输入句子重新表述为问题。 -* 现代助手,如 Cortana、Siri 或 Google Assistant,都是混合系统,使用神经网络将语音转换为文本并识别我们的意图,然后采用一些推理或显式算法来执行所需的操作。 -* 在未来,我们可能期待一个完整的基于神经网络的模型能够独立处理对话。最近的 GPT 和 [Turing-NLG](https://turing.microsoft.com/) 系列神经网络在这方面显示出了巨大的成功。 +* 早期的此类程序,例如 [Eliza](https://en.wikipedia.org/wiki/ELIZA),基于非常简单的语法规则,并将输入句子重新表述为问题。 +* 现代助手,如 Cortana、Siri 或 Google Assistant,都是混合系统,它们使用神经网络将语音转换为文本并识别用户意图,然后利用某些推理或显式算法来执行所需的操作。 +* 在未来,我们可能会看到完全基于神经网络的模型能够独立处理对话。最近的 GPT 和 [Turing-NLG](https://turing.microsoft.com/) 系列神经网络在这一领域展现了巨大的成功。 -> 图片来自 Dmitry Soshnikov,[照片](https://unsplash.com/photos/r8LmVbUKgns)来自 [Marina Abrosimova](https://unsplash.com/@abrosimova_marina_foto),Unsplash +> 图片由 Dmitry Soshnikov 提供,[照片](https://unsplash.com/photos/r8LmVbUKgns) 来自 [Marina Abrosimova](https://unsplash.com/@abrosimova_marina_foto),Unsplash ## 最近的人工智能研究 -神经网络研究的巨大增长始于2010年左右,当时大型公共数据集开始变得可用。一个名为 [ImageNet](https://en.wikipedia.org/wiki/ImageNet) 的庞大图像集合,包含约1400万张注释图像,催生了 [ImageNet 大规模视觉识别挑战赛](https://image-net.org/challenges/LSVRC/)。 +近年来,神经网络研究的快速增长始于 2010 年左右,当时大型公共数据集开始变得可用。一组名为 [ImageNet](https://en.wikipedia.org/wiki/ImageNet) 的庞大图像集合(包含约 1400 万张标注图像)催生了 [ImageNet 大规模视觉识别挑战赛](https://image-net.org/challenges/LSVRC/)。 ![ILSVRC 准确率](../../../../lessons/1-Intro/images/ilsvrc.gif) -> 图片来自 [Dmitry Soshnikov](http://soshnikov.com) -在2012年,[卷积神经网络](../4-ComputerVision/07-ConvNets/README.md)首次被应用于图像分类,这导致分类错误率显著下降(从近30%降至16.4%)。在2015年,微软研究院的ResNet架构[达到了人类水平的准确率](https://doi.org/10.1109/ICCV.2015.123)。 +> 图片由 [Dmitry Soshnikov](http://soshnikov.com) 提供 -自那时以来,神经网络在许多任务中表现出了非常成功的行为: +2012 年,[卷积神经网络](../4-ComputerVision/07-ConvNets/README.md) 首次被用于图像分类,这使得分类错误率显著下降(从接近 30% 降至 16.4%)。2015 年,微软研究院的 ResNet 架构[达到了人类水平的准确率](https://doi.org/10.1109/ICCV.2015.123)。 + +从那时起,神经网络在许多任务中表现出了非常成功的效果: --- -年份 | 达到人类水平 ------|-------- +年份 | 达到人类水平的任务 +-----|----------------- 2015 | [图像分类](https://doi.org/10.1109/ICCV.2015.123) 2016 | [对话语音识别](https://arxiv.org/abs/1610.05256) -2018 | [自动机器翻译](https://arxiv.org/abs/1803.05567)(中文到英文) +2018 | [自动机器翻译](https://arxiv.org/abs/1803.05567)(中译英) 2020 | [图像描述生成](https://arxiv.org/abs/2009.13682) -在过去几年中,我们见证了大型语言模型的巨大成功,例如BERT和GPT-3。这主要得益于大量可用的通用文本数据,使我们能够训练模型以捕捉文本的结构和含义,在通用文本集合上进行预训练,然后将这些模型专门化以处理更具体的任务。在本课程的后续部分,我们将进一步了解[自然语言处理](../5-NLP/README.md)。 +在过去几年中,我们见证了大型语言模型(如 BERT 和 GPT-3)的巨大成功。这主要是因为有大量的通用文本数据可用,这使得我们能够训练模型来捕捉文本的结构和意义,先在通用文本集合上进行预训练,然后将这些模型专门化用于更具体的任务。我们将在本课程后续部分中学习更多关于[自然语言处理](../5-NLP/README.md)的内容。 ## 🚀 挑战 -浏览互联网,确定您认为人工智能最有效使用的地方。是地图应用程序,还是某种语音转文本服务,或是视频游戏?研究该系统是如何构建的。 +在互联网上进行探索,找出你认为人工智能最有效的应用领域。是地图应用程序、语音转文字服务,还是视频游戏?研究该系统是如何构建的。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/201) ## 复习与自学 -通过阅读[这节课](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/2-history-of-ML),回顾人工智能和机器学习的历史。从该课或本课顶部的速写笔记中选择一个元素,深入研究以理解其演变的文化背景。 +通过阅读[这节课](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/2-history-of-ML)来回顾人工智能和机器学习的历史。从该课程顶部的手绘笔记或本节课中选取一个元素,深入研究其文化背景,以了解其演变过程。 -**作业**: [游戏创作马拉松](assignment.md) +**作业**:[游戏创作活动](assignment.md) **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们不对因使用本翻译而产生的任何误解或误释承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/1-Intro/assignment.md b/translations/zh/lessons/1-Intro/assignment.md index e86e4ff2..a306defd 100644 --- a/translations/zh/lessons/1-Intro/assignment.md +++ b/translations/zh/lessons/1-Intro/assignment.md @@ -1,6 +1,15 @@ -# 游戏开发马拉松 + +# 游戏创作比赛 -游戏领域深受人工智能和机器学习发展的影响。在这次作业中,写一篇简短的论文,介绍一款你喜欢的受人工智能演变影响的游戏。这个游戏应该足够古老,以便受到几种类型的计算机处理系统的影响。一个好的例子是国际象棋或围棋,但也可以看看像乒乓球或吃豆人这样的电子游戏。写一篇讨论游戏的过去、现在和人工智能未来的文章。 +游戏领域深受人工智能和机器学习发展的影响。在这个任务中,请撰写一篇简短的文章,讨论一款你喜欢的、受人工智能演变影响的游戏。这个游戏应该足够古老,以便能够体现多种计算处理系统的影响。一个很好的例子是国际象棋或围棋,但也可以看看像乒乓球或吃豆人这样的电子游戏。撰写一篇文章,探讨该游戏的过去、现在以及人工智能的未来。 **免责声明**: -本文件是使用基于机器的人工智能翻译服务进行翻译的。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于重要信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/2-Symbolic/README.md b/translations/zh/lessons/2-Symbolic/README.md index 71a31f18..1047e6f1 100644 --- a/translations/zh/lessons/2-Symbolic/README.md +++ b/translations/zh/lessons/2-Symbolic/README.md @@ -1,107 +1,86 @@ -# 知识表示与专家系统 + +*图片 [来自维基百科](https://commons.wikimedia.org/w/index.php?curid=37705247),作者 Longlivetheux - 自制作品,CC BY-SA 4.0* -![符号人工智能内容摘要](../../../../translated_images/ai-symbolic.715a30cb610411a6964d2e2f23f24364cb338a07cb4844c1f97084d366e586c3.zh.png) - -> 速记笔记由 [Tomomi Imura](https://twitter.com/girlie_mac) 提供 - -对人工智能的追求基于对知识的探索,旨在以类似于人类的方式理解世界。那么,如何才能实现这一目标呢? - -## [课前小测](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/102) - -在人工智能的早期,创建智能系统的自上而下的方法(在上节课中讨论过)是非常流行的。其理念是将人类的知识提取到某种机器可读的形式中,然后利用这些知识自动解决问题。这种方法基于两个重要的概念: - -* 知识表示 -* 推理 - -## 知识表示 - -符号人工智能中的一个重要概念是**知识**。需要将知识与*信息*或*数据*区分开。例如,可以说书籍包含知识,因为通过学习书籍,人们可以成为专家。然而,书籍中所包含的实际上被称为*数据*,通过阅读书籍并将这些数据整合到我们的世界模型中,我们将这些数据转化为知识。 - -> ✅ **知识** 是我们头脑中所包含的,代表我们对世界的理解。它通过一个主动的**学习**过程获得,该过程将我们接收到的信息整合到我们对世界的主动模型中。 - -通常,我们并不会严格定义知识,而是通过 [DIKW 金字塔](https://en.wikipedia.org/wiki/DIKW_pyramid) 将其与其他相关概念对齐。它包含以下概念: - -* **数据** 是以物理媒介表示的东西,如书面文本或口头语言。数据独立于人类而存在,可以在不同人之间传递。 -* **信息** 是我们在脑海中对数据的解释。例如,当我们听到“计算机”这个词时,我们对它有一定的理解。 -* **知识** 是被整合到我们世界模型中的信息。例如,一旦我们了解到计算机是什么,我们就开始对它的工作原理、价格以及用途有一些想法。这些相互关联的概念网络形成了我们的知识。 -* **智慧** 是我们对世界理解的另一个层次,代表*元知识*,例如某种关于知识如何以及何时使用的概念。 - - - -*图片 [来自维基百科](https://commons.wikimedia.org/w/index.php?curid=37705247),作者 Longlivetheux - 自主创作,CC BY-SA 4.0* - -因此,**知识表示**的问题是找到一种有效的方法,将知识以数据的形式表示在计算机内部,以使其能够自动使用。这可以视为一个光谱: +因此,**知识表示**的问题是找到一种有效的方法,将知识以数据的形式表示在计算机中,使其能够自动使用。这可以看作是一个光谱: ![知识表示光谱](../../../../translated_images/knowledge-spectrum.b60df631852c0217e941485b79c9eee40ebd574f15f18609cec5758fcb384bf3.zh.png) > 图片由 [Dmitry Soshnikov](http://soshnikov.com) 提供 -* 在左侧,有非常简单的知识表示类型,可以有效地被计算机使用。最简单的是算法表示,其中知识由计算机程序表示。然而,这并不是表示知识的最佳方式,因为它缺乏灵活性。我们头脑中的知识往往是非算法的。 -* 在右侧,有自然文本等表示方式。这是最强大的,但不能用于自动推理。 +* 在左侧,有非常简单的知识表示类型,可以被计算机有效使用。最简单的是算法式表示,即通过计算机程序来表示知识。然而,这并不是表示知识的最佳方式,因为它缺乏灵活性。我们头脑中的知识通常是非算法性的。 +* 在右侧,有像自然语言文本这样的表示方式。它是最强大的,但无法用于自动推理。 -> ✅ 想一想你是如何在脑海中表示知识并将其转化为笔记的。是否有某种特定格式对你有帮助以促进记忆? +> ✅ 想一想你是如何在头脑中表示知识并将其转化为笔记的。有没有一种特定的格式能帮助你更好地记忆? -## 分类计算机知识表示 +## 计算机知识表示的分类 -我们可以将不同的计算机知识表示方法分类为以下几类: +我们可以将不同的计算机知识表示方法分为以下几类: -* **网络表示** 基于我们头脑中存在相互关联的概念网络。我们可以尝试在计算机内部重建相同的网络 - 这被称为**语义网络**。 +* **网络表示**基于我们头脑中存在一个相互关联的概念网络。我们可以尝试在计算机中以图的形式重现这些网络——即所谓的**语义网络**。 -1. **对象-属性-值三元组** 或 **属性-值对**。由于图可以在计算机内部表示为节点和边的列表,我们可以通过包含对象、属性和值的三元组列表来表示语义网络。例如,我们构建关于编程语言的以下三元组: +1. **对象-属性-值三元组**或**属性-值对**。由于图可以在计算机中表示为节点和边的列表,我们可以通过三元组列表来表示语义网络,其中包含对象、属性和值。例如,我们可以构建以下关于编程语言的三元组: 对象 | 属性 | 值 --------|-----------|------ +-----|------|----- Python | 是 | 无类型语言 Python | 发明者 | Guido van Rossum Python | 块语法 | 缩进 无类型语言 | 没有 | 类型定义 -> ✅ 想想三元组如何用于表示其他类型的知识。 +> ✅ 想一想三元组如何用于表示其他类型的知识。 -2. **层次表示** 强调我们通常在头脑中创建对象的层次结构。例如,我们知道金丝雀是一种鸟,而所有鸟都有翅膀。我们还对金丝雀通常的颜色以及它们的飞行速度有一定的了解。 +2. **层次表示**强调我们通常在头脑中创建对象的层次结构。例如,我们知道金丝雀是一种鸟类,而所有鸟类都有翅膀。我们还知道金丝雀通常是什么颜色,以及它们的飞行速度。 - - **框架表示** 基于将每个对象或对象类表示为包含**插槽**的**框架**。插槽有可能的默认值、值限制或可以调用的存储过程以获得插槽的值。所有框架形成类似于面向对象编程语言中的对象层次结构。 - - **场景** 是一种特殊类型的框架,表示随时间展开的复杂情况。 + - **框架表示**基于将每个对象或对象类别表示为一个**框架**,框架包含**槽**。槽可以有默认值、值限制或存储过程,这些过程可以被调用以获取槽的值。所有框架形成一个类似于面向对象编程语言中的对象层次结构。 + - **场景**是表示复杂情境的一种特殊框架,这些情境可以随着时间展开。 **Python** -插槽 | 值 | 默认值 | 区间 | ------|-------|---------------|----------| -名称 | Python | | | -是 | 无类型语言 | | | -变量大小写 | | 驼峰式 | | -程序长度 | | | 5-5000 行 | -块语法 | 缩进 | | | +槽 | 值 | 默认值 | 区间 +---|----|--------|----- +名称 | Python | | +是 | 无类型语言 | | +变量命名 | | 驼峰命名 | +程序长度 | | | 5-5000行 +块语法 | 缩进 | | -3. **过程表示** 基于通过一系列在特定条件下可以执行的操作来表示知识。 - - 生产规则是 if-then 语句,允许我们得出结论。例如,医生可以有一个规则说 **如果** 患者有高烧 **或** 血液检查中 C 反应蛋白水平高 **那么** 他有炎症。一旦我们遇到其中一个条件,就可以得出关于炎症的结论,并在进一步推理中使用它。 - - 算法可以被视为另一种形式的过程表示,尽管它们几乎从未直接用于基于知识的系统。 +3. **过程表示**基于通过一系列动作来表示知识,这些动作可以在某些条件发生时执行。 + - 生产规则是允许我们得出结论的if-then语句。例如,医生可以有一个规则:**如果**患者发高烧**或**血液测试中C反应蛋白水平高,**那么**他有炎症。一旦我们遇到其中一个条件,就可以得出关于炎症的结论,然后在进一步推理中使用它。 + - 算法可以被认为是另一种过程表示形式,尽管它们几乎从未直接用于基于知识的系统。 -4. **逻辑** 最初由亚里士多德提出,作为表示普遍人类知识的一种方式。 - - 谓词逻辑作为一种数学理论过于复杂,无法被计算,因此通常使用其某个子集,例如在 Prolog 中使用的霍恩子句。 - - 描述逻辑是一类逻辑系统,用于表示和推理关于分布式知识表示的对象层次结构,如*语义网*。 +4. **逻辑**最初由亚里士多德提出,作为一种表示人类普遍知识的方法。 + - 谓词逻辑作为一种数学理论过于复杂,无法计算,因此通常使用它的某些子集,例如Prolog中使用的Horn子句。 + - 描述逻辑是一系列逻辑系统,用于表示和推理对象层次结构以及分布式知识表示,例如*语义网*。 ## 专家系统 -符号人工智能的早期成功之一是所谓的**专家系统** - 设计用于在某些有限问题领域充当专家的计算机系统。它们基于从一个或多个人类专家提取的**知识库**,并包含一个在其上执行推理的**推理引擎**。 +符号AI的早期成功之一是所谓的**专家系统**——设计为在某些有限问题领域中充当专家的计算机系统。它们基于从一个或多个领域专家提取的**知识库**,并包含一个在其之上执行推理的**推理引擎**。 -![人类架构](../../../../translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.zh.png) | ![基于知识的系统](../../../../translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.zh.png) ----------------------------------------------|------------------------------------------------ -人类神经系统的简化结构 | 基于知识的系统架构 +![人类架构](../../../../translated_images/arch-human.5d4d35f1bba3ab1cdfda96af2f10b89574eb31e9796d0e3011cd9beda1c35112.zh.png) | ![基于知识的系统架构](../../../../translated_images/arch-kbs.3ec5c150b09fa8dadc2beb0931a4983c9e2b03913a89eebcc103b5bb841b0212.zh.png) +----------------------------------|------------------------------------------- +人类神经系统的简化结构 | 基于知识的系统的架构 -专家系统的构建方式类似于人类的推理系统,其中包含**短期记忆**和**长期记忆**。同样,在基于知识的系统中,我们区分以下组件: +专家系统的构建类似于人类的推理系统,其中包含**短期记忆**和**长期记忆**。同样,在基于知识的系统中,我们区分以下组件: -* **问题记忆**:包含当前正在解决的问题的知识,即患者的体温或血压,他是否有炎症等。这种知识也称为**静态知识**,因为它包含我们目前对问题的快照 - 所谓的*问题状态*。 -* **知识库**:表示关于问题领域的长期知识。它是从人类专家手动提取的,并且在不同咨询之间不会改变。因为它允许我们从一个问题状态导航到另一个,所以也称为**动态知识**。 -* **推理引擎**:协调在问题状态空间中的整个搜索过程,必要时向用户询问问题。它还负责找到适用于每个状态的正确规则。 +* **问题记忆**:包含当前正在解决的问题的知识,例如患者的体温或血压、是否有炎症等。这些知识也称为**静态知识**,因为它包含我们当前对问题的了解的快照——即所谓的*问题状态*。 +* **知识库**:表示关于问题领域的长期知识。它是从领域专家手动提取的,并且不会因咨询而改变。由于它允许我们从一个问题状态导航到另一个问题状态,因此也称为**动态知识**。 +* **推理引擎**:协调整个搜索问题状态空间的过程,在必要时向用户提问。它还负责找到适用于每个状态的正确规则。 -作为一个例子,让我们考虑以下基于其物理特征确定动物的专家系统: +例如,让我们考虑以下基于动物物理特征的专家系统: -![AND-OR 树](../../../../translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.zh.png) +![AND-OR树](../../../../translated_images/AND-OR-Tree.5592d2c70187f283703c8e9c0d69d6a786eb370f4ace67f9a7aae5ada3d260b0.zh.png) > 图片由 [Dmitry Soshnikov](http://soshnikov.com) 提供 -该图被称为**AND-OR 树**,是生产规则集的图形表示。在从专家提取知识的初期,绘制树是有用的。为了在计算机内部表示知识,使用规则更为方便: +此图称为**AND-OR树**,它是生产规则集的图形表示。在从专家提取知识的初期,绘制树是有用的。为了在计算机中表示知识,使用规则会更方便: ``` IF the animal eats meat @@ -112,59 +91,57 @@ OR (animal has sharp teeth THEN the animal is a carnivore ``` -你会注意到规则左侧的每个条件和动作本质上是对象-属性-值(OAV)三元组。**工作记忆**包含与当前正在解决的问题相对应的 OAV 三元组集合。**规则引擎**查找条件满足的规则并应用它们,向工作记忆添加另一个三元组。 +你会注意到规则左侧的每个条件和动作本质上都是对象-属性-值(OAV)三元组。**工作记忆**包含与当前正在解决的问题相关的OAV三元组集合。**规则引擎**寻找满足条件的规则并应用它们,将另一个三元组添加到工作记忆中。 -> ✅ 在你喜欢的主题上写下自己的 AND-OR 树! +> ✅ 画一个你喜欢主题的AND-OR树! ### 前向推理与后向推理 -上述过程称为**前向推理**。它从工作记忆中关于问题的一些初始数据开始,然后执行以下推理循环: +上述过程称为**前向推理**。它从工作记忆中关于问题的初始数据开始,然后执行以下推理循环: -1. 如果目标属性在工作记忆中存在 - 停止并给出结果 -2. 查找所有当前条件满足的规则 - 获取**冲突集**。 -3. 执行**冲突解决** - 选择将在此步骤中执行的一条规则。可能有不同的冲突解决策略: +1. 如果目标属性存在于工作记忆中——停止并给出结果 +2. 查找所有条件当前满足的规则——获得**冲突集**规则。 +3. 执行**冲突解决**——选择一个将在此步骤中执行的规则。可能有不同的冲突解决策略: - 选择知识库中第一个适用的规则 - - 随机选择一条规则 - - 选择一个*更具体*的规则,即在“左侧”(LHS)满足最多条件的规则 -4. 应用所选规则并将新知识插入问题状态 -5. 从步骤 1 重复。 + - 随机选择一个规则 + - 选择*更具体*的规则,即满足“左侧”(LHS)中最多条件的规则 +4. 应用选定规则并将新知识插入问题状态 +5. 从第1步重复。 -然而,在某些情况下,我们可能希望从对问题的空知识开始,并询问问题以帮助我们得出结论。例如,在进行医学诊断时,我们通常不会在开始诊断患者之前进行所有医学分析。我们更倾向于在需要做出决策时进行分析。 +然而,在某些情况下,我们可能希望从对问题的空白知识开始,并提出问题以帮助我们得出结论。例如,在进行医疗诊断时,我们通常不会在诊断患者之前提前进行所有医疗分析。我们更希望在需要做出决定时进行分析。 -这个过程可以通过**后向推理**建模。它由**目标**驱动 - 我们希望找到的属性值: +此过程可以使用**后向推理**建模。它由**目标**驱动——我们试图找到的属性值: -1. 选择所有可以给我们目标值的规则(即在右侧(RHS)有目标的规则) - 冲突集 -2. 如果没有该属性的规则,或者有规则表明我们应该向用户询问该值 - 则询问,否则: -3. 使用冲突解决策略选择一条规则作为*假设* - 我们将尝试证明它 -4. 对规则左侧(LHS)中的所有属性重复该过程,尝试将其证明为目标 -5. 如果在任何时候过程失败 - 在第 3 步使用另一条规则。 +1. 选择所有可以给我们目标值的规则(即目标在右侧(RHS))——一个冲突集 +1. 如果没有关于此属性的规则,或者有规则表明我们应该向用户询问值——询问,否则: +1. 使用冲突解决策略选择一个规则作为*假设*——我们将尝试证明它 +1. 对规则左侧的所有属性递归重复此过程,尝试将它们作为目标证明 +1. 如果过程在任何时候失败——在第3步使用另一个规则。 -> ✅ 在哪些情况下前向推理更合适?后向推理又如何? +> ✅ 在哪些情况下前向推理更合适?后向推理又适用于哪些情况? ### 实现专家系统 专家系统可以使用不同的工具实现: -* 直接用某种高级编程语言编写。这不是最佳选择,因为基于知识的系统的主要优势在于知识与推理是分开的,潜在的问题领域专家应该能够在不理解推理过程细节的情况下编写规则。 -* 使用**专家系统外壳**,即专门设计用于通过某种知识表示语言填充知识的系统。 +* 直接使用某种高级编程语言编写。这不是最好的方法,因为基于知识的系统的主要优势在于知识与推理的分离,并且领域专家应该能够在不了解推理过程细节的情况下编写规则。 +* 使用**专家系统外壳**,即专门设计用于使用某种知识表示语言填充知识的系统。 ## ✍️ 练习:动物推理 -请查看 [Animals.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb),了解实现前向和后向推理专家系统的示例。 +参见 [Animals.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/Animals.ipynb),了解实现前向和后向推理专家系统的示例。 +> **注意**:这个例子相对简单,仅仅展示了专家系统的基本概念。当你开始创建这样的系统时,只有当规则数量达到一定规模(大约200+)时,你才会注意到它表现出一些*智能*行为。在某些时候,规则会变得过于复杂,难以全部记住,而这时你可能会开始疑惑为什么系统会做出某些决策。然而,知识型系统的重要特点是,你总是可以*准确解释*任何决策是如何做出的。 +## 本体与语义网 -> **注意**:这个例子相对简单,仅给出了专家系统的外观。一旦你开始创建这样的系统,只有在达到一定数量的规则(大约 200 条以上)时,你才会注意到它的一些*智能*行为。在某个时候,规则变得过于复杂,难以全部记住,这时你可能会开始想知道系统为什么做出某些决策。然而,基于知识的系统的重要特征是你总是可以*解释*任何决策是如何做出的。 +在20世纪末,有一项倡议旨在利用知识表示来标注互联网资源,从而能够找到符合非常具体查询的资源。这一行动被称为**语义网**,它依赖于以下几个概念: -## 本体论与语义网 +- 基于**[描述逻辑](https://en.wikipedia.org/wiki/Description_logic)** (DL) 的特殊知识表示。它类似于框架知识表示,因为它构建了一个具有属性的对象层次结构,但它具有形式化的逻辑语义和推理能力。描述逻辑有一个家族,它们在表达能力和推理的算法复杂性之间取得平衡。 +- 分布式知识表示,其中所有概念都由全局 URI 标识符表示,使得可以创建跨越互联网的知识层次结构。 +- 一系列基于 XML 的知识描述语言:RDF(资源描述框架)、RDFS(RDF 架构)、OWL(本体网络语言)。 -在 20 世纪末,有一个倡议使用知识表示来注释互联网资源,以便能够找到与非常具体查询相对应的资源。这一运动被称为**语义网**,它依赖于几个概念: +语义网的核心概念是**本体**。它指的是使用某种形式化知识表示对问题领域的明确规范。最简单的本体可以只是问题领域中的对象层次结构,但更复杂的本体会包括可用于推理的规则。 -- 基于**[描述逻辑](https://en.wikipedia.org/wiki/Description_logic)**(DL)的特殊知识表示。它类似于框架知识表示,因为它构建了具有属性的对象层次结构,但它具有正式的逻辑语义和推理。存在一整套 DL,在表达力和推理的算法复杂性之间取得平衡。 -- 分布式知识表示,其中所有概念都通过全球 URI 标识符表示,使得能够创建跨越互联网的知识层次结构。 -- 一系列基于 XML 的知识描述语言:RDF(资源描述框架)、RDFS(RDF 架构)、OWL(本体网页语言)。 - -语义网的核心概念是**本体**。它指的是使用某种形式的知识表示对问题领域的明确规范。最简单的本体可以仅是问题领域中对象的层次结构,但更复杂的本体将包括可用于推理的规则。 - -在语义网中,所有表示都是基于三元组的。每个对象和每个关系都由 URI 唯一标识。例如,如果我们想陈述这一事实,即该人工智能课程由 Dmitry Soshnikov 于 2022 年 1 月 1 日开发 - 这里是我们可以使用的三元组: +在语义网中,所有表示都基于三元组。每个对象和每个关系都由 URI 唯一标识。例如,如果我们想说明这个 AI 课程是由 Dmitry Soshnikov 于 2022 年 1 月 1 日开发的——以下是我们可以使用的三元组: @@ -173,17 +150,17 @@ http://github.com/microsoft/ai-for-beginners http://www.example.com/terms/creati http://github.com/microsoft/ai-for-beginners http://purl.org/dc/elements/1.1/creator http://soshnikov.com ``` -> ✅ 这里 `http://www.example.com/terms/creation-date` and `http://purl.org/dc/elements/1.1/creator` 是一些众所周知且普遍接受的 URI,用于表达*创建者*和*创建日期*的概念。 +> ✅ 这里的 `http://www.example.com/terms/creation-date` 和 `http://purl.org/dc/elements/1.1/creator` 是一些公认的、通用的 URI,用于表达*创建者*和*创建日期*的概念。 -在更复杂的情况下,如果我们想定义一个创作者列表,我们可以使用 RDF 中定义的一些数据结构。 +在更复杂的情况下,如果我们想定义一个创建者列表,可以使用 RDF 中定义的一些数据结构。 -> 上述图表由 [Dmitry Soshnikov](http://soshnikov.com) 提供 +> 上图由 [Dmitry Soshnikov](http://soshnikov.com) 提供 -构建语义网的进展在某种程度上被搜索引擎和自然语言处理技术的成功所减缓,这些技术允许从文本中提取结构化数据。然而,在某些领域,仍然有显著的努力来维护本体和知识库。有几个值得注意的项目: +语义网的发展在一定程度上被搜索引擎和自然语言处理技术的成功所减缓,这些技术可以从文本中提取结构化数据。然而,在某些领域,仍然有重要的努力在维护本体和知识库。以下是一些值得注意的项目: -* [WikiData](https://wikidata.org/) 是一个与维基百科相关的机器可读知识库的集合。大多数数据是从维基百科的*信息框*中提取的,即维基百科页面中的结构化内容。你可以在 SPARQL 中 [查询](https://query.wikidata.org/) wikidata,这是一个专门用于语义网的查询语言。以下是一个示例查询,显示人类中最受欢迎的眼睛颜色: +* [WikiData](https://wikidata.org/) 是与 Wikipedia 相关的机器可读知识库的集合。大部分数据是从 Wikipedia 的*信息框*(页面中的结构化内容)中提取的。你可以使用 SPARQL(一种语义网的特殊查询语言)[查询](https://query.wikidata.org/) WikiData。以下是一个示例查询,显示人类中最常见的眼睛颜色: ```sparql #defaultView:BubbleChart @@ -197,47 +174,47 @@ WHERE GROUP BY ?eyeColorLabel ``` -* [DBpedia](https://www.dbpedia.org/) 是另一个类似于 WikiData 的努力。 +* [DBpedia](https://www.dbpedia.org/) 是另一个类似于 WikiData 的项目。 -> ✅ 如果你想尝试构建自己的本体或打开现有的本体,有一个很好的可视化本体编辑器叫做 [Protégé](https://protege.stanford.edu/)。下载它,或在线使用。 +> ✅ 如果你想尝试构建自己的本体,或打开现有的本体,有一个很棒的可视化本体编辑器叫 [Protégé](https://protege.stanford.edu/)。你可以下载它,或者在线使用。 -*Web Protégé 编辑器打开与罗曼诺夫家族本体。截图由 Dmitry Soshnikov 提供* +*Web Protégé 编辑器打开了罗曼诺夫家族的本体。截图由 Dmitry Soshnikov 提供* -## ✍️ 练习:家庭本体 +## ✍️ 练习:一个家庭本体 -请查看 [FamilyOntology.ipynb](https://github.com/Ezana135/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb),了解使用语义网技术推理家庭关系的示例。我们将采用以常见 GEDCOM 格式表示的家谱和家庭关系本体,并为给定的一组个体构建所有家庭关系的图。 +参见 [FamilyOntology.ipynb](https://github.com/Ezana135/AI-For-Beginners/blob/main/lessons/2-Symbolic/FamilyOntology.ipynb),了解如何使用语义网技术推理家庭关系。我们将使用以常见 GEDCOM 格式表示的家谱和家庭关系的本体,为给定的一组个体构建所有家庭关系的图。 -## 微软概念图 +## Microsoft 概念图 -在大多数情况下,本体是手工精心创建的。然而,也可以从非结构化数据中**挖掘**本体,例如,从自然语言文本中。 +在大多数情况下,本体是由人工精心创建的。然而,也可以从非结构化数据中**挖掘**本体,例如从自然语言文本中。 -微软研究院进行了一次这样的尝试,结果就是 [微软概念图](https://blogs.microsoft.com/ai/microsoft-researchers-release-graph-that-helps-machines-conceptualize/?WT.mc_id=academic-77998-cacaste)。 +微软研究院曾尝试过这样的工作,结果是 [Microsoft Concept Graph](https://blogs.microsoft.com/ai/microsoft-researchers-release-graph-that-helps-machines-conceptualize/?WT.mc_id=academic-77998-cacaste)。 -它是一个大型实体集合,使用`is-a`继承关系进行分组。它可以回答诸如“微软是什么?”这样的问题 - 答案可能是“一个概率为 0.87 的公司,以及一个概率为 0.75 的品牌”。 +这是一个使用 `is-a` 继承关系将实体分组的大型集合。它可以回答诸如“微软是什么?”这样的问题——答案可能是“一个公司,概率为 0.87;一个品牌,概率为 0.75”。 -该图可通过 REST API 或大型可下载文本文件获取,该文件列出了所有实体对。 +该图可以通过 REST API 使用,也可以作为一个大型可下载的文本文件,列出所有实体对。 -## ✍️ 练习:概念图 +## ✍️ 练习:一个概念图 -尝试 [MSConceptGraph.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) 笔记本,看看我们如何使用微软概念图将新闻文章分组到几个类别中。 +尝试 [MSConceptGraph.ipynb](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/MSConceptGraph.ipynb) 笔记本,看看我们如何使用 Microsoft 概念图将新闻文章分组到几个类别中。 -## 结论 +## 总结 -如今,人工智能通常被视为*机器学习*或*神经网络*的同义词。然而,人类也表现出明确的推理能力,而这正是当前神经网络无法处理的。在实际项目中,明确的推理仍然用于执行需要解释的任务,或者能够以受控的方式修改系统的行为。 +如今,AI 通常被认为是*机器学习*或*神经网络*的同义词。然而,人类也表现出显式推理,这一点目前神经网络尚未处理。在实际项目中,显式推理仍然用于需要解释或能够以受控方式修改系统行为的任务。 ## 🚀 挑战 -在与本节课相关的家庭本体笔记本中,有机会尝试其他家庭关系。尝试发现家谱中人们之间的新联系。 +在与本课相关的家庭本体笔记本中,有机会尝试其他家庭关系。试着发现家谱中人与人之间的新连接。 -## [课后小测](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/202) +## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/202) ## 复习与自学 -在互联网上进行一些研究,发现人类尝试量化和编码知识的领域。看看布鲁姆的分类法,并回顾历史,了解人类如何试图理解他们的世界。探索林奈的工作,创建生物的分类法,并观察德米特里·门捷列夫如何创建化学元素的描述和分组方式。你还能找到其他有趣的例子吗? +在互联网上做一些研究,了解人类尝试量化和编码知识的领域。看看布鲁姆分类法,回顾历史,了解人类如何试图理解他们的世界。探索林奈斯创建生物分类法的工作,观察德米特里·门捷列夫如何为化学元素创建描述和分组的方法。你还能找到哪些有趣的例子? -**作 +**作业**:[构建一个本体](assignment.md) **免责声明**: -本文件是使用机器翻译的人工智能翻译服务进行翻译的。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们不对因使用此翻译而导致的任何误解或误释承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/2-Symbolic/assignment.md b/translations/zh/lessons/2-Symbolic/assignment.md index 699a385d..066af363 100644 --- a/translations/zh/lessons/2-Symbolic/assignment.md +++ b/translations/zh/lessons/2-Symbolic/assignment.md @@ -1,6 +1,15 @@ + # 构建本体 -构建知识库的关键在于对代表某一主题事实的模型进行分类。选择一个主题——比如一个人、一个地方或一个事物——然后构建该主题的模型。使用本课中描述的一些技术和模型构建策略。一个例子是创建一个包含家具、灯光等的客厅本体。客厅与厨房有什么不同?与浴室呢?你如何判断这是一个客厅而不是餐厅?使用 [Protégé](https://protege.stanford.edu/) 来构建你的本体。 +构建知识库的核心是对一个主题的事实进行分类建模。选择一个主题——比如一个人、一个地方或一个事物——然后为该主题构建一个模型。使用本课中描述的一些技术和建模策略。例如,可以创建一个包含家具、灯具等的客厅本体。客厅与厨房有什么不同?浴室呢?你如何判断这是一个客厅而不是餐厅?使用 [Protégé](https://protege.stanford.edu/) 来构建你的本体。 -**免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或错误解释不承担任何责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/3-NeuralNetworks/03-Perceptron/README.md b/translations/zh/lessons/3-NeuralNetworks/03-Perceptron/README.md index c6e2d21b..feae6eb4 100644 --- a/translations/zh/lessons/3-NeuralNetworks/03-Perceptron/README.md +++ b/translations/zh/lessons/3-NeuralNetworks/03-Perceptron/README.md @@ -1,52 +1,61 @@ -# 神经网络导论:感知器 + +# 神经网络简介:感知机 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/103) -1957年,康奈尔航空实验室的Frank Rosenblatt首次尝试实现类似现代神经网络的东西。这是一个名为“Mark-1”的硬件实现,旨在识别简单的几何图形,如三角形、正方形和圆形。 +1957年,康奈尔航空实验室的Frank Rosenblatt首次尝试实现类似现代神经网络的模型。这是一种名为“Mark-1”的硬件实现,设计用于识别简单的几何图形,例如三角形、正方形和圆形。 | | | |--------------|-----------| |Frank Rosenblatt | The Mark 1 Perceptron| -> 图片 [来自维基百科](https://en.wikipedia.org/wiki/Perceptron) +> 图片来源:[维基百科](https://en.wikipedia.org/wiki/Perceptron) -输入图像由20x20的光电池阵列表示,因此神经网络有400个输入和一个二进制输出。一个简单的网络包含一个神经元,也称为**阈值逻辑单元**。神经网络的权重像电位器一样,在训练阶段需要手动调整。 +输入图像由20x20的光电池阵列表示,因此神经网络有400个输入和一个二进制输出。一个简单的网络包含一个神经元,也称为**阈值逻辑单元**。神经网络的权重类似于电位器,在训练阶段需要手动调整。 > ✅ 电位器是一种允许用户调整电路电阻的设备。 -> 《纽约时报》当时对感知器的描述是:*海军期望这将是一个能够行走、说话、看、写、复制自己并意识到自己存在的电子计算机的胚胎。* +> 《纽约时报》当时这样描述感知机:*一种电子计算机的胚胎,[海军]预计它将能够行走、说话、看、写、复制自身并意识到自己的存在。* -## 感知器模型 +## 感知机模型 -假设我们的模型中有N个特征,在这种情况下,输入向量将是大小为N的向量。感知器是一个**二分类**模型,即它能够区分两类输入数据。我们假设对于每个输入向量x,感知器的输出要么是+1,要么是-1,这取决于类别。输出将通过以下公式计算: +假设我们的模型中有N个特征,此时输入向量将是一个大小为N的向量。感知机是一种**二分类**模型,即它可以区分两类输入数据。我们假设对于每个输入向量x,感知机的输出将是+1或-1,具体取决于类别。输出通过以下公式计算: y(x) = f(wTx) -其中f是阶跃激活函数 +其中f是一个阶跃激活函数 -## 训练感知器 +## 训练感知机 -要训练一个感知器,我们需要找到一个权重向量w,使大多数值正确分类,即使**错误**最小化。这个错误E通过**感知器准则**定义如下: +为了训练感知机,我们需要找到一个权重向量w,使得大多数值能够被正确分类,即使**误差**最小化。这个误差E通过**感知机准则**定义如下: E(w) = -∑wTxiti 其中: -* 求和是在那些导致错误分类的训练数据点i上进行的 -* xi是输入数据,而ti对于负例和正例分别为-1和+1。 +* 求和仅针对那些导致错误分类的训练数据点i +* xi是输入数据,ti分别为负例和正例的-1或+1。 -这个准则被视为权重w的一个函数,我们需要对其进行最小化。通常使用一种称为**梯度下降**的方法,在这种方法中,我们从一些初始权重w(0)开始,然后在每一步根据以下公式更新权重: +这个准则被视为权重w的函数,我们需要最小化它。通常使用一种称为**梯度下降**的方法,我们从一些初始权重w(0)开始,然后在每一步根据以下公式更新权重: w(t+1) = w(t) - η∇E(w) -这里η是所谓的**学习率**,∇E(w)表示E的**梯度**。在计算梯度后,我们得到 +这里η是所谓的**学习率**,∇E(w)表示E的**梯度**。计算梯度后,我们得到: w(t+1) = w(t) + ∑ηxiti -在Python中的算法如下所示: +Python中的算法如下: ```python def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): @@ -68,28 +77,28 @@ def train(positive_examples, negative_examples, num_iterations = 100, eta = 1): return weights ``` -## 结论 +## 总结 -在本课中,您了解了感知器,它是一个二分类模型,以及如何通过使用权重向量来训练它。 +在本课中,你学习了感知机,这是一种二分类模型,以及如何通过使用权重向量来训练它。 ## 🚀 挑战 -如果您想尝试构建自己的感知器,可以尝试 [Microsoft Learn上的这个实验室](https://docs.microsoft.com/en-us/azure/machine-learning/component-reference/two-class-averaged-perceptron?WT.mc_id=academic-77998-cacaste),该实验室使用了 [Azure ML设计器](https://docs.microsoft.com/en-us/azure/machine-learning/concept-designer?WT.mc_id=academic-77998-cacaste)。 +如果你想尝试构建自己的感知机,可以试试[Microsoft Learn上的这个实验](https://docs.microsoft.com/en-us/azure/machine-learning/component-reference/two-class-averaged-perceptron?WT.mc_id=academic-77998-cacaste),它使用了[Azure ML设计器](https://docs.microsoft.com/en-us/azure/machine-learning/concept-designer?WT.mc_id=academic-77998-cacaste)。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/203) ## 复习与自学 -要了解我们如何使用感知器解决玩具问题以及现实生活中的问题,并继续学习,请访问 [感知器](../../../../../lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb) 笔记本。 +要了解如何使用感知机解决一个简单问题以及实际问题,并继续学习,请查看[感知机](../../../../../lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb)笔记本。 -这里还有一篇关于感知器的有趣 [文章](https://towardsdatascience.com/what-is-a-perceptron-basics-of-neural-networks-c4cfea20c590)。 +这里还有一篇有趣的[关于感知机的文章](https://towardsdatascience.com/what-is-a-perceptron-basics-of-neural-networks-c4cfea20c590)。 ## [作业](lab/README.md) -在本课中,我们实现了一个用于二分类任务的感知器,并使用它来区分两个手写数字。在这个实验室中,您需要完全解决数字分类的问题,即确定哪个数字最有可能对应于给定的图像。 +在本课中,我们实现了一个用于二分类任务的感知机,并使用它在两个手写数字之间进行分类。在本实验中,你需要完全解决数字分类问题,即确定给定图像最有可能对应的数字。 * [说明](lab/README.md) * [笔记本](../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md b/translations/zh/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md index 7368810c..379b8a05 100644 --- a/translations/zh/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md +++ b/translations/zh/lessons/3-NeuralNetworks/03-Perceptron/lab/README.md @@ -1,22 +1,31 @@ -# 多类分类与感知器 + +# 使用感知机进行多类别分类 -来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验作业。 +来自 [AI 初学者课程](https://github.com/microsoft/ai-for-beginners) 的实验任务。 ## 任务 -使用我们在本课中开发的用于 MNIST 手写数字的二分类代码,创建一个多类分类器,能够识别任意数字。计算训练集和测试集上的分类准确率,并输出混淆矩阵。 +使用我们在本课中为 MNIST 手写数字的二分类开发的代码,创建一个多类别分类器,能够识别任意数字。计算训练集和测试集上的分类准确率,并打印出混淆矩阵。 ## 提示 -1. 为每个数字创建一个数据集,用于“该数字 vs. 所有其他数字”的二分类器。 -1. 训练 10 个不同的感知器进行二分类(每个数字一个)。 -1. 定义一个函数,用于对输入数字进行分类。 +1. 对于每个数字,创建一个二分类器的数据集,区分“该数字 vs. 其他所有数字” +2. 为二分类训练 10 个不同的感知机(每个数字一个) +3. 定义一个函数,用于分类输入的数字 -> **提示**:如果我们将所有 10 个感知器的权重组合成一个矩阵,我们应该能够通过一次矩阵乘法将所有 10 个感知器应用于输入数字。然后,可以通过对输出应用 `argmax` 操作来找到最可能的数字。 +> **提示**:如果我们将所有 10 个感知机的权重组合成一个矩阵,我们可以通过一次矩阵乘法将所有 10 个感知机应用于输入数字。然后,只需对输出应用 `argmax` 操作即可找到最可能的数字。 -## 启动笔记本 +## 起始笔记本 通过打开 [PerceptronMultiClass.ipynb](../../../../../../lessons/3-NeuralNetworks/03-Perceptron/lab/PerceptronMultiClass.ipynb) 开始实验。 -**免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于重要信息,建议进行专业的人类翻译。我们对因使用此翻译而导致的任何误解或误释不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/3-NeuralNetworks/04-OwnFramework/README.md b/translations/zh/lessons/3-NeuralNetworks/04-OwnFramework/README.md index 15ae137a..88f600b2 100644 --- a/translations/zh/lessons/3-NeuralNetworks/04-OwnFramework/README.md +++ b/translations/zh/lessons/3-NeuralNetworks/04-OwnFramework/README.md @@ -1,89 +1,98 @@ -# 神经网络简介:多层感知器 + +# 神经网络简介:多层感知机 -在上一节中,您学习了最简单的神经网络模型——单层感知器,这是一种线性二分类模型。 +在上一节中,你学习了最简单的神经网络模型——单层感知机,一个线性二分类模型。 -在本节中,我们将扩展此模型,构建一个更灵活的框架,使我们能够: +在本节中,我们将扩展这一模型,构建一个更灵活的框架,使我们能够: -* 除了二分类之外,执行**多类分类** -* 除了分类之外,解决**回归问题** -* 分离那些无法线性分离的类 +* 执行**多分类任务**,不仅限于二分类 +* 解决**回归问题**,不仅限于分类 +* 分离非线性可分的类别 -我们还将开发自己的模块化框架,使用 Python 构建不同的神经网络架构。 +我们还将使用 Python 开发自己的模块化框架,以便构建不同的神经网络架构。 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/104) -## 机器学习的形式化 +## 机器学习的形式化定义 -让我们开始形式化机器学习问题。假设我们有一个带标签的训练数据集 **X** 和 **Y**,我们需要构建一个模型 *f*,使其能够做出最准确的预测。预测的质量通过**损失函数** ℒ 来衡量。以下是常用的损失函数: +让我们从形式化定义机器学习问题开始。假设我们有一个训练数据集 **X** 和标签 **Y**,需要构建一个模型 *f* 来实现最准确的预测。预测的质量通过**损失函数** ℒ 来衡量。以下是常用的损失函数: -* 对于回归问题,当我们需要预测一个数字时,可以使用**绝对误差** ∑i|f(x(i))-y(i)|,或**平方误差** ∑i(f(x(i))-y(i))2 -* 对于分类,我们使用**0-1损失**(这实际上与模型的**准确率**相同),或**逻辑损失**。 +* 对于回归问题,当我们需要预测一个数值时,可以使用**绝对误差** ∑i|f(x(i))-y(i)|,或**平方误差** ∑i(f(x(i))-y(i))2 +* 对于分类问题,我们使用**0-1损失**(本质上与模型的**准确率**相同),或**逻辑损失**。 -对于单层感知器,函数 *f* 被定义为线性函数 *f(x)=wx+b*(这里 *w* 是权重矩阵,*x* 是输入特征向量,*b* 是偏置向量)。对于不同的神经网络架构,这个函数可以呈现出更复杂的形式。 +对于单层感知机,函数 *f* 被定义为一个线性函数 *f(x)=wx+b*(其中 *w* 是权重矩阵,*x* 是输入特征向量,*b* 是偏置向量)。对于不同的神经网络架构,这个函数可以采取更复杂的形式。 -> 在分类的情况下,通常希望将相应类的概率作为网络输出。为了将任意数字转换为概率(例如,对输出进行归一化),我们通常使用**softmax**函数 σ,函数 *f* 变为 *f(x)=σ(wx+b)*。 +> 在分类问题中,我们通常希望网络输出对应类别的概率。为了将任意数值转换为概率(例如归一化输出),我们通常使用**softmax**函数 σ,使得函数 *f* 变为 *f(x)=σ(wx+b)*。 -在上面的 *f* 定义中,*w* 和 *b* 被称为**参数** θ=⟨*w,b*⟩。给定数据集 ⟨**X**,**Y**⟩,我们可以计算整个数据集的总体误差,作为参数 θ 的函数。 +在上述 *f* 的定义中,*w* 和 *b* 被称为**参数** θ=⟨*w,b*⟩。给定数据集 ⟨**X**,**Y**⟩,我们可以计算整个数据集上的总体误差作为参数 θ 的函数。 > ✅ **神经网络训练的目标是通过调整参数 θ 来最小化误差** ## 梯度下降优化 -有一种众所周知的函数优化方法称为**梯度下降**。其思想是,我们可以计算损失函数对参数的导数(在多维情况下称为**梯度**),并以某种方式调整参数,使得误差减少。这可以形式化为: +梯度下降是一种著名的函数优化方法。其核心思想是我们可以计算损失函数对参数的导数(在多维情况下称为**梯度**),并调整参数以减少误差。其形式化过程如下: -* 以一些随机值初始化参数 w(0),b(0) -* 重复以下步骤多次: +* 用随机值初始化参数 w(0), b(0) +* 多次重复以下步骤: - w(i+1) = w(i)-η∂ℒ/∂w - b(i+1) = b(i)-η∂ℒ/∂b -在训练过程中,优化步骤应考虑整个数据集(请记住,损失是通过所有训练样本的总和计算的)。然而,在实际应用中,我们采用称为**小批量**的数据集,并基于数据的子集计算梯度。由于每次随机选择子集,这种方法称为**随机梯度下降**(SGD)。 +在训练过程中,优化步骤通常基于整个数据集(记住损失是通过所有训练样本的总和计算的)。然而,在实际操作中,我们会取数据集的小部分,称为**小批量**,并基于数据子集计算梯度。由于每次随机选取子集,这种方法被称为**随机梯度下降**(SGD)。 -## 多层感知器与反向传播 +## 多层感知机与反向传播 -如上所述,单层网络能够对线性可分的类进行分类。为了构建更丰富的模型,我们可以组合多个网络层。在数学上,这意味着函数 *f* 将具有更复杂的形式,并将在多个步骤中计算: +如上所述,单层网络能够分类线性可分的类别。为了构建更复杂的模型,我们可以组合多个网络层。从数学上讲,这意味着函数 *f* 将具有更复杂的形式,并通过多个步骤计算: * z1=w1x+b1 * z2=w2α(z1)+b2 * f = σ(z2) -这里,α 是**非线性激活函数**,σ 是 softmax 函数,参数 θ=<*w1,b1,w2,b2* >。 +这里,α 是一个**非线性激活函数**,σ 是 softmax 函数,参数 θ=<*w1,b1,w2,b2*>。 -梯度下降算法将保持不变,但计算梯度会更加困难。根据链式求导法则,我们可以计算导数如下: +梯度下降算法保持不变,但计算梯度会更加复杂。根据链式求导法则,我们可以计算导数如下: * ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2) * ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1) > ✅ 链式求导法则用于计算损失函数对参数的导数。 -请注意,所有这些表达式的最左侧部分是相同的,因此我们可以有效地从损失函数开始,向“后面”通过计算图计算导数。因此,多层感知器的训练方法称为**反向传播**,或简称为“反向传播”。 +注意所有这些表达式的最左部分是相同的,因此我们可以从损失函数开始,沿着计算图“向后”有效地计算导数。因此,多层感知机的训练方法被称为**反向传播**,或“反传”。 计算图 > TODO: 图片引用 -> ✅ 我们将在我们的笔记本示例中更详细地介绍反向传播。 +> ✅ 我们将在笔记本示例中更详细地讲解反向传播。 -## 结论 +## 总结 -在本课中,我们构建了自己的神经网络库,并将其用于简单的二维分类任务。 +在本课中,我们构建了自己的神经网络库,并将其用于一个简单的二维分类任务。 ## 🚀 挑战 -在随附的笔记本中,您将实现自己的框架,以构建和训练多层感知器。您将能够详细了解现代神经网络的运作。 +在配套的笔记本中,你将实现自己的框架,用于构建和训练多层感知机。你将详细了解现代神经网络的运行方式。 -请继续查看 [OwnFramework](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) 笔记本并完成其中的内容。 +请前往 [OwnFramework](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) 笔记本并完成相关内容。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/204) ## 复习与自学 -反向传播是一种常用的算法,在人工智能和机器学习中值得深入研究 [更详细](https://wikipedia.org/wiki/Backpropagation)。 +反向传播是人工智能和机器学习中常用的算法,值得[深入研究](https://wikipedia.org/wiki/Backpropagation)。 ## [作业](lab/README.md) -在这个实验中,您需要使用本课中构建的框架来解决 MNIST 手写数字分类问题。 +在本实验中,你需要使用本课中构建的框架解决 MNIST 手写数字分类问题。 * [说明](lab/README.md) * [笔记本](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb) **免责声明**: -本文件使用机器翻译的人工智能翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md b/translations/zh/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md index 3a23bb2c..1db1249f 100644 --- a/translations/zh/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md +++ b/translations/zh/lessons/3-NeuralNetworks/04-OwnFramework/lab/README.md @@ -1,23 +1,32 @@ -# 使用我们自己的框架进行 MNIST 分类 + +# 使用我们自己的框架进行MNIST分类 -来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验任务。 +来自[AI初学者课程](https://github.com/microsoft/ai-for-beginners)的实验任务。 ## 任务 -使用 1 层、2 层和 3 层感知器解决 MNIST 手写数字分类问题。使用我们在课程中开发的神经网络框架。 +使用1层、2层和3层感知器解决MNIST手写数字分类问题。使用我们在课程中开发的神经网络框架完成任务。 -## 启动笔记本 +## 起始笔记本 -通过打开 [MyFW_MNIST.ipynb](../../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb) 开始实验。 +通过打开[MyFW_MNIST.ipynb](../../../../../../lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb)开始实验。 ## 问题 -作为本实验的结果,尝试回答以下问题: +完成实验后,尝试回答以下问题: - 层间激活函数是否会影响网络性能? -- 我们是否需要 2 层或 3 层网络来完成这个任务? -- 在训练网络时,您是否遇到任何问题?特别是随着层数的增加。 -- 网络的权重在训练过程中是如何变化的?您可以绘制权重的最大绝对值与训练轮数的关系,以理解其相互关系。 +- 对于这个任务,我们是否需要2层或3层的网络? +- 在训练网络时是否遇到任何问题?特别是在层数增加时。 +- 网络的权重在训练过程中如何变化?你可以绘制权重最大绝对值与训练轮次的关系图来理解它们之间的关系。 **免责声明**: -本文件使用机器翻译的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/3-NeuralNetworks/05-Frameworks/README.md b/translations/zh/lessons/3-NeuralNetworks/05-Frameworks/README.md index c6db13f9..7ca0ef05 100644 --- a/translations/zh/lessons/3-NeuralNetworks/05-Frameworks/README.md +++ b/translations/zh/lessons/3-NeuralNetworks/05-Frameworks/README.md @@ -1,123 +1,132 @@ + # 神经网络框架 -正如我们已经了解到的,要高效地训练神经网络,我们需要做两件事: +正如我们已经学习到的,为了高效地训练神经网络,我们需要做到以下两点: -* 在张量上进行操作,例如乘法、加法,以及计算一些函数,如 sigmoid 或 softmax +* 操作张量,例如进行乘法、加法,以及计算一些函数如 sigmoid 或 softmax * 计算所有表达式的梯度,以便执行梯度下降优化 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/105) -虽然 `numpy` 库可以完成第一部分,但我们需要某种机制来计算梯度。在我们在上一节中开发的 [我们的框架](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) 中,我们不得不手动编写 `backward` 方法中的所有导数函数,该方法执行反向传播。理想情况下,一个框架应该让我们有机会计算我们可以定义的 *任何表达式* 的梯度。 +虽然 `numpy` 库可以完成第一部分,但我们需要某种机制来计算梯度。在[我们开发的框架](../../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb)中,我们必须手动在 `backward` 方法中编写所有的导数函数来实现反向传播。理想情况下,一个框架应该能够让我们计算*任何表达式*的梯度。 -另一个重要的事情是能够在 GPU 或任何其他专用计算单元上执行计算,例如 [TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit)。深度神经网络的训练需要 *大量* 的计算,能够在 GPU 上并行化这些计算是非常重要的。 +另一个重要的方面是能够在 GPU 或其他专用计算单元(如 [TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit))上执行计算。深度神经网络的训练需要*大量*的计算,因此能够在 GPU 上并行化这些计算非常重要。 -> ✅ “并行化”一词意味着将计算分布到多个设备上。 +> ✅ “并行化”一词的意思是将计算分布到多个设备上。 -目前,两个最流行的神经网络框架是:[TensorFlow](http://TensorFlow.org) 和 [PyTorch](https://pytorch.org/)。这两个框架都提供了低级 API,以便在 CPU 和 GPU 上操作张量。在低级 API 之上,还有更高级的 API,分别称为 [Keras](https://keras.io/) 和 [PyTorch Lightning](https://pytorchlightning.ai/)。 +目前,最流行的两个神经网络框架是:[TensorFlow](http://TensorFlow.org) 和 [PyTorch](https://pytorch.org/)。它们都提供了一个低级 API,用于在 CPU 和 GPU 上操作张量。在低级 API 之上,还提供了高级 API,分别是 [Keras](https://keras.io/) 和 [PyTorch Lightning](https://pytorchlightning.ai/)。 低级 API | [TensorFlow](http://TensorFlow.org) | [PyTorch](https://pytorch.org/) ---------------|-------------------------------------|-------------------------------- -高级 API| [Keras](https://keras.io/) | [PyTorch Lightning](https://pytorchlightning.ai/) +---------|-------------------------------------|-------------------------------- +高级 API | [Keras](https://keras.io/) | [PyTorch Lightning](https://pytorchlightning.ai/) -**两个框架中的低级 API** 允许您构建所谓的 **计算图**。这个图定义了如何使用给定的输入参数计算输出(通常是损失函数),并可以在可用的情况下推送到 GPU 上进行计算。有函数可以对这个计算图进行微分并计算梯度,这些梯度可以用于优化模型参数。 +**低级 API** 允许你构建所谓的**计算图**。这个图定义了如何用给定的输入参数计算输出(通常是损失函数),并可以在 GPU 上执行计算(如果可用)。框架提供了对计算图进行微分的功能,从而计算梯度,这些梯度可以用于优化模型参数。 -**高级 API** 将神经网络视为 **层的序列**,使构建大多数神经网络变得更加简单。训练模型通常需要准备数据,然后调用 `fit` 函数来完成任务。 +**高级 API** 将神经网络视为**层的序列**,使得构建大多数神经网络变得更加简单。训练模型通常只需要准备数据,然后调用一个 `fit` 函数即可完成。 -高级 API 使您能够非常快速地构建典型的神经网络,而无需担心许多细节。与此同时,低级 API 提供了对训练过程的更多控制,因此在处理新的神经网络架构时,研究人员通常使用它们。 +高级 API 允许你快速构建典型的神经网络,而无需担心许多细节。同时,低级 API 提供了对训练过程的更大控制,因此在研究新型神经网络架构时经常使用。 -还需要理解的是,您可以同时使用这两种 API,例如,您可以使用低级 API 开发自己的网络层架构,然后在使用高级 API 构建和训练的更大网络中使用它。或者,您可以使用高级 API 将网络定义为层的序列,然后使用自己的低级训练循环进行优化。这两种 API 使用相同的基本概念,并且设计上能够很好地协同工作。 +需要注意的是,你可以同时使用这两种 API。例如,你可以使用低级 API 开发自己的网络层架构,然后将其用于通过高级 API 构建和训练的更大网络中。或者,你可以使用高级 API 将网络定义为层的序列,然后使用自己的低级训练循环进行优化。这两种 API 使用相同的基本概念,并且设计为能够很好地协同工作。 ## 学习 -在本课程中,我们为 PyTorch 和 TensorFlow 提供了大部分内容。您可以选择自己喜欢的框架,只需查看相应的笔记本。如果您不确定选择哪个框架,可以阅读一些关于 **PyTorch 与 TensorFlow** 的讨论。您也可以查看这两个框架以获得更好的理解。 +在本课程中,我们为 PyTorch 和 TensorFlow 提供了大部分内容。你可以选择自己喜欢的框架,只学习相应的笔记本。如果你不确定选择哪个框架,可以在网上查阅关于 **PyTorch vs. TensorFlow** 的讨论。你也可以同时了解这两个框架以获得更好的理解。 -在可能的情况下,我们将使用高级 API 以简化操作。然而,我们认为从基础开始理解神经网络的工作原理是重要的,因此在开始时我们将使用低级 API 和张量进行工作。不过,如果您想快速入门,并且不想花费大量时间学习这些细节,您可以跳过这些内容,直接进入高级 API 笔记本。 +在可能的情况下,我们会为了简化使用高级 API。然而,我们认为从基础上理解神经网络的工作原理非常重要,因此在开始时我们会从低级 API 和张量入手。如果你想快速入门,不想花太多时间学习这些细节,可以跳过这些内容,直接进入高级 API 的笔记本。 ## ✍️ 练习:框架 -继续在以下笔记本中学习: +通过以下笔记本继续学习: 低级 API | [TensorFlow+Keras 笔记本](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) | [PyTorch](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb) ---------------|-------------------------------------|-------------------------------- -高级 API| [Keras](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) | *PyTorch Lightning* +---------|-------------------------------------|-------------------------------- +高级 API | [Keras](../../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKeras.ipynb) | *PyTorch Lightning* -掌握框架后,让我们回顾一下过拟合的概念。 +掌握这些框架后,让我们回顾一下过拟合的概念。 # 过拟合 -过拟合是机器学习中一个极其重要的概念,正确理解它非常重要! +过拟合是机器学习中一个极其重要的概念,理解它非常关键! -考虑以下近似 5 个点的问题(在下面的图中用 `x` 表示): +考虑以下拟合 5 个点(图中用 `x` 表示)的问题: -![linear](../../../../../translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.zh.jpg) | ![overfit](../../../../../translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.zh.jpg) +![线性模型](../../../../../translated_images/overfit1.f24b71c6f652e59e6bed7245ffbeaecc3ba320e16e2221f6832b432052c4da43.zh.jpg) | ![过拟合模型](../../../../../translated_images/overfit2.131f5800ae10ca5e41d12a411f5f705d9ee38b1b10916f284b787028dd55cc1c.zh.jpg) -------------------------|-------------------------- **线性模型,2 个参数** | **非线性模型,7 个参数** 训练误差 = 5.3 | 训练误差 = 0 验证误差 = 5.1 | 验证误差 = 20 -* 在左侧,我们看到一个良好的直线近似。由于参数数量适当,模型正确理解了点分布背后的概念。 -* 在右侧,模型过于强大。由于我们只有 5 个点,而模型有 7 个参数,因此它可以调整到通过所有点,使得训练误差为 0。然而,这阻止了模型理解数据背后的正确模式,因此验证误差非常高。 +* 左图展示了一个良好的直线拟合。由于参数数量合适,模型正确捕捉了点的分布规律。 +* 右图中,模型过于强大。因为我们只有 5 个点,而模型有 7 个参数,它可以调整到通过所有点,使得训练误差为 0。然而,这阻碍了模型理解数据背后的正确模式,因此验证误差非常高。 -在模型的丰富性(参数数量)和训练样本数量之间取得正确平衡是非常重要的。 +在模型的复杂度(参数数量)和训练样本数量之间找到正确的平衡非常重要。 -## 为什么会出现过拟合 +## 为什么会发生过拟合 -* 训练数据不足 -* 模型过于强大 -* 输入数据中噪声过多 + * 训练数据不足 + * 模型过于强大 + * 输入数据中噪声过多 ## 如何检测过拟合 -正如您从上面的图表中看到的,过拟合可以通过非常低的训练误差和高的验证误差来检测。通常在训练过程中,我们会看到训练误差和验证误差都开始下降,然后在某个时刻,验证误差可能会停止下降并开始上升。这将是过拟合的迹象,并且是我们应该在此时停止训练(或至少对模型进行快照)的指示。 +从上图可以看出,过拟合可以通过非常低的训练误差和非常高的验证误差来检测。通常在训练过程中,我们会看到训练误差和验证误差都开始下降,但某个时刻验证误差可能会停止下降并开始上升。这是过拟合的信号,表明我们可能应该停止训练(或者至少保存模型的快照)。 -![overfitting](../../../../../translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.zh.png) +![过拟合](../../../../../translated_images/Overfitting.408ad91cd90b4371d0a81f4287e1409c359751adeb1ae450332af50e84f08c3e.zh.png) ## 如何防止过拟合 -如果您发现过拟合发生,您可以采取以下措施之一: +如果你发现发生了过拟合,可以采取以下措施: -* 增加训练数据量 -* 降低模型的复杂性 -* 使用一些 [正则化技术](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md),例如 [Dropout](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md#Dropout),我们稍后将讨论。 + * 增加训练数据量 + * 降低模型的复杂度 + * 使用一些[正则化技术](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md),例如 [Dropout](../../4-ComputerVision/08-TransferLearning/TrainingTricks.md#Dropout),我们稍后会讨论。 ## 过拟合与偏差-方差权衡 -过拟合实际上是统计学中一个更一般性问题的情况,称为 [偏差-方差权衡](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff)。如果我们考虑模型中可能的误差来源,我们可以看到两种类型的误差: +过拟合实际上是统计学中一个更通用问题的特例,称为[偏差-方差权衡](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff)。如果我们考虑模型中可能的误差来源,可以看到两种类型的误差: -* **偏差误差** 是由于我们的算法无法正确捕捉训练数据之间的关系造成的。这可能是因为我们的模型不够强大(**欠拟合**)。 -* **方差误差** 是由于模型近似输入数据中的噪声而非有意义的关系(**过拟合**)造成的。 +* **偏差误差** 是由于算法无法正确捕捉训练数据之间的关系而引起的。这可能是因为模型不够强大(**欠拟合**)。 +* **方差误差** 是由于模型拟合了输入数据中的噪声而不是有意义的关系(**过拟合**)。 -在训练过程中,偏差误差会减少(因为我们的模型学习近似数据),而方差误差会增加。重要的是在检测到过拟合时手动停止训练,或者通过引入正则化自动停止训练,以防止过拟合。 +在训练过程中,偏差误差会减少(因为模型学会了拟合数据),而方差误差会增加。为了防止过拟合,重要的是在检测到过拟合时手动停止训练,或者通过引入正则化自动停止。 -## 结论 +## 总结 -在本课中,您了解了两个最流行的 AI 框架 TensorFlow 和 PyTorch 的各种 API 之间的差异。此外,您还学习了一个非常重要的话题,过拟合。 +在本课中,你学习了两个最流行的 AI 框架 TensorFlow 和 PyTorch 的不同 API。此外,你还学习了一个非常重要的话题——过拟合。 ## 🚀 挑战 -在随附的笔记本中,您会在底部找到“任务”;请逐步完成笔记本并完成任务。 +在配套的笔记本中,你会发现一些“任务”;请完成这些笔记本中的任务。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/205) ## 复习与自学 -对以下主题进行一些研究: +研究以下主题: - TensorFlow - PyTorch - 过拟合 -问自己以下问题: +问问自己以下问题: -- TensorFlow 和 PyTorch 之间有什么区别? -- 过拟合和欠拟合之间有什么区别? +- TensorFlow 和 PyTorch 有什么区别? +- 过拟合和欠拟合有什么区别? ## [作业](lab/README.md) -在这个实验中,您需要使用 PyTorch 或 TensorFlow 解决两个分类问题,使用单层和多层全连接网络。 +在本实验中,你需要使用 PyTorch 或 TensorFlow 解决两个分类问题,分别使用单层和多层全连接网络。 * [说明](lab/README.md) * [笔记本](../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb) -**免责声明**: -本文件使用机器翻译服务进行翻译。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议使用专业的人类翻译。我们对因使用此翻译而产生的任何误解或错误解释不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md b/translations/zh/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md index a7220e64..53c27db5 100644 --- a/translations/zh/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md +++ b/translations/zh/lessons/3-NeuralNetworks/05-Frameworks/lab/README.md @@ -1,19 +1,28 @@ + # 使用 PyTorch/TensorFlow 进行分类 来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验任务。 ## 任务 -使用 PyTorch 或 TensorFlow 解决两个分类问题,使用单层和多层全连接网络: +使用 PyTorch 或 TensorFlow 解决两个分类问题,分别使用单层和多层全连接网络: -1. **[鸢尾花分类](https://en.wikipedia.org/wiki/Iris_flower_data_set)** 问题 - 这是一个具有表格输入数据的经典机器学习问题。你的目标是根据 4 个数值参数将鸢尾花分类为 3 个类别。 -2. **MNIST** 手写数字分类问题,这是我们之前见过的。 +1. **[鸢尾花分类](https://en.wikipedia.org/wiki/Iris_flower_data_set)** 问题 - 一个具有表格输入数据的示例问题,可以通过经典机器学习方法处理。你的目标是根据 4 个数值参数将鸢尾花分类为 3 个类别。 +2. **MNIST** 手写数字分类问题,我们之前已经见过。 -尝试不同的网络架构,以获得最佳的准确率。 +尝试不同的网络架构,以获得尽可能高的准确率。 -## 启动笔记本 +## 起始笔记本 通过打开 [LabFrameworks.ipynb](../../../../../../lessons/3-NeuralNetworks/05-Frameworks/lab/LabFrameworks.ipynb) 开始实验。 **免责声明**: -本文件使用机器翻译的人工智能服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或错误解读不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/3-NeuralNetworks/README.md b/translations/zh/lessons/3-NeuralNetworks/README.md index 7202b945..729d21f9 100644 --- a/translations/zh/lessons/3-NeuralNetworks/README.md +++ b/translations/zh/lessons/3-NeuralNetworks/README.md @@ -1,51 +1,60 @@ + # 神经网络简介 -![神经网络简介内容的摘要](../../../../translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.zh.png) +![神经网络内容总结涂鸦](../../../../translated_images/ai-neuralnetworks.1c687ae40bc86e834f497844866a26d3e0886650a67a4bbe29442e2f157d3b18.zh.png) -正如我们在介绍中讨论的那样,实现智能的一种方法是训练一个**计算机模型**或**人工大脑**。自20世纪中叶以来,研究人员尝试了不同的数学模型,直到近年来这一方向被证明极为成功。这种对大脑的数学模型被称为**神经网络**。 +正如我们在介绍中讨论的那样,实现智能的一种方法是训练一个**计算机模型**或一个**人工大脑**。自20世纪中期以来,研究人员尝试了不同的数学模型,直到近年来这一方向被证明是非常成功的。这些模拟大脑的数学模型被称为**神经网络**。 -> 有时神经网络被称为*人工神经网络*,即ANN,以表明我们所讨论的是模型,而不是真实的神经元网络。 +> 有时神经网络被称为*人工神经网络*(Artificial Neural Networks,ANNs),以表明我们讨论的是模型,而不是实际的神经网络。 ## 机器学习 -神经网络是一个更大领域的组成部分,称为**机器学习**,其目标是利用数据训练能够解决问题的计算机模型。机器学习构成了人工智能的重要部分,但在本课程中我们不涉及经典的机器学习。 +神经网络是一个更大领域的一部分,称为**机器学习**。其目标是利用数据训练计算机模型以解决问题。机器学习是人工智能的重要组成部分,但我们在本课程中不涉及传统的机器学习。 -> 请访问我们的**[初学者机器学习](http://github.com/microsoft/ml-for-beginners)**课程,了解更多关于经典机器学习的信息。 +> 请访问我们单独的**[机器学习初学者课程](http://github.com/microsoft/ml-for-beginners)**,了解更多关于传统机器学习的内容。 -在机器学习中,我们假设有一些示例数据集**X**,以及对应的输出值**Y**。示例通常是由**特征**组成的N维向量,而输出称为**标签**。 +在机器学习中,我们假设有一些示例数据集**X**,以及对应的输出值**Y**。示例通常是由**特征**组成的N维向量,而输出被称为**标签**。 -我们将考虑两种最常见的机器学习问题: +我们将讨论两种最常见的机器学习问题: -* **分类**,在这里我们需要将输入对象分类到两个或多个类别中。 -* **回归**,在这里我们需要为每个输入样本预测一个数值。 +* **分类**,需要将输入对象分类到两个或多个类别中。 +* **回归**,需要为每个输入样本预测一个数值。 -> 当将输入和输出表示为张量时,输入数据集是一个大小为M×N的矩阵,其中M是样本数量,N是特征数量。输出标签Y是大小为M的向量。 +> 当将输入和输出表示为张量时,输入数据集是一个大小为M×N的矩阵,其中M是样本数量,N是特征数量。输出标签**Y**是一个大小为M的向量。 -在本课程中,我们将只关注神经网络模型。 +在本课程中,我们将仅关注神经网络模型。 ## 神经元模型 -从生物学上我们知道,我们的大脑由神经细胞组成,每个神经元有多个“输入”(轴突)和一个输出(树突)。轴突和树突可以传导电信号,轴突和树突之间的连接可以表现出不同程度的导电性(由神经介质控制)。 +从生物学中我们知道,大脑由神经细胞组成,每个神经细胞有多个“输入”(轴突)和一个输出(树突)。轴突和树突可以传导电信号,而轴突和树突之间的连接可以表现出不同程度的导电性(由神经递质控制)。 ![神经元模型](../../../../translated_images/synapse-wikipedia.ed20a9e4726ea1c6a3ce8fec51c0b9bec6181946dca0fe4e829bc12fa3bacf01.zh.jpg) | ![神经元模型](../../../../translated_images/artneuron.1a5daa88d20ebe6f5824ddb89fba0bdaaf49f67e8230c1afbec42909df1fc17e.zh.png) ----|---- -真实神经元 *([图片](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg)来自维基百科)* | 人工神经元 *(作者提供的图片)* +真实神经元 *([图片](https://en.wikipedia.org/wiki/Synapse#/media/File:SynapseSchematic_lines.svg)来自维基百科)* | 人工神经元 *(作者提供图片)* -因此,神经元的最简单数学模型包含多个输入X1, ..., XN和一个输出Y,以及一系列权重W1, ..., WN。输出的计算公式为: +因此,神经元的最简单数学模型包含几个输入X1, ..., XN和一个输出Y,以及一系列权重W1, ..., WN。输出计算公式为: Y = f\left(\sum_{i=1}^N X_iW_i\right) 其中f是某种非线性**激活函数**。 -> 神经元的早期模型在1943年由Warren McCullock和Walter Pitts在经典论文[A logical calculus of the ideas immanent in nervous activity](https://www.cs.cmu.edu/~./epxing/Class/10715/reading/McCulloch.and.Pitts.pdf)中描述。Donald Hebb在他的书"[The Organization of Behavior: A Neuropsychological Theory](https://books.google.com/books?id=VNetYrB8EBoC)"中提出了训练这些网络的方法。 +> 早期的神经元模型在1943年由Warren McCullock和Walter Pitts在经典论文[A logical calculus of the ideas immanent in nervous activity](https://www.cs.cmu.edu/~./epxing/Class/10715/reading/McCulloch.and.Pitts.pdf)中描述。Donald Hebb在他的书《[行为的组织:一种神经心理学理论](https://books.google.com/books?id=VNetYrB8EBoC)》中提出了训练这些网络的方法。 ## 本节内容 -在本节中,我们将学习: -* [感知器](03-Perceptron/README.md),最早的用于两类分类的神经网络模型之一 -* [多层网络](04-OwnFramework/README.md),配套笔记本[如何构建我们自己的框架](../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) -* [神经网络框架](05-Frameworks/README.md),包括这些笔记本:[PyTorch](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb)和[Keras/Tensorflow](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) +在本节中,我们将学习以下内容: +* [感知机](03-Perceptron/README.md),一种用于二分类的最早神经网络模型 +* [多层网络](04-OwnFramework/README.md),以及配套笔记本[如何构建我们自己的框架](../../../../lessons/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb) +* [神经网络框架](05-Frameworks/README.md),包括以下笔记本:[PyTorch](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb)和[Keras/Tensorflow](../../../../lessons/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb) * [过拟合](../../../../lessons/3-NeuralNetworks/05-Frameworks) **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而导致的任何误解或误读不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/06-IntroCV/README.md b/translations/zh/lessons/4-ComputerVision/06-IntroCV/README.md index 3b3d62d1..b037b1ad 100644 --- a/translations/zh/lessons/4-ComputerVision/06-IntroCV/README.md +++ b/translations/zh/lessons/4-ComputerVision/06-IntroCV/README.md @@ -1,31 +1,40 @@ + # 计算机视觉简介 -[计算机视觉](https://wikipedia.org/wiki/Computer_vision) 是一门旨在使计算机能够高水平理解数字图像的学科。这是一个相当广泛的定义,因为“理解”可以有许多不同的含义,包括在图片中找到物体(**物体检测**)、理解发生了什么(**事件检测**)、用文本描述一幅图像,或重建3D场景。还有一些与人类图像相关的特殊任务:年龄和情感估计、面部检测和识别,以及3D姿态估计等。 +[计算机视觉](https://wikipedia.org/wiki/Computer_vision) 是一个旨在让计算机能够对数字图像进行高层次理解的学科。这是一个非常广泛的定义,因为“理解”可以有很多不同的含义,包括在图片中找到一个物体(**目标检测**)、理解发生了什么(**事件检测**)、用文字描述图片,或者以3D形式重建场景。此外,还有一些与人类图像相关的特殊任务:例如年龄和情绪估计、人脸检测与识别,以及3D姿态估计等。 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/106) 计算机视觉最简单的任务之一是 **图像分类**。 -计算机视觉通常被视为人工智能的一个分支。如今,大多数计算机视觉任务都是通过神经网络解决的。在本节中,我们将深入了解用于计算机视觉的特殊类型神经网络——[卷积神经网络](../07-ConvNets/README.md)。 +计算机视觉通常被认为是人工智能的一个分支。如今,大多数计算机视觉任务都是通过神经网络解决的。在本节中,我们将深入学习一种专门用于计算机视觉的神经网络——[卷积神经网络](../07-ConvNets/README.md)。 -然而,在将图像传递给神经网络之前,在许多情况下,使用一些算法技术来增强图像是有意义的。 +然而,在将图像传递给神经网络之前,许多情况下使用一些算法技术来增强图像是有意义的。 -有几种可用于图像处理的Python库: +以下是一些可用于图像处理的 Python 库: -* **[imageio](https://imageio.readthedocs.io/en/stable/)** 可用于读取/写入不同的图像格式。它还支持ffmpeg,这是一个将视频帧转换为图像的有用工具。 -* **[Pillow](https://pillow.readthedocs.io/en/stable/index.html)**(也称为PIL)功能更强大,还支持一些图像处理,例如形态变化、调色板调整等。 -* **[OpenCV](https://opencv.org/)** 是一个用C++编写的强大图像处理库,已成为图像处理的*事实*标准。它有一个方便的Python接口。 -* **[dlib](http://dlib.net/)** 是一个C++库,实现了许多机器学习算法,包括一些计算机视觉算法。它也有Python接口,可以用于面部和面部特征点检测等挑战性任务。 +* **[imageio](https://imageio.readthedocs.io/en/stable/)** 可用于读取/写入不同的图像格式。它还支持 ffmpeg,一个将视频帧转换为图像的有用工具。 +* **[Pillow](https://pillow.readthedocs.io/en/stable/index.html)**(也称为 PIL)功能更强大,还支持一些图像操作,例如变形、调色板调整等。 +* **[OpenCV](https://opencv.org/)** 是一个用 C++ 编写的强大的图像处理库,已成为图像处理的事实标准。它有一个方便的 Python 接口。 +* **[dlib](http://dlib.net/)** 是一个 C++ 库,包含许多机器学习算法,包括一些计算机视觉算法。它也有一个 Python 接口,可用于诸如人脸和面部关键点检测等复杂任务。 ## OpenCV -[OpenCV](https://opencv.org/) 被认为是图像处理的*事实*标准。它包含许多有用的算法,都是用C++实现的。您也可以通过Python调用OpenCV。 +[OpenCV](https://opencv.org/) 被认为是图像处理的事实标准。它包含许多有用的算法,使用 C++ 实现。你也可以通过 Python 调用 OpenCV。 -学习OpenCV的好地方是[这个学习OpenCV的课程](https://learnopencv.com/getting-started-with-opencv/)。在我们的课程中,我们的目标不是学习OpenCV,而是向您展示一些可以使用它的示例,以及如何使用。 +学习 OpenCV 的一个好地方是 [这个 Learn OpenCV 课程](https://learnopencv.com/getting-started-with-opencv/)。在我们的课程中,我们的目标不是学习 OpenCV,而是向你展示一些使用它的示例以及如何使用。 ### 加载图像 -在Python中,图像可以方便地表示为NumPy数组。例如,320x200像素的灰度图像将存储在一个200x320的数组中,而同一尺寸的彩色图像的形状将为200x320x3(代表3个颜色通道)。要加载图像,可以使用以下代码: +在 Python 中,图像可以方便地表示为 NumPy 数组。例如,大小为 320x200 像素的灰度图像可以存储在一个 200x320 的数组中,而相同尺寸的彩色图像则具有 200x320x3 的形状(对应 3 个颜色通道)。要加载图像,可以使用以下代码: ```python import cv2 @@ -35,78 +44,78 @@ im = cv2.imread('image.jpeg') plt.imshow(im) ``` -传统上,OpenCV使用BGR(蓝-绿-红)编码彩色图像,而Python的其他工具使用更传统的RGB(红-绿-蓝)。为了使图像看起来正确,您需要将其转换为RGB颜色空间,可以通过交换NumPy数组中的维度或调用OpenCV函数来实现: +传统上,OpenCV 对彩色图像使用 BGR(蓝-绿-红)编码,而其他 Python 工具则使用更传统的 RGB(红-绿-蓝)。为了使图像显示正确,你需要将其转换为 RGB 颜色空间,可以通过交换 NumPy 数组中的维度或调用 OpenCV 函数来实现: ```python im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB) ``` -相同的 `cvtColor` function can be used to perform other color space transformations such as converting an image to grayscale or to the HSV (Hue-Saturation-Value) color space. +同样的 `cvtColor` 函数也可以用于执行其他颜色空间转换,例如将图像转换为灰度或 HSV(色调-饱和度-亮度)颜色空间。 -You can also use OpenCV to load video frame-by-frame - an example is given in the exercise [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb). +你还可以使用 OpenCV 按帧加载视频——在练习 [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) 中有一个示例。 -### Image Processing +### 图像处理 -Before feeding an image to a neural network, you may want to apply several pre-processing steps. OpenCV can do many things, including: +在将图像传递给神经网络之前,你可能需要应用几个预处理步骤。OpenCV 可以完成许多任务,包括: -* **Resizing** the image using `im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)` -* **Blurring** the image using `im = cv2.medianBlur(im,3)` or `im = cv2.GaussianBlur(im, (3,3), 0)` -* Changing the **brightness and contrast** of the image can be done by NumPy array manipulations, as described [in this Stackoverflow note](https://stackoverflow.com/questions/39308030/how-do-i-increase-the-contrast-of-an-image-in-python-opencv). -* Using [thresholding](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html) by calling `cv2.threshold`/`cv2.adaptiveThreshold` 函数,通常比调整亮度或对比度更可取。 +* 使用 `im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)` **调整图像大小**。 +* 使用 `im = cv2.medianBlur(im,3)` 或 `im = cv2.GaussianBlur(im, (3,3), 0)` **模糊图像**。 +* 通过 NumPy 数组操作改变图像的 **亮度和对比度**,具体方法可参考 [这个 Stackoverflow 说明](https://stackoverflow.com/questions/39308030/how-do-i-increase-the-contrast-of-an-image-in-python-opencv)。 +* 使用 [阈值处理](https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html),通过调用 `cv2.threshold` 或 `cv2.adaptiveThreshold` 函数,这通常比调整亮度或对比度更优。 * 对图像应用不同的 [变换](https://docs.opencv.org/4.5.5/da/d6e/tutorial_py_geometric_transformations.html): - - **[仿射变换](https://docs.opencv.org/4.5.5/d4/d61/tutorial_warp_affine.html)** 如果您需要将旋转、调整大小和倾斜结合到图像中,并且知道图像中三点的源和目标位置,这将非常有用。仿射变换保持平行线平行。 - - **[透视变换](https://medium.com/analytics-vidhya/opencv-perspective-transformation-9edffefb2143)** 当您知道图像中4个点的源和目标位置时,可以非常有用。例如,如果您通过智能手机相机从某个角度拍摄一张矩形文档的照片,并希望制作该文档的矩形图像。 -* 通过使用 **[光流](https://docs.opencv.org/4.5.5/d4/dee/tutorial_optical_flow.html)** 理解图像内部的运动。 + - **[仿射变换](https://docs.opencv.org/4.5.5/d4/d61/tutorial_warp_affine.html)** 如果你需要对图像进行旋转、调整大小和倾斜,并且知道图像中三个点的源位置和目标位置,仿射变换会保持平行线的平行性。 + - **[透视变换](https://medium.com/analytics-vidhya/opencv-perspective-transformation-9edffefb2143)** 如果你知道图像中四个点的源位置和目标位置,这会很有用。例如,如果你用智能手机从某个角度拍摄了一张矩形文档的照片,并希望将文档本身转换为矩形图像。 +* 使用 **[光流](https://docs.opencv.org/4.5.5/d4/dee/tutorial_optical_flow.html)** 来理解图像中的运动。 -## 计算机视觉使用示例 +## 使用计算机视觉的示例 -在我们的 [OpenCV笔记本](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) 中,我们提供了一些计算机视觉可以用于执行特定任务的示例: +在我们的 [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) 中,我们提供了一些使用计算机视觉完成特定任务的示例: -* **对盲文书籍的照片进行预处理**。我们重点介绍如何使用阈值处理、特征检测、透视变换和NumPy操作来分离单个盲文符号,以便通过神经网络进行进一步分类。 +* **预处理盲文书籍的照片**。我们重点展示如何使用阈值处理、特征检测、透视变换和 NumPy 操作来分离单个盲文符号,以便后续通过神经网络进行分类。 -![盲文图像](../../../../../translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.zh.jpeg) | ![预处理的盲文图像](../../../../../translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.zh.png) | ![盲文符号](../../../../../translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.zh.png) +![盲文图像](../../../../../translated_images/braille.341962ff76b1bd7044409371d3de09ced5028132aef97344ea4b7468c1208126.zh.jpeg) | ![预处理后的盲文图像](../../../../../translated_images/braille-result.46530fea020b03c76aac532d7d6eeef7f6fb35b55b1001cd21627907dabef3ed.zh.png) | ![盲文符号](../../../../../translated_images/braille-symbols.0159185ab69d533909dc4d7d26a1971b51401c6a80eb3a5584f250ea880af88b.zh.png) ----|-----|----- -> 图片来自 [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) +> 图片来源 [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) -* **使用帧差检测视频中的运动**。如果相机固定,则来自相机的帧应该彼此非常相似。由于帧被表示为数组,因此通过减去两个后续帧的数组,我们将得到像素差异,对于静态帧来说,这个差异应该很低,而一旦图像中出现实质性运动,差异就会增大。 +* **通过帧差检测视频中的运动**。如果摄像机是固定的,那么摄像机画面中的帧应该彼此非常相似。由于帧以数组表示,只需对两个连续帧的数组进行相减,就可以得到像素差异。对于静态帧,差异应该很小,而当图像中有显著运动时,差异会变大。 -![视频帧和帧差的图像](../../../../../translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.zh.png) +![视频帧和帧差图像](../../../../../translated_images/frame-difference.706f805491a0883c938e16447bf5eb2f7d69e812c7f743cbe7d7c7645168f81f.zh.png) -> 图片来自 [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) +> 图片来源 [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) -* **使用光流检测运动**。 [光流](https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html) 使我们能够理解视频帧上单个像素的运动。光流有两种类型: +* **使用光流检测运动**。[光流](https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html) 允许我们理解视频帧中单个像素的运动。光流有两种类型: - - **稠密光流** 计算向量场,显示每个像素的运动方向 - - **稀疏光流** 基于提取图像中的一些独特特征(例如边缘),并从帧到帧构建其轨迹。 + - **稠密光流** 计算每个像素的运动矢量场。 + - **稀疏光流** 基于图像中的一些显著特征(例如边缘),并构建它们从帧到帧的轨迹。 ![光流图像](../../../../../translated_images/optical.1f4a94464579a83a10784f3c07fe7228514714b96782edf50e70ccd59d2d8c4f.zh.png) -> 图片来自 [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) +> 图片来源 [OpenCV.ipynb](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) -## ✍️ 示例笔记本:OpenCV [在行动中尝试OpenCV](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) +## ✍️ 示例笔记本: OpenCV [尝试 OpenCV 实践](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) -让我们通过探索 [OpenCV笔记本](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) 来进行一些OpenCV实验。 +让我们通过探索 [OpenCV Notebook](../../../../../lessons/4-ComputerVision/06-IntroCV/OpenCV.ipynb) 来进行一些 OpenCV 的实验。 ## 结论 -有时,相对复杂的任务,如运动检测或指尖检测,可以仅通过计算机视觉来解决。因此,了解计算机视觉的基本技术以及像OpenCV这样的库能做什么是非常有帮助的。 +有时,像运动检测或指尖检测这样相对复杂的任务可以完全通过计算机视觉来解决。因此,了解计算机视觉的基本技术以及像 OpenCV 这样的库的功能非常有帮助。 ## 🚀 挑战 -观看 [这个视频](https://docs.microsoft.com/shows/ai-show/ai-show--2021-opencv-ai-competition--grand-prize-winners--cortic-tigers--episode-32?WT.mc_id=academic-77998-cacaste) 来了解Cortic Tigers项目,以及他们如何通过机器人构建基于区块的解决方案,以使计算机视觉任务民主化。研究其他类似的项目,帮助新学习者进入这个领域。 +观看 [这个视频](https://docs.microsoft.com/shows/ai-show/ai-show--2021-opencv-ai-competition--grand-prize-winners--cortic-tigers--episode-32?WT.mc_id=academic-77998-cacaste),了解 Cortic Tigers 项目以及他们如何通过机器人构建一个基于模块的解决方案来普及计算机视觉任务。研究其他类似项目,这些项目帮助新学习者进入该领域。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/206) ## 复习与自学 -在[这个精彩的教程](https://learnopencv.com/optical-flow-in-opencv/)中阅读更多关于光流的内容。 +阅读更多关于光流的内容 [在这个优秀教程中](https://learnopencv.com/optical-flow-in-opencv/)。 ## [作业](lab/README.md) -在这个实验中,您将拍摄一个简单手势的视频,您的目标是使用光流提取上下左右的运动。 +在这个实验中,你将拍摄一个包含简单手势的视频,你的目标是使用光流提取上下左右的运动。 手掌运动帧 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原文以其母语应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/06-IntroCV/lab/README.md b/translations/zh/lessons/4-ComputerVision/06-IntroCV/lab/README.md index 1ed748e4..7d986ee5 100644 --- a/translations/zh/lessons/4-ComputerVision/06-IntroCV/lab/README.md +++ b/translations/zh/lessons/4-ComputerVision/06-IntroCV/lab/README.md @@ -1,23 +1,31 @@ + # 使用光流检测运动 -来自 [AI for Beginners Curriculum](https://aka.ms/ai-beginners) 的实验作业。 +来自 [AI 初学者课程](https://aka.ms/ai-beginners) 的实验任务。 ## 任务 -考虑 [这个视频](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4),其中一个人的手掌在稳定的背景上左右/上下移动。 -您已接受培训的数据截至2023年10月。 +请参考[这个视频](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4),视频中一个人的手掌在稳定的背景下向左/右/上/下移动。 -**您的目标** 是能够使用光流确定视频中哪些部分包含上下/左右的运动。 +**你的目标**是使用光流技术来判断视频中哪些部分包含向上/向下/向左/向右的运动。 -**扩展目标** 是实际上使用肤色跟踪手掌/手指的运动,如 [这篇博客文章](https://dev.to/amarlearning/finger-detection-and-tracking-using-opencv-and-python-586m) 或 [这里](http://www.benmeline.com/finger-tracking-with-opencv-and-python/) 中所描述的。 +**进阶目标**是通过肤色检测实际追踪手掌/手指的运动,具体方法可参考[这篇博客](https://dev.to/amarlearning/finger-detection-and-tracking-using-opencv-and-python-586m)或[这里](http://www.benmeline.com/finger-tracking-with-opencv-and-python/)。 -## 开始笔记本 +## 起始笔记本 -通过打开 [MovementDetection.ipynb](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb) 来开始实验。 +通过打开 [MovementDetection.ipynb](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb) 开始实验。 ## 收获 -有时,相对复杂的任务,如运动检测或指尖检测,可以纯粹通过计算机视觉来解决。因此,了解像 OpenCV 这样的库可以做什么是非常有帮助的。 +有时,像运动检测或指尖检测这样相对复杂的任务可以完全通过计算机视觉来解决。因此,了解像 OpenCV 这样的库的功能非常有帮助。 **免责声明**: -本文件是使用基于机器的人工智能翻译服务翻译的。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业的人类翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md b/translations/zh/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md index bee162b9..5683e787 100644 --- a/translations/zh/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md +++ b/translations/zh/lessons/4-ComputerVision/07-ConvNets/CNN_Architectures.md @@ -1,64 +1,73 @@ -# 知名的 CNN 架构 + +# 常见的 CNN 架构 ### VGG-16 -VGG-16 是一个在 2014 年的 ImageNet 前五名分类中达到 92.7% 准确率的网络。它具有以下层结构: +VGG-16 是一个在 2014 年 ImageNet top-5 分类中达到 92.7% 准确率的网络。它的层结构如下: -![ImageNet Layers](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.zh.jpg) +![ImageNet 层](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.zh.jpg) -如你所见,VGG 遵循传统的金字塔架构,这是一个卷积-池化层的序列。 +如图所示,VGG 采用了传统的金字塔架构,即一系列卷积-池化层的组合。 -![ImageNet Pyramid](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.zh.jpg) +![ImageNet 金字塔](../../../../../translated_images/vgg-16-arch.64ff2137f50dd49fdaa786e3f3a975b3f22615efd13efb19c5d22f12e01451a1.zh.jpg) -> 图片来自 [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) +> 图片来源于 [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) ### ResNet -ResNet 是微软研究院在 2015 年提出的一系列模型。ResNet 的主要思想是使用 **残差块**: +ResNet 是微软研究院在 2015 年提出的一系列模型。ResNet 的核心思想是使用 **残差块**: -> 图片来自 [这篇论文](https://arxiv.org/pdf/1512.03385.pdf) +> 图片来源于 [这篇论文](https://arxiv.org/pdf/1512.03385.pdf) -使用恒等传递的原因在于让我们的层预测 **前一层的结果与残差块的输出之间的差异**,因此得名 *残差*。这些块更容易训练,并且可以构建包含数百个这样的块的网络(最常见的变体是 ResNet-52、ResNet-101 和 ResNet-152)。 +使用恒等传递的原因是让我们的层预测前一层结果与残差块输出之间的**差值**,因此得名 *残差*。这些块更容易训练,并且可以构建包含数百个这样的块的网络(最常见的变体是 ResNet-52、ResNet-101 和 ResNet-152)。 -你也可以将这个网络视为能够根据数据集调整其复杂性。最初,当你开始训练网络时,权重值较小,大部分信号通过恒等传递层。当训练进行时,权重变得更大,网络参数的显著性增加,网络会调整以满足正确分类训练图像所需的表达能力。 +你也可以将这个网络理解为能够根据数据集调整其复杂度。最初,在开始训练网络时,权重值较小,大部分信号通过恒等传递层。随着训练的进行,权重变大,网络参数的重要性增加,网络会调整以适应所需的表达能力,从而正确分类训练图像。 ### Google Inception -Google Inception 架构在这个想法上更进一步,将每个网络层构建为多个不同路径的组合: +Google Inception 架构将这一思想更进一步,将每一层网络构建为多个不同路径的组合: -> 图片来自 [Researchgate](https://www.researchgate.net/figure/Inception-module-with-dimension-reductions-left-and-schema-for-Inception-ResNet-v1_fig2_355547454) +> 图片来源于 [Researchgate](https://www.researchgate.net/figure/Inception-module-with-dimension-reductions-left-and-schema-for-Inception-ResNet-v1_fig2_355547454) -在这里,我们需要强调 1x1 卷积的作用,因为乍一看它们似乎没有意义。为什么我们需要使用 1x1 的滤波器遍历图像?然而,你需要记住,卷积滤波器也与多个深度通道一起工作(最初是 RGB 颜色,在后续层中是不同滤波器的通道),而 1x1 卷积用于使用不同的可训练权重将这些输入通道混合在一起。它也可以被视为在通道维度上的下采样(池化)。 +这里需要强调的是 1x1 卷积的作用,因为一开始它看起来没有意义。为什么需要用 1x1 滤波器处理图像?然而,你需要记住,卷积滤波器也会处理多个深度通道(最初是 RGB 颜色,在后续层中是不同滤波器的通道),而 1x1 卷积用于通过不同的可训练权重将这些输入通道混合在一起。它也可以被视为在通道维度上的降采样(池化)。 -这里有 [一篇关于此主题的好博客文章](https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578),以及 [原始论文](https://arxiv.org/pdf/1312.4400.pdf)。 +这里有一篇关于这个主题的[优秀博客文章](https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578),以及[原始论文](https://arxiv.org/pdf/1312.4400.pdf)。 ### MobileNet -MobileNet 是一系列尺寸较小的模型,适合移动设备使用。如果你的资源有限,并且可以牺牲一些准确性,可以使用它们。它们的主要思想是所谓的 **深度可分离卷积**,允许通过空间卷积和对深度通道的 1x1 卷积的组合来表示卷积滤波器。这显著减少了参数的数量,使网络的大小更小,并且在较少数据的情况下更易于训练。 +MobileNet 是一系列适合移动设备的小型模型。如果资源有限,并且可以牺牲一些准确性,可以使用它们。其核心思想是所谓的 **深度可分离卷积**,它通过空间卷积和深度通道上的 1x1 卷积的组合来表示卷积滤波器。这显著减少了参数数量,使网络更小,同时也更容易用较少的数据进行训练。 -这里有 [一篇关于 MobileNet 的好博客文章](https://medium.com/analytics-vidhya/image-classification-with-mobilenet-cc6fbb2cd470)。 +这里有一篇关于 MobileNet 的[优秀博客文章](https://medium.com/analytics-vidhya/image-classification-with-mobilenet-cc6fbb2cd470)。 -## 结论 +## 总结 -在本单元中,你学习了计算机视觉神经网络的主要概念——卷积网络。驱动图像分类、物体检测甚至图像生成网络的实际架构都是基于 CNN 的,只是具有更多层和一些额外的训练技巧。 +在本单元中,你已经学习了计算机视觉神经网络的主要概念——卷积网络。现实生活中用于图像分类、目标检测甚至图像生成的网络架构,都是基于 CNN 的,只是增加了更多的层和一些额外的训练技巧。 ## 🚀 挑战 -在随附的笔记本中,底部有关于如何获得更高准确性的说明。做一些实验,看看你能否达到更高的准确性。 +在配套的笔记本中,底部有关于如何获得更高准确率的提示。尝试进行一些实验,看看是否可以实现更高的准确率。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/207) ## 复习与自学 -虽然 CNN 最常用于计算机视觉任务,但它们通常适合提取固定大小的模式。例如,如果我们处理声音,我们也可能想使用 CNN 来寻找音频信号中的某些特定模式——在这种情况下,滤波器将是 1 维的(而这个 CNN 将被称为 1D-CNN)。此外,有时使用 3D-CNN 来提取多维空间中的特征,例如视频中发生的某些事件——CNN 可以捕捉随时间变化的特征模式。进行一些关于 CNN 可以完成的其他任务的复习和自学。 +虽然 CNN 最常用于计算机视觉任务,但它们通常也适合提取固定大小的模式。例如,如果我们处理的是声音,也可以使用 CNN 来寻找音频信号中的某些特定模式——在这种情况下,滤波器将是一维的(这种 CNN 被称为 1D-CNN)。此外,有时会使用 3D-CNN 来提取多维空间中的特征,例如视频中发生的某些事件——CNN 可以捕捉随时间变化的某些特征模式。请复习并自学 CNN 在其他任务中的应用。 ## [作业](lab/README.md) -在这个实验中,你的任务是对不同的猫和狗品种进行分类。这些图像比 MNIST 数据集更复杂,维度更高,并且类别超过 10 个。 +在本次实验中,你的任务是对不同的猫狗品种进行分类。这些图像比 MNIST 数据集更复杂,维度更高,并且类别超过 10 个。 -**免责声明**: -本文件使用机器翻译的人工智能服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或误释不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/07-ConvNets/README.md b/translations/zh/lessons/4-ComputerVision/07-ConvNets/README.md index 9927e85d..02d6c632 100644 --- a/translations/zh/lessons/4-ComputerVision/07-ConvNets/README.md +++ b/translations/zh/lessons/4-ComputerVision/07-ConvNets/README.md @@ -1,49 +1,57 @@ + # 卷积神经网络 -我们之前已经看到,神经网络在处理图像方面表现相当不错,甚至单层感知器也能够以合理的准确率识别 MNIST 数据集中的手写数字。然而,MNIST 数据集非常特殊,所有数字都居中于图像中,这使得任务变得简单。 +我们之前已经看到,神经网络在处理图像方面表现得相当不错,即使是单层感知机也能够以较高的准确率识别 MNIST 数据集中的手写数字。然而,MNIST 数据集非常特殊,所有的数字都被居中放置在图像中,这使得任务变得更简单。 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/107) -在现实生活中,我们希望能够识别图像中的物体,而不论它们在图像中的确切位置。计算机视觉不同于一般的分类,因为当我们试图在图像中找到某个特定物体时,我们是在扫描图像,寻找一些特定的 **模式** 及其组合。例如,当寻找一只猫时,我们首先可能会寻找可以形成胡须的水平线,然后某种胡须的组合可以告诉我们,这实际上是一只猫的图像。相对位置和某些模式的存在是重要的,而不是它们在图像上的确切位置。 +在现实生活中,我们希望能够识别图片中的物体,而不受它们在图像中具体位置的影响。计算机视觉与通用分类不同,因为当我们试图在图片中找到某个特定物体时,我们实际上是在扫描图像,寻找某些特定的**模式**及其组合。例如,当寻找一只猫时,我们可能会先寻找水平线条,这些线条可能形成胡须,然后某种胡须的组合可以告诉我们这是一只猫。某些模式的相对位置和存在性很重要,而它们在图像中的具体位置则不那么重要。 -为了提取模式,我们将使用 **卷积滤波器** 的概念。正如你所知,图像由 2D 矩阵或带有颜色深度的 3D 张量表示。应用滤波器意味着我们取相对较小的 **滤波器内核** 矩阵,并对原始图像中的每个像素计算与邻近点的加权平均。我们可以将其视为一个小窗口在整个图像上滑动,并根据滤波器内核矩阵中的权重对所有像素进行平均。 +为了提取这些模式,我们将使用**卷积滤波器**的概念。正如你所知,图像可以用二维矩阵或带有颜色深度的三维张量表示。应用滤波器意味着我们使用一个相对较小的**滤波核**矩阵,并对原始图像中的每个像素与其邻近点进行加权平均。我们可以将其视为一个小窗口在整个图像上滑动,并根据滤波核矩阵中的权重对所有像素进行平均。 ![垂直边缘滤波器](../../../../../translated_images/filter-vert.b7148390ca0bc356ddc7e55555d2481819c1e86ddde9dce4db5e71a69d6f887f.zh.png) | ![水平边缘滤波器](../../../../../translated_images/filter-horiz.59b80ed4feb946efbe201a7fe3ca95abb3364e266e6fd90820cb893b4d3a6dda.zh.png) ----|---- > 图片由 Dmitry Soshnikov 提供 -例如,如果我们对 MNIST 数字应用 3x3 的垂直边缘和水平边缘滤波器,我们可以在原始图像中获得高亮(例如,高值)的位置,这些位置对应于垂直和水平边缘。因此,这两个滤波器可以用来“寻找”边缘。类似地,我们可以设计不同的滤波器来寻找其他低级模式: -你已接受训练的数据截止到 2023 年 10 月。 +例如,如果我们对 MNIST 数字应用 3x3 的垂直边缘和水平边缘滤波器,我们可以在原始图像中有垂直和水平边缘的地方得到高亮(例如高值)。因此,这两个滤波器可以用来“寻找”边缘。同样,我们可以设计不同的滤波器来寻找其他低级模式: -> [Leung-Malik 滤波器组](https://www.robots.ox.ac.uk/~vgg/research/texclass/filters.html) +> [Leung-Malik 滤波器组](https://www.robots.ox.ac.uk/~vgg/research/texclass/filters.html)的图片 -然而,虽然我们可以手动设计滤波器来提取一些模式,我们也可以设计网络,使其能够自动学习模式。这是卷积神经网络(CNN)背后的主要思想之一。 +然而,尽管我们可以手动设计滤波器来提取某些模式,我们也可以设计网络,使其能够自动学习这些模式。这正是 CNN 背后的主要思想之一。 -## CNN 背后的主要思想 +## CNN 的主要思想 -CNN 的工作原理基于以下重要思想: +CNN 的工作原理基于以下几个重要思想: * 卷积滤波器可以提取模式 -* 我们可以以某种方式设计网络,使得滤波器能够自动训练 -* 我们可以使用相同的方法在高级特征中找到模式,而不仅仅是在原始图像中。因此,CNN 特征提取在特征层次上工作,从低级像素组合开始,一直到更高级的图像部分组合。 +* 我们可以设计网络,使滤波器能够自动训练 +* 我们可以使用相同的方法来发现高级特征中的模式,而不仅仅是原始图像中的模式。因此,CNN 的特征提取是基于特征的层次结构,从低级像素组合开始,到更高级的图像部分组合。 -![分层特征提取](../../../../../translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.zh.png) +![层次化特征提取](../../../../../translated_images/FeatureExtractionCNN.d9b456cbdae7cb643fde3032b81b2940e3cf8be842e29afac3f482725ba7f95c.zh.png) -> 图片来自 [Hislop-Lynch 的论文](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d),基于 [他们的研究](https://dl.acm.org/doi/abs/10.1145/1553374.1553453) +> 图片来自 [Hislop-Lynch 的论文](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d),基于[他们的研究](https://dl.acm.org/doi/abs/10.1145/1553374.1553453) ## ✍️ 练习:卷积神经网络 -让我们继续探索卷积神经网络的工作原理,以及如何实现可训练的滤波器,通过以下笔记本进行实践: +让我们继续探索卷积神经网络的工作原理,以及如何通过相应的笔记本实现可训练的滤波器: * [卷积神经网络 - PyTorch](../../../../../lessons/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb) * [卷积神经网络 - TensorFlow](../../../../../lessons/4-ComputerVision/07-ConvNets/ConvNetsTF.ipynb) ## 金字塔架构 -大多数用于图像处理的 CNN 遵循一种所谓的金字塔架构。应用于原始图像的第一个卷积层通常具有相对较少的滤波器(8-16),这些滤波器对应于不同的像素组合,例如水平/垂直线条的笔画。在下一个层级中,我们减少网络的空间维度,并增加滤波器的数量,这对应于更多简单特征的可能组合。随着每一层的推进,朝向最终分类器,图像的空间维度减小,而滤波器的数量增加。 +大多数用于图像处理的 CNN 都遵循所谓的金字塔架构。应用于原始图像的第一个卷积层通常具有相对较少的滤波器(8-16 个),这些滤波器对应于不同的像素组合,例如水平/垂直线条或笔画。在下一层中,我们减少网络的空间维度,并增加滤波器的数量,这对应于更多简单特征的可能组合。随着每一层的推进,向最终分类器靠近,图像的空间维度逐渐减小,而滤波器的数量逐渐增加。 -作为例子,让我们看看 VGG-16 的架构,这个网络在 2014 年的 ImageNet 前 5 名分类中达到了 92.7% 的准确率: +例如,让我们看一下 VGG-16 的架构,这是一种在 2014 年 ImageNet 的 top-5 分类中实现了 92.7% 准确率的网络: ![ImageNet 层](../../../../../translated_images/vgg-16-arch1.d901a5583b3a51baeaab3e768567d921e5d54befa46e1e642616c5458c934028.zh.jpg) @@ -51,9 +59,9 @@ CNN 的工作原理基于以下重要思想: > 图片来自 [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493) -## 最知名的 CNN 架构 +## 最著名的 CNN 架构 -[继续学习最知名的 CNN 架构](CNN_Architectures.md) +[继续学习最著名的 CNN 架构](CNN_Architectures.md) **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于重要信息,建议进行专业人工翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/zh/lessons/4-ComputerVision/07-ConvNets/lab/README.md index a2e4b315..f8d325be 100644 --- a/translations/zh/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/zh/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,16 +1,25 @@ -# 宠物面孔分类 + +# 宠物面部分类 -来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验作业。 +来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验任务。 ## 任务 -想象一下,您需要开发一个宠物托儿所的应用程序来 catalog 所有宠物。这样一个应用程序的一个重要功能是能够从照片中自动识别品种。这可以通过神经网络成功实现。 +想象一下,你需要开发一个宠物托管应用程序,用来记录所有的宠物信息。这个应用程序的一个重要功能是能够通过照片自动识别宠物的品种。这可以通过神经网络成功实现。 -您需要训练一个卷积神经网络来使用 **Pet Faces** 数据集对不同品种的猫和狗进行分类。 +你需要训练一个卷积神经网络,使用 **Pet Faces** 数据集对不同品种的猫和狗进行分类。 ## 数据集 -我们将使用 **Pet Faces** 数据集,该数据集源自 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 的宠物数据集。它包含 35 种不同品种的狗和猫。 +我们将使用 **Pet Faces** 数据集,该数据集来源于 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 宠物数据集。它包含35种不同品种的猫和狗。 ![我们将处理的数据集](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.zh.png) @@ -28,7 +37,7 @@ ## 收获 -您已经从零开始解决了一个相对复杂的图像分类问题!类的数量相当多,但您仍然能够获得合理的准确性!测量 top-k 准确性也是有意义的,因为一些类即使对人类来说也不容易区分。 +你已经从零开始解决了一个相对复杂的图像分类问题!尽管有很多类别,你仍然能够获得不错的准确率!同时,测量 top-k 准确率也是有意义的,因为有些类别即使是人类也很难区分清楚,容易混淆。 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/08-TransferLearning/README.md b/translations/zh/lessons/4-ComputerVision/08-TransferLearning/README.md index d52ef46c..4ba06a51 100644 --- a/translations/zh/lessons/4-ComputerVision/08-TransferLearning/README.md +++ b/translations/zh/lessons/4-ComputerVision/08-TransferLearning/README.md @@ -1,81 +1,90 @@ + # 预训练网络与迁移学习 -训练卷积神经网络(CNN)可能需要大量时间,并且需要大量数据。然而,很多时间都花在学习网络可以用来从图像中提取模式的最佳低级滤波器上。一个自然的问题随之而来——我们能否使用在一个数据集上训练的神经网络,并将其调整为分类不同的图像,而无需完整的训练过程? +训练 CNN 需要耗费大量时间,并且需要大量数据。然而,大部分时间都花在学习网络可以用来从图像中提取模式的最佳低级滤波器上。一个自然的问题是:我们能否使用在一个数据集上训练好的神经网络,并将其适配到不同的图像分类任务,而无需完整的训练过程? ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/108) -这种方法被称为**迁移学习**,因为我们将一些知识从一个神经网络模型转移到另一个模型。在迁移学习中,我们通常从一个预训练模型开始,该模型已经在一些大型图像数据集上进行训练,例如**ImageNet**。这些模型已经能够很好地提取通用图像中的不同特征,在许多情况下,仅在这些提取的特征上构建一个分类器就能获得良好的结果。 +这种方法被称为**迁移学习**,因为我们将一个神经网络模型中的部分知识转移到另一个模型中。在迁移学习中,我们通常从一个预训练模型开始,该模型已经在某个大型图像数据集(如 **ImageNet**)上进行了训练。这些模型已经能够很好地从通用图像中提取不同的特征,在许多情况下,仅仅在这些提取的特征上构建一个分类器就能取得不错的效果。 -> ✅ 迁移学习是一个在其他学术领域(例如教育)中也会遇到的术语。它指的是将一个领域的知识应用到另一个领域的过程。 +> ✅ 迁移学习是一个在其他学术领域(如教育学)中也会遇到的术语,它指的是将一个领域的知识应用到另一个领域的过程。 -## 作为特征提取器的预训练模型 +## 预训练模型作为特征提取器 -我们在前一部分中讨论的卷积网络包含多个层,每一层都旨在从图像中提取一些特征,从低级的像素组合(例如水平/垂直线或笔画)开始,到更高级的特征组合,对应于火焰的眼睛等。如果我们在足够大的通用和多样化图像数据集上训练CNN,网络应该能够学习提取这些常见特征。 +我们在上一节中讨论的卷积网络包含多个层,每一层都旨在从图像中提取某些特征,从低级像素组合(如水平/垂直线条或笔画)到更高级的特征组合(如火焰的眼睛)。如果我们在足够大的通用和多样化的图像数据集上训练 CNN,网络应该能够学会提取这些常见特征。 -Keras和PyTorch都包含函数,可以轻松加载一些常见架构的预训练神经网络权重,其中大多数是在ImageNet图像上训练的。最常用的模型在前一课的[卷积神经网络架构](../07-ConvNets/CNN_Architectures.md)页面中进行了描述。特别是,您可能想考虑使用以下模型之一: +Keras 和 PyTorch 都包含了方便加载一些常见架构的预训练神经网络权重的函数,这些模型大多是在 ImageNet 图像上训练的。最常用的模型在上一课的 [CNN 架构](../07-ConvNets/CNN_Architectures.md) 页面中有描述。特别是,你可能会考虑使用以下模型之一: -* **VGG-16/VGG-19**,这些是相对简单的模型,但仍能提供良好的准确性。通常,使用VGG作为第一次尝试是一个不错的选择,以查看迁移学习的效果。 -* **ResNet** 是微软研究在2015年提出的一系列模型。它们具有更多层,因此需要更多资源。 -* **MobileNet** 是一系列尺寸较小的模型,适合移动设备。如果您资源有限,并且可以牺牲一点准确性,请使用它们。 +* **VGG-16/VGG-19**:这些是相对简单的模型,但仍然能提供不错的准确率。通常,使用 VGG 作为第一次尝试是一个不错的选择,可以看看迁移学习的效果如何。 +* **ResNet**:这是微软研究院在 2015 年提出的一系列模型。它们有更多的层,因此需要更多的资源。 +* **MobileNet**:这是适用于移动设备的一系列小型模型。如果资源有限并且可以牺牲一些准确率,可以使用它们。 -以下是VGG-16网络从一张猫的图片中提取的样本特征: +以下是 VGG-16 网络从一张猫的图片中提取的示例特征: -![VGG-16提取的特征](../../../../../translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.zh.png) +![VGG-16 提取的特征](../../../../../translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.zh.png) ## 猫与狗数据集 -在这个例子中,我们将使用一个[猫与狗](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste)的数据集,这与真实的图像分类场景非常接近。 +在这个例子中,我们将使用一个[猫与狗](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste)数据集,这非常接近真实的图像分类场景。 ## ✍️ 练习:迁移学习 -让我们在相应的笔记本中看到迁移学习的实际应用: +让我们在相应的笔记本中看看迁移学习的实际应用: * [迁移学习 - PyTorch](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) * [迁移学习 - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb) ## 可视化对抗性猫 -预训练的神经网络在其*大脑*中包含不同的模式,包括**理想猫**(以及理想狗、理想斑马等)的概念。将这种图像以某种方式**可视化**将会很有趣。然而,这并不简单,因为模式分布在整个网络权重中,并且以层次结构组织。 +预训练的神经网络在其“脑海”中包含了不同的模式,包括**理想的猫**(以及理想的狗、理想的斑马等)。我们可以尝试**可视化这些图像**,但这并不简单,因为这些模式分布在网络权重的各个部分,并且以层次结构组织。 -我们可以采取的一种方法是从一张随机图像开始,然后尝试使用**梯度下降优化**技术调整该图像,使得网络开始认为它是一只猫。 +一种方法是从一张随机图像开始,然后尝试使用**梯度下降优化**技术调整这张图像,使得网络认为它是一只猫。 ![图像优化循环](../../../../../translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.zh.png) -然而,如果我们这样做,我们将得到与随机噪声非常相似的东西。这是因为*有很多方法可以让网络认为输入图像是一只猫*,其中一些在视觉上并不合理。虽然这些图像包含许多典型于猫的模式,但没有任何东西限制它们在视觉上具有独特性。 +然而,如果我们这样做,得到的结果会非常接近随机噪声。这是因为*有很多方法可以让网络认为输入图像是一只猫*,其中一些方法在视觉上并不合理。虽然这些图像包含了许多典型的猫的模式,但没有任何约束使它们在视觉上具有辨识度。 -为了改善结果,我们可以在损失函数中添加另一个项,称为**变异损失**。它是一种度量,显示图像中相邻像素的相似程度。最小化变异损失使图像更平滑,并去除噪声——从而揭示出更具视觉吸引力的模式。以下是被高概率分类为猫和斑马的“理想”图像示例: +为了改善结果,我们可以在损失函数中添加另一个项,称为**变化损失**。它是一种度量,用于显示图像中相邻像素的相似程度。最小化变化损失可以使图像更平滑,去除噪声,从而显现出更具视觉吸引力的模式。以下是一些“理想”图像的示例,它们被高概率分类为猫和斑马: -![理想猫](../../../../../translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.zh.png) | ![理想斑马](../../../../../translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.zh.png) +![理想的猫](../../../../../translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.zh.png) | ![理想的斑马](../../../../../translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.zh.png) -----|----- - *理想猫* | *理想斑马* +*理想的猫* | *理想的斑马* -类似的方法可以用于对神经网络进行所谓的**对抗攻击**。假设我们想要欺骗一个神经网络,让一只狗看起来像一只猫。如果我们拿到一张被网络识别为狗的图像,我们可以稍微调整它,使用梯度下降优化,直到网络开始将其分类为猫: +类似的方法可以用来对神经网络进行所谓的**对抗性攻击**。假设我们想欺骗一个神经网络,让一只狗看起来像一只猫。如果我们拿一张被网络识别为狗的狗的图片,然后稍微调整它,直到网络开始将其分类为猫: -![一只狗的图片](../../../../../translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.zh.png) | ![被分类为猫的狗的图片](../../../../../translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.zh.png) +![狗的图片](../../../../../translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.zh.png) | ![被分类为猫的狗的图片](../../../../../translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.zh.png) -----|----- -*狗的原始图片* | *被分类为猫的狗的图片* +*原始狗的图片* | *被分类为猫的狗的图片* -请参阅以下笔记本中的代码以重现上述结果: +查看以下笔记本中的代码以重现上述结果: * [理想与对抗性猫 - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/AdversarialCat_TF.ipynb) -## 结论 +## 总结 -通过迁移学习,您能够快速为自定义对象分类任务构建分类器并获得高准确率。您可以看到,我们现在解决的更复杂的任务需要更高的计算能力,无法轻松在CPU上解决。在下一个单元中,我们将尝试使用更轻量的实现来训练相同的模型,使用较低的计算资源,这将导致准确率略微降低。 +通过迁移学习,你可以快速构建一个用于自定义对象分类任务的分类器,并获得较高的准确率。你可以看到,我们现在解决的更复杂的任务需要更高的计算能力,无法轻松地在 CPU 上完成。在下一单元中,我们将尝试使用更轻量级的实现来训练相同的模型,使用更少的计算资源,尽管准确率会略有下降。 ## 🚀 挑战 -在随附的笔记本中,底部有关于如何在相对相似的训练数据(也许是新类型的动物)上迁移知识效果最佳的说明。请尝试一些完全新类型的图像,看看您的迁移知识模型表现如何。 +在配套的笔记本中,底部有关于迁移知识在某些相似训练数据(例如一种新类型的动物)上效果最佳的注释。尝试使用完全新类型的图像进行实验,看看你的迁移知识模型表现得有多好或多差。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) ## 复习与自学 -阅读[TrainingTricks.md](TrainingTricks.md),以加深您对其他训练模型方法的了解。 +阅读 [TrainingTricks.md](TrainingTricks.md),加深对其他模型训练方法的理解。 ## [作业](lab/README.md) -在这个实验中,我们将使用现实生活中的[Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/)宠物数据集,包含35种猫和狗的品种,我们将构建一个迁移学习分类器。 +在本实验中,我们将使用真实的 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 宠物数据集,其中包含 35 种猫和狗的品种,并构建一个迁移学习分类器。 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而导致的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md b/translations/zh/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md index 8dd2f4c2..7d0b0b71 100644 --- a/translations/zh/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md +++ b/translations/zh/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md @@ -1,108 +1,117 @@ + # 深度学习训练技巧 -随着神经网络变得越来越深,训练它们的过程变得越来越具有挑战性。一个主要的问题是所谓的[消失梯度](https://en.wikipedia.org/wiki/Vanishing_gradient_problem)或[爆炸梯度](https://deepai.org/machine-learning-glossary-and-terms/exploding-gradient-problem#:~:text=Exploding%20gradients%20are%20a%20problem,updates%20are%20small%20and%20controlled.)。[这篇文章](https://towardsdatascience.com/the-vanishing-exploding-gradient-problem-in-deep-neural-networks-191358470c11)对这些问题进行了很好的介绍。 +随着神经网络的加深,其训练过程变得越来越具有挑战性。一个主要问题是所谓的[梯度消失](https://en.wikipedia.org/wiki/Vanishing_gradient_problem)或[梯度爆炸](https://deepai.org/machine-learning-glossary-and-terms/exploding-gradient-problem#:~:text=Exploding%20gradients%20are%20a%20problem,updates%20are%20small%20and%20controlled)。[这篇文章](https://towardsdatascience.com/the-vanishing-exploding-gradient-problem-in-deep-neural-networks-191358470c11)对这些问题进行了很好的介绍。 -为了使深度网络的训练更加高效,可以使用一些技术。 +为了使深度网络的训练更高效,可以使用一些技巧。 -## 保持值在合理范围内 +## 保持数值在合理范围内 -为了使数值计算更加稳定,我们希望确保神经网络中的所有值都在合理的范围内,通常为[-1..1]或[0..1]。这并不是一个非常严格的要求,但浮点计算的性质使得不同数量级的值无法准确地一起操作。例如,如果我们将10-10和1010相加,我们可能会得到1010,因为较小的值会被“转换”为与较大的值相同的数量级,从而导致尾数丢失。 +为了使数值计算更稳定,我们需要确保神经网络中的所有数值都在合理的范围内,通常是 [-1..1] 或 [0..1]。这并不是一个非常严格的要求,但浮点计算的特性决定了不同数量级的数值无法被准确地一起操作。例如,如果我们将 10-10 和 1010 相加,结果很可能是 1010,因为较小的值会被“转换”到与较大值相同的数量级,从而导致尾数丢失。 -大多数激活函数在[-1..1]附近具有非线性,因此将所有输入数据缩放到[-1..1]或[0..1]范围是有意义的。 +大多数激活函数在 [-1..1] 范围内具有非线性特性,因此将所有输入数据缩放到 [-1..1] 或 [0..1] 范围是有意义的。 ## 初始权重初始化 -理想情况下,我们希望在经过网络层后,值保持在相同的范围内。因此,以保持值的分布为目的初始化权重是很重要的。 +理想情况下,我们希望数值在通过网络层后仍保持在相同的范围内。因此,初始化权重时需要确保数值分布的保留。 -正态分布 **N(0,1)** 并不是一个好主意,因为如果我们有 *n* 个输入,输出的标准差将是 *n*,并且值很可能会超出[0..1]的范围。 +正态分布 **N(0,1)** 并不是一个好选择,因为如果我们有 *n* 个输入,输出的标准差将是 *n*,数值很可能会超出 [0..1] 的范围。 -以下初始化方法经常被使用: +以下是常用的初始化方法: - * 均匀分布 -- `uniform` - * **N(0,1/n)** -- `gaussian` - * **N(0,1/√n_in)** 确保对于均值为零且标准差为1的输入,均值/标准差保持不变 - * **N(0,√2/(n_in+n_out))** -- 所谓的 **Xavier 初始化** (`glorot`),它有助于在前向和反向传播过程中保持信号在范围内 +- 均匀分布 -- `uniform` +- **N(0,1/n)** -- `gaussian` +- **N(0,1/√n_in)** 保证对于均值为零、标准差为 1 的输入,输出的均值和标准差保持不变 +- **N(0,√2/(n_in+n_out))** -- 所谓的 **Xavier 初始化** (`glorot`),有助于在前向传播和反向传播中保持信号在合理范围内 -## 批归一化 +## 批量归一化 -即使在适当的权重初始化下,权重在训练过程中也可能变得任意大或小,这会将信号带出适当的范围。我们可以通过使用一种**归一化**技术来将信号恢复到适当范围。虽然有几种归一化方法(权重归一化、层归一化),但最常用的是批归一化。 +即使有了合适的权重初始化,训练过程中权重仍可能变得非常大或非常小,从而使信号超出合理范围。我们可以通过使用某种**归一化**技术将信号拉回合理范围。虽然有多种归一化方法(如权重归一化、层归一化),但最常用的是批量归一化。 -**批归一化**的思想是考虑小批量中的所有值,并基于这些值执行归一化(即减去均值并除以标准差)。它被实现为一个网络层,在应用权重之后但在激活函数之前执行这种归一化。结果,我们可能会看到更高的最终准确性和更快的训练速度。 +**批量归一化**的思想是考虑小批量中的所有数值,并基于这些数值进行归一化(即减去均值并除以标准差)。它被实现为一个网络层,在应用权重后但在激活函数之前进行归一化。结果是,我们通常会看到更高的最终准确率和更快的训练速度。 -这里是关于批归一化的[原始论文](https://arxiv.org/pdf/1502.03167.pdf)、[维基百科上的解释](https://en.wikipedia.org/wiki/Batch_normalization)以及[一篇很好的入门博客文章](https://towardsdatascience.com/batch-normalization-in-3-levels-of-understanding-14c2da90a338)(还有一篇[俄文](https://habrahabr.ru/post/309302/))。 +以下是关于批量归一化的[原始论文](https://arxiv.org/pdf/1502.03167.pdf)、[维基百科解释](https://en.wikipedia.org/wiki/Batch_normalization)以及[一篇很好的入门博客](https://towardsdatascience.com/batch-normalization-in-3-levels-of-understanding-14c2da90a338)(还有[俄文版](https://habrahabr.ru/post/309302/))。 -## 随机失活 +## Dropout -**随机失活**是一种有趣的技术,在训练过程中随机去除一定比例的神经元。它也被实现为一个层,具有一个参数(要去除的神经元百分比,通常为10%-50%),在训练过程中,它会将输入向量的随机元素置为零,然后传递到下一层。 +**Dropout** 是一种有趣的技术,它在训练过程中随机移除一定比例的神经元。它被实现为一个具有一个参数的层(移除神经元的百分比,通常为 10%-50%),在训练过程中,它会将输入向量的随机元素置零,然后再传递到下一层。 -虽然这听起来像是一个奇怪的想法,但您可以在 [`Dropout.ipynb`](../../../../../lessons/4-ComputerVision/08-TransferLearning/Dropout.ipynb) 笔记本中看到随机失活对训练 MNIST 数字分类器的影响。它加速了训练,并使我们在更少的训练轮次中实现更高的准确性。 +虽然这听起来像是一个奇怪的想法,但你可以在 [`Dropout.ipynb`](../../../../../lessons/4-ComputerVision/08-TransferLearning/Dropout.ipynb) 笔记本中看到 Dropout 对训练 MNIST 数字分类器的效果。它加速了训练,并使我们能够在更少的训练轮次中达到更高的准确率。 -这个效果可以通过几种方式解释: +这种效果可以通过以下几种方式解释: - * 它可以被视为对模型的随机冲击因素,帮助优化脱离局部最小值 - * 它可以被视为*隐式模型平均*,因为我们可以说在随机失活期间,我们正在训练稍微不同的模型 +- 它可以被认为是对模型的随机冲击因素,从而将优化从局部最小值中拉出 +- 它可以被视为*隐式模型平均化*,因为我们可以说在 Dropout 过程中我们训练了略有不同的模型 -> *有人说,当一个醉酒的人试图学习某些东西时,他会在第二天早上记住得更好,与一个清醒的人相比,因为一个有些神经元失常的大脑会更好地适应以抓住意义。我们从未测试过这是否属实* +> *有人说,当一个醉酒的人试图学习某些东西时,与清醒的人相比,他第二天早上会记得更清楚,因为一个有一些功能失常神经元的大脑会更努力地适应以抓住意义。我们自己从未验证过这是否属实。* ## 防止过拟合 -深度学习中一个非常重要的方面是能够防止[过拟合](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)。虽然使用非常强大的神经网络模型可能很诱人,但我们应该始终平衡模型参数的数量与训练样本的数量。 +深度学习中一个非常重要的方面是能够防止[过拟合](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)。虽然使用非常强大的神经网络模型可能很有吸引力,但我们应该始终平衡模型参数的数量与训练样本的数量。 -> 确保您理解我们之前介绍的[过拟合](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)的概念! +> 确保你理解我们之前介绍的[过拟合](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)概念! -防止过拟合的方法有几种: +以下是防止过拟合的几种方法: - * 提前停止 -- 持续监控验证集上的误差,并在验证误差开始增加时停止训练。 - * 显式权重衰减/正则化 -- 为损失函数中高绝对值的权重添加额外惩罚,以防止模型获得非常不稳定的结果 - * 模型平均 -- 训练多个模型,然后对结果进行平均。这有助于最小化方差。 - * 随机失活(隐式模型平均) +- 提前停止 -- 持续监控验证集上的误差,当验证误差开始增加时停止训练。 +- 显式权重衰减 / 正则化 -- 在损失函数中添加一个额外的惩罚项,用于限制权重的绝对值过大,从而防止模型产生非常不稳定的结果 +- 模型平均化 -- 训练多个模型,然后对结果进行平均。这有助于最小化方差。 +- Dropout(隐式模型平均化) -## 优化器/训练算法 +## 优化器 / 训练算法 -训练的另一个重要方面是选择合适的训练算法。虽然经典的**梯度下降**是一个合理的选择,但有时它可能太慢,或者导致其他问题。 +训练的另一个重要方面是选择合适的训练算法。虽然经典的**梯度下降**是一个合理的选择,但它有时可能过于缓慢,或者导致其他问题。 -在深度学习中,我们使用**随机梯度下降**(SGD),它是应用于从训练集中随机选择的小批量的梯度下降。权重使用以下公式进行调整: +在深度学习中,我们使用**随机梯度下降**(SGD),它是对从训练集中随机选择的小批量数据应用的梯度下降。权重通过以下公式调整: wt+1 = wt - η∇ℒ ### 动量 -在**动量 SGD**中,我们保留来自前一步的梯度的一部分。这类似于当我们以惯性移动时,如果受到另一个方向的冲击,我们的轨迹不会立即改变,而是保持一部分原始运动。在这里,我们引入另一个向量v来表示*速度*: +在**动量 SGD** 中,我们保留了前几步的部分梯度。这类似于当我们以惯性移动时,如果受到一个不同方向的冲击,我们的轨迹不会立即改变,而是保留了一部分原始运动。这里我们引入另一个向量 v 来表示*速度*: -* vt+1 = γ vt - η∇ℒ -* wt+1 = wt + vt+1 +- vt+1 = γ vt - η∇ℒ +- wt+1 = wt + vt+1 -这里参数γ表示我们考虑惯性的程度:γ=0对应于经典的SGD;γ=1是纯粹的运动方程。 +这里参数 γ 表示我们考虑惯性的程度:γ=0 对应于经典 SGD;γ=1 是一个纯粹的运动方程。 -### Adam, Adagrad等 +### Adam, Adagrad 等 -由于在每一层中我们将信号乘以某个矩阵Wi,根据||Wi||,梯度可能会减小并接近0,或者无限增加。这就是爆炸/消失梯度问题的本质。 +由于在每一层中我们将信号乘以某个矩阵 Wi,根据 ||Wi||,梯度可能会减小接近于 0,或者无限增大。这正是梯度爆炸/消失问题的本质。 -解决这个问题的一种方法是仅在方程中使用梯度的方向,而忽略绝对值,即: +解决此问题的一种方法是仅在公式中使用梯度的方向,而忽略其绝对值,即: wt+1 = wt - η(∇ℒ/||∇ℒ||),其中 ||∇ℒ|| = √∑(∇ℒ)2 -这个算法称为**Adagrad**。其他使用相同思想的算法有:**RMSProp**、**Adam** +这种算法被称为 **Adagrad**。其他使用相同思想的算法包括:**RMSProp**,**Adam** -> **Adam** 被认为是许多应用中非常高效的算法,因此如果您不确定使用哪个 - 请使用Adam。 +> **Adam** 被认为是许多应用中非常高效的算法,因此如果你不确定使用哪种算法,可以选择 Adam。 ### 梯度裁剪 -梯度裁剪是上述思想的扩展。当 ||∇ℒ|| ≤ θ 时,我们在权重优化中考虑原始梯度,而当 ||∇ℒ|| > θ 时 - 我们将梯度除以其范数。这里θ是一个参数,在大多数情况下我们可以取θ=1或θ=10。 +梯度裁剪是上述思想的扩展。当 ||∇ℒ|| ≤ θ 时,我们在权重优化中使用原始梯度;当 ||∇ℒ|| > θ 时,我们将梯度除以其范数。这里 θ 是一个参数,在大多数情况下我们可以取 θ=1 或 θ=10。 ### 学习率衰减 -训练的成功往往取决于学习率参数η。合理的推测是,较大的η值会导致更快的训练,这通常是我们在训练开始时想要的,然后较小的η值使我们能够微调网络。因此,在大多数情况下,我们希望在训练过程中降低η。 +训练的成功往往取决于学习率参数 η。可以合理地假设,较大的 η 值会导致更快的训练,这是我们通常在训练初期所希望的,而较小的 η 值则允许我们对网络进行微调。因此,在大多数情况下,我们希望在训练过程中逐渐减小 η。 -这可以通过在每个训练轮次后将η乘以某个数字(例如0.98)来完成,或者使用更复杂的**学习率调度**。 +这可以通过在每个训练轮次后将 η 乘以某个数(例如 0.98)来实现,或者使用更复杂的**学习率调度**。 ## 不同的网络架构 -为您的问题选择正确的网络架构可能很棘手。通常,我们会选择一种已经证明适用于我们特定任务(或类似任务)的架构。这里是关于计算机视觉的神经网络架构的[良好概述](https://www.topbots.com/a-brief-history-of-neural-network-architectures/)。 +为你的问题选择合适的网络架构可能会很棘手。通常,我们会选择一个已被证明适用于我们特定任务(或类似任务)的架构。这里有一个关于计算机视觉神经网络架构的[很好的概述](https://www.topbots.com/a-brief-history-of-neural-network-architectures/)。 -> 选择一个足够强大的架构以适应我们拥有的训练样本数量是很重要的。选择过于强大的模型可能会导致[过拟合](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)。 +> 选择一个足够强大的架构来匹配我们拥有的训练样本数量是很重要的。选择过于强大的模型可能会导致[过拟合](../../3-NeuralNetworks/05-Frameworks/Overfitting.md)。 -另一种好的方法是使用一种可以自动调整到所需复杂度的架构。在某种程度上,**ResNet**架构和**Inception**是自我调整的。[有关计算机视觉架构的更多信息](../07-ConvNets/CNN_Architectures.md) +另一种好的方法是使用能够自动调整到所需复杂度的架构。在某种程度上,**ResNet** 架构和 **Inception** 是自适应的。[更多关于计算机视觉架构的信息](../07-ConvNets/CNN_Architectures.md) **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而导致的任何误解或错误解释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或误读承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/08-TransferLearning/lab/README.md b/translations/zh/lessons/4-ComputerVision/08-TransferLearning/lab/README.md index 1e798d8c..6109fdc3 100644 --- a/translations/zh/lessons/4-ComputerVision/08-TransferLearning/lab/README.md +++ b/translations/zh/lessons/4-ComputerVision/08-TransferLearning/lab/README.md @@ -1,14 +1,23 @@ + # 使用迁移学习对牛津宠物进行分类 -来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验作业。 +来自 [AI 初学者课程](https://github.com/microsoft/ai-for-beginners) 的实验任务。 ## 任务 -想象一下,您需要开发一个宠物托儿所的应用程序来 catalog 所有宠物。这样一个应用程序的一个重要功能将是自动从照片中识别宠物的品种。在这个作业中,我们将使用迁移学习来对来自 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 宠物数据集的真实宠物图像进行分类。 +想象一下,你需要为一家宠物托管中心开发一个应用程序,用来记录所有的宠物。这样的应用程序一个很棒的功能就是能够通过照片自动识别宠物的品种。在本次任务中,我们将使用迁移学习对 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 宠物数据集中的真实宠物图片进行分类。 ## 数据集 -我们将使用原始的 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 宠物数据集,该数据集包含 35 种不同品种的狗和猫。 +我们将使用原始的 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 宠物数据集,该数据集包含 35 种不同品种的猫和狗。 要下载数据集,请使用以下代码片段: @@ -18,13 +27,13 @@ !rm images.tar.gz ``` -## 启动笔记本 +## 启动 Notebook 通过打开 [OxfordPets.ipynb](../../../../../../lessons/4-ComputerVision/08-TransferLearning/lab/OxfordPets.ipynb) 开始实验。 ## 收获 -迁移学习和预训练网络使我们能够相对轻松地解决现实世界的图像分类问题。然而,预训练网络在相似类型的图像上效果良好,如果我们开始对非常不同的图像(例如医学图像)进行分类,结果可能会大大降低。 +迁移学习和预训练网络使我们能够相对轻松地解决现实世界中的图像分类问题。然而,预训练网络在处理相似类型的图像时效果较好,如果我们开始分类非常不同的图像(例如医学图像),结果可能会大打折扣。 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/09-Autoencoders/README.md b/translations/zh/lessons/4-ComputerVision/09-Autoencoders/README.md index 3ef8e75d..f8413d4c 100644 --- a/translations/zh/lessons/4-ComputerVision/09-Autoencoders/README.md +++ b/translations/zh/lessons/4-ComputerVision/09-Autoencoders/README.md @@ -1,100 +1,109 @@ + # 自编码器 -在训练卷积神经网络(CNN)时,我们面临的一个问题是需要大量的标记数据。在图像分类的情况下,我们需要将图像分成不同的类别,这是一项手动的工作。 +在训练 CNN 时,一个主要问题是我们需要大量的标注数据。以图像分类为例,我们需要将图像分成不同的类别,这通常需要手动完成。 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/109) -然而,我们可能希望使用原始(未标记)数据来训练CNN特征提取器,这被称为**自监督学习**。我们将使用训练图像作为网络的输入和输出,而不是标签。**自编码器**的主要思想是,我们将有一个**编码器网络**,将输入图像转换为某种**潜在空间**(通常只是一个较小尺寸的向量),然后是**解码器网络**,其目标是重构原始图像。 +然而,我们可能希望使用原始(未标注的)数据来训练 CNN 的特征提取器,这被称为**自监督学习**。在这种情况下,我们不使用标签,而是将训练图像同时作为网络的输入和输出。**自编码器**的核心思想是,我们会有一个**编码器网络**,将输入图像转换为某种**潜在空间**(通常是一个较小尺寸的向量),然后通过**解码器网络**来重建原始图像。 -> ✅ 一个[自编码器](https://wikipedia.org/wiki/Autoencoder)是“用于学习未标记数据的有效编码的一种人工神经网络”。 +> ✅ 一个[自编码器](https://wikipedia.org/wiki/Autoencoder)是“一种用于学习未标注数据高效编码的人工神经网络。” -由于我们正在训练自编码器以尽可能多地捕获原始图像的信息以实现准确的重构,因此网络试图找到输入图像的最佳**嵌入**以捕获其含义。 +由于我们训练自编码器的目标是尽可能多地捕获原始图像的信息以实现精确重建,网络会尝试找到输入图像的最佳**嵌入**来捕捉其意义。 ![自编码器示意图](../../../../../translated_images/autoencoder_schema.5e6fc9ad98a5eb6197f3513cf3baf4dfbe1389a6ae74daebda64de9f1c99f142.zh.jpg) -> 图片来源于[Keras博客](https://blog.keras.io/building-autoencoders-in-keras.html) +> 图片来源:[Keras 博客](https://blog.keras.io/building-autoencoders-in-keras.html) -## 使用自编码器的场景 +## 自编码器的应用场景 -虽然重构原始图像本身似乎没有什么用处,但在一些场景中,自编码器尤其有用: +虽然重建原始图像本身看似没有直接用途,但在以下场景中,自编码器非常有用: -* **降低图像维度以进行可视化**或**训练图像嵌入**。通常,自编码器的结果优于主成分分析(PCA),因为它考虑了图像的空间特性和层次特征。 -* **去噪**,即从图像中去除噪声。由于噪声携带了很多无用的信息,自编码器无法将其全部适应于相对较小的潜在空间,因此它只捕获图像的重要部分。在训练去噪器时,我们从原始图像开始,并使用人为添加噪声的图像作为自编码器的输入。 -* **超分辨率**,提高图像分辨率。我们从高分辨率图像开始,并使用较低分辨率的图像作为自编码器的输入。 -* **生成模型**。一旦我们训练了自编码器,解码器部分可以用来从随机潜在向量创建新对象。 +* **降低图像维度以便可视化**或**训练图像嵌入**。通常,自编码器比 PCA(主成分分析)效果更好,因为它考虑了图像的空间特性和层次特征。 +* **去噪**,即从图像中去除噪声。由于噪声包含了大量无用信息,自编码器无法将所有噪声压缩到相对较小的潜在空间中,因此它只捕获图像的重要部分。在训练去噪器时,我们以原始图像为目标,并将带有人工添加噪声的图像作为自编码器的输入。 +* **超分辨率**,即提高图像分辨率。我们以高分辨率图像为目标,并将低分辨率图像作为自编码器的输入。 +* **生成模型**。一旦训练好自编码器,解码器部分可以用来从随机潜在向量生成新对象。 -## 变分自编码器(VAE) +## 变分自编码器 (VAE) -传统自编码器以某种方式减少输入数据的维度,找出输入图像的重要特征。然而,潜在向量往往没有太大意义。换句话说,以MNIST数据集为例,确定哪些数字对应于不同的潜在向量并不是一项简单的任务,因为相近的潜在向量不一定对应于相同的数字。 +传统的自编码器通过某种方式降低输入数据的维度,提取输入图像的重要特征。然而,潜在向量通常没有太多意义。换句话说,以 MNIST 数据集为例,确定哪些数字对应于不同的潜在向量并不容易,因为相近的潜在向量不一定对应于相同的数字。 -另一方面,为了训练*生成*模型,最好对潜在空间有一些理解。这一思想引导我们到**变分自编码器**(VAE)。 +另一方面,对于训练**生成模型**,理解潜在空间会更有帮助。这一想法引出了**变分自编码器**(VAE)。 -VAE是学习预测潜在参数的*统计分布*的自编码器,即所谓的**潜在分布**。例如,我们可能希望潜在向量以某个均值 zmean 和标准差 zsigma 正常分布(均值和标准差都是某个维度 d 的向量)。VAE中的编码器学习预测这些参数,然后解码器从该分布中提取一个随机向量以重构对象。 +VAE 是一种学习预测潜在参数**统计分布**的自编码器,称为**潜在分布**。例如,我们可能希望潜在向量服从某种正态分布,其均值为 zmean,标准差为 zsigma(均值和标准差都是某个维度 d 的向量)。VAE 的编码器学习预测这些参数,然后解码器从该分布中随机采样一个向量以重建对象。 -总结: +总结如下: -* 从输入向量,我们预测 `z_mean` 和 `z_log_sigma` (而不是直接预测标准差本身,我们预测其对数) -* 我们从分布 N(zmean,exp(zlog\_sigma)) 中采样一个向量 `sample` -* 解码器尝试使用 `sample` 作为输入向量来解码原始图像 +* 从输入向量预测 `z_mean` 和 `z_log_sigma`(我们预测的是标准差的对数而不是标准差本身) +* 从分布 N(zmean,exp(zlog_sigma)) 中采样一个向量 `sample` +* 解码器尝试使用 `sample` 作为输入向量解码原始图像 -> 图片来自[这篇博客文章](https://ijdykeman.github.io/ml/2016/12/21/cvae.html),作者为Isaak Dykeman +> 图片来源:[这篇博客](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) by Isaak Dykeman -变分自编码器使用一个复杂的损失函数,由两个部分组成: +变分自编码器使用一个复杂的损失函数,由两部分组成: -* **重构损失**是显示重构图像与目标图像接近程度的损失函数(可以是均方误差,或MSE)。它与普通自编码器中的损失函数相同。 -* **KL损失**,确保潜在变量分布接近于正态分布。它基于[Kullback-Leibler散度](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained)的概念 - 一种估计两个统计分布相似度的度量。 +* **重建损失**:衡量重建图像与目标图像的接近程度(可以是均方误差 MSE)。这与普通自编码器的损失函数相同。 +* **KL 损失**:确保潜在变量分布接近正态分布。它基于[KL 散度](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained)的概念——一种衡量两个统计分布相似程度的指标。 -VAE的一个重要优势是它们相对容易生成新图像,因为我们知道从哪个分布中采样潜在向量。例如,如果我们在MNIST上用二维潜在向量训练VAE,我们可以变更潜在向量的各个分量以获取不同的数字: +VAE 的一个重要优势是它可以相对容易地生成新图像,因为我们知道从哪个分布中采样潜在向量。例如,如果我们用 2D 潜在向量在 MNIST 上训练 VAE,我们可以通过调整潜在向量的分量生成不同的数字: vaemnist -> 图片由[Dmitry Soshnikov](http://soshnikov.com)提供 +> 图片来源:[Dmitry Soshnikov](http://soshnikov.com) -观察到图像如何相互融合,因为我们开始从潜在参数空间的不同部分获取潜在向量。我们还可以在二维中可视化这个空间: +观察图像如何相互融合,当我们从潜在参数空间的不同部分获取潜在向量时,可以看到这种变化。我们还可以将这个空间可视化为二维图: vaemnist cluster -> 图片由[Dmitry Soshnikov](http://soshnikov.com)提供 +> 图片来源:[Dmitry Soshnikov](http://soshnikov.com) ## ✍️ 练习:自编码器 -在这些相应的笔记本中了解更多关于自编码器的信息: +通过以下笔记本进一步了解自编码器: -* [TensorFlow中的自编码器](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) -* [PyTorch中的自编码器](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) +* [TensorFlow 中的自编码器](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb) +* [PyTorch 中的自编码器](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb) -## 自编码器的属性 +## 自编码器的特性 -* **数据特定** - 它们仅在训练过的图像类型上表现良好。例如,如果我们在花卉上训练一个超分辨率网络,它在肖像上效果不好。这是因为网络可以通过从训练数据集中学习的特征中提取细节来生成更高分辨率的图像。 -* **有损** - 重构图像与原始图像并不相同。损失的性质由训练过程中使用的*损失函数*定义。 -* 适用于**未标记数据** +* **数据特定性** - 它们只对训练时使用的图像类型效果良好。例如,如果我们在花卉图像上训练一个超分辨率网络,它在肖像图像上效果可能不好。这是因为网络通过从训练数据集中学习的特征中提取细节来生成高分辨率图像。 +* **有损性** - 重建的图像与原始图像并不完全相同。损失的性质由训练时使用的*损失函数*决定。 +* 适用于**未标注数据** ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/209) -## 结论 +## 总结 -在本节课中,您了解了可供AI科学家使用的各种类型的自编码器。您学习了如何构建它们,以及如何使用它们来重构图像。您还了解了VAE以及如何使用它生成新图像。 +在本课中,你学习了 AI 科学家可用的各种类型的自编码器。你学习了如何构建它们,以及如何使用它们重建图像。你还学习了 VAE 以及如何使用它生成新图像。 ## 🚀 挑战 -在本节课中,您了解了使用自编码器处理图像。但它们也可以用于音乐!查看Magenta项目的[MusicVAE](https://magenta.tensorflow.org/music-vae)项目,该项目使用自编码器学习重构音乐。与这个库进行一些[实验](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb),看看您能创造出什么。 +在本课中,你学习了如何将自编码器用于图像。但它们也可以用于音乐!查看 Magenta 项目的 [MusicVAE](https://magenta.tensorflow.org/music-vae) 项目,该项目使用自编码器学习重建音乐。通过[实验](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb)这个库,看看你能创造出什么。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) ## 复习与自学 -作为参考,阅读这些资源以了解更多关于自编码器的信息: +参考以下资源,进一步了解自编码器: -* [在Keras中构建自编码器](https://blog.keras.io/building-autoencoders-in-keras.html) -* [关于NeuroHive的博客文章](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/) -* [变分自编码器解释](https://kvfrans.com/variational-autoencoders-explained/) +* [在 Keras 中构建自编码器](https://blog.keras.io/building-autoencoders-in-keras.html) +* [NeuroHive 博客文章](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/) +* [变分自编码器详解](https://kvfrans.com/variational-autoencoders-explained/) * [条件变分自编码器](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) ## 作业 -在[这个使用TensorFlow的笔记本](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb)的最后,您会找到一个“任务” - 将其作为您的作业。 +在 [这个使用 TensorFlow 的笔记本](../../../../../lessons/4-ComputerVision/09-Autoencoders/AutoencodersTF.ipynb)的末尾,你会找到一个“任务”——将其作为你的作业完成。 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业的人类翻译。我们对因使用本翻译而产生的任何误解或误读不承担任何责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/10-GANs/README.md b/translations/zh/lessons/4-ComputerVision/10-GANs/README.md index 5274729c..b1fcd42f 100644 --- a/translations/zh/lessons/4-ComputerVision/10-GANs/README.md +++ b/translations/zh/lessons/4-ComputerVision/10-GANs/README.md @@ -1,51 +1,60 @@ + # 生成对抗网络 -在上一节中,我们学习了**生成模型**:能够生成与训练数据集中图像相似的新图像的模型。变分自编码器(VAE)是一个很好的生成模型示例。 +在上一节中,我们学习了**生成模型**:可以生成与训练数据集中的图像相似的新图像的模型。VAE是生成模型的一个很好的例子。 -## [课前小测](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/110) +## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/110) -然而,如果我们尝试使用VAE生成一些真正有意义的东西,比如一幅合理分辨率的画作,我们会发现训练并没有很好地收敛。对于这个用例,我们应该学习另一种专门针对生成模型的架构——**生成对抗网络**,或称GAN。 +然而,如果我们尝试生成一些真正有意义的东西,比如一幅分辨率合理的画作,用VAE进行训练时会发现训练效果并不理想。针对这种情况,我们需要学习一种专门用于生成模型的架构——**生成对抗网络**,简称GAN。 -GAN的主要思想是有两个神经网络彼此对抗训练: +GAN的核心思想是使用两个神经网络相互对抗进行训练: > 图片来源:[Dmitry Soshnikov](http://soshnikov.com) -> ✅ 一些词汇: -> * **生成器**是一个网络,它接收一些随机向量,并生成相应的图像。 -> * **判别器**是一个网络,它接收一幅图像,并应判断该图像是否为真实图像(来自训练数据集),或者是由生成器生成的。它本质上是一个图像分类器。 +> ✅ 一些术语: +> * **生成器**是一个网络,它接收一个随机向量,并生成图像作为输出。 +> * **判别器**是一个网络,它接收图像并判断该图像是真实图像(来自训练数据集)还是由生成器生成的图像。它本质上是一个图像分类器。 ### 判别器 -判别器的架构与普通的图像分类网络没有区别。在最简单的情况下,它可以是一个全连接分类器,但更可能是一个[卷积网络](../07-ConvNets/README.md)。 +判别器的架构与普通的图像分类网络没有区别。最简单的情况下,它可以是一个全连接分类器,但更常见的是一个[卷积网络](../07-ConvNets/README.md)。 -> ✅ 基于卷积网络的GAN称为[DCGAN](https://arxiv.org/pdf/1511.06434.pdf) +> ✅ 基于卷积网络的GAN被称为[DCGAN](https://arxiv.org/pdf/1511.06434.pdf) -CNN判别器由以下层组成:若干卷积+池化层(空间大小逐渐减小),以及一个或多个全连接层以获得“特征向量”,最终形成二分类器。 +一个CNN判别器由以下层组成:多个卷积+池化层(空间尺寸逐渐减小),以及一个或多个全连接层以生成“特征向量”,最后是一个二分类器。 -> ✅ 在这个上下文中,'池化'是一种减少图像大小的技术。“池化层通过将一层中神经元集群的输出组合成下一层中的单个神经元来减少数据的维度。” - [来源](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers) +> ✅ 在这里,“池化”是一种减少图像尺寸的技术。“池化层通过将一个层中神经元簇的输出合并为下一层中的单个神经元来减少数据的维度。”——[来源](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers) ### 生成器 -生成器稍微复杂一些。可以将其视为一个反向判别器。它从一个潜在向量(替代特征向量)开始,具有一个全连接层将其转换为所需的大小/形状,然后是反卷积+上采样。这类似于[自编码器](../09-Autoencoders/README.md)的*解码器*部分。 +生成器稍微复杂一些。可以将其视为一个反向的判别器。从一个潜在向量(代替特征向量)开始,它通过一个全连接层将其转换为所需的尺寸/形状,然后进行反卷积+上采样。这类似于[自动编码器](../09-Autoencoders/README.md)的*解码器*部分。 -> ✅ 因为卷积层被实现为遍历图像的线性滤波器,反卷积本质上类似于卷积,可以使用相同的层逻辑实现。 +> ✅ 由于卷积层是通过线性滤波器遍历图像实现的,反卷积本质上与卷积类似,可以使用相同的层逻辑实现。 > 图片来源:[Dmitry Soshnikov](http://soshnikov.com) -### 训练GAN +### GAN的训练 -GAN被称为**对抗性**,因为生成器和判别器之间存在持续的竞争。在这种竞争中,生成器和判别器都在改进,因此网络学习生成越来越好的图像。 +GAN之所以被称为**对抗网络**,是因为生成器和判别器之间存在持续的竞争。在这种竞争中,生成器和判别器都会不断改进,从而使网络能够生成越来越好的图像。 训练分为两个阶段: -* **训练判别器**。这个任务相对简单:我们通过生成器生成一批图像,标记为0,表示假图像,然后从输入数据集中提取一批图像(标记为1,真实图像)。我们获得一些*判别器损失*,并进行反向传播。 -* **训练生成器**。这稍微复杂一些,因为我们并不知道生成器的期望输出。我们将整个GAN网络(由生成器和判别器组成)输入一些随机向量,期望结果为1(对应真实图像)。然后我们冻结判别器的参数(在此步骤中我们不希望它被训练),并进行反向传播。 +* **训练判别器**。这个任务相对简单:我们通过生成器生成一批图像,将其标记为0(表示假图像),然后从输入数据集中取一批图像(标记为1,表示真实图像)。我们计算出一些*判别器损失*,然后进行反向传播。 +* **训练生成器**。这个过程稍微复杂一些,因为我们无法直接知道生成器的期望输出。我们将整个GAN网络(包括生成器和判别器)作为一个整体,用随机向量进行输入,并期望输出为1(对应真实图像)。然后我们冻结判别器的参数(此步骤不对判别器进行训练),并进行反向传播。 -在此过程中,生成器和判别器的损失并没有显著下降。在理想情况下,它们应该会震荡,表明两个网络都在提高性能。 +在这个过程中,生成器和判别器的损失不会显著下降。在理想情况下,它们应该呈现振荡状态,表明两个网络都在不断提高性能。 ## ✍️ 练习:GANs @@ -54,48 +63,48 @@ GAN被称为**对抗性**,因为生成器和判别器之间存在持续的竞 ### GAN训练中的问题 -众所周知,GAN的训练特别困难。以下是一些问题: +众所周知,GAN训练尤其困难。以下是一些常见问题: -* **模式崩溃**。这个术语指的是生成器学会生成一种成功的图像来欺骗判别器,而不是各种不同的图像。 -* **对超参数的敏感性**。你经常会看到GAN根本不收敛,然后突然在学习率下降时收敛。 -* 在生成器和判别器之间保持**平衡**。在许多情况下,判别器的损失可以相对快速地降至零,导致生成器无法继续训练。为了解决这个问题,我们可以尝试为生成器和判别器设置不同的学习率,或者如果损失已经太低,则跳过判别器的训练。 -* 训练**高分辨率**图像。反映出与自编码器相同的问题,这个问题的发生是因为重构太多卷积网络层会导致伪影。通常通过所谓的**渐进增长**来解决这个问题,首先在低分辨率图像上训练几层,然后“解锁”或添加层。另一个解决方案是在层之间添加额外的连接,并同时训练多个分辨率——有关详细信息,请参见这篇[多尺度梯度GAN论文](https://arxiv.org/abs/1903.06048)。 +* **模式崩塌**。指生成器学会生成一种成功欺骗判别器的图像,而不是生成多样化的图像。 +* **对超参数的敏感性**。经常会发现GAN完全无法收敛,然后突然降低学习率后开始收敛。 +* **保持生成器和判别器之间的平衡**。在许多情况下,判别器的损失可能会迅速降到零,这会导致生成器无法继续训练。为了解决这个问题,可以尝试为生成器和判别器设置不同的学习率,或者在判别器损失已经很低时跳过判别器的训练。 +* **高分辨率训练**。与自动编码器类似的问题,重建过多卷积网络层会导致伪影。通常通过所谓的**渐进式增长**来解决这一问题,先用低分辨率图像训练前几层,然后逐步“解锁”或添加层。另一种解决方案是增加层之间的额外连接,同时训练多个分辨率——详见这篇[多尺度梯度GAN论文](https://arxiv.org/abs/1903.06048)。 ## 风格迁移 -GAN是生成艺术图像的好方法。另一种有趣的技术是所谓的**风格迁移**,它将一幅**内容图像**重新绘制成不同的风格,应用来自**风格图像**的滤镜。 +GAN是生成艺术图像的绝佳工具。另一种有趣的技术是所谓的**风格迁移**,它将一个**内容图像**重新绘制为另一种风格,应用来自**风格图像**的滤镜。 其工作原理如下: -* 我们从一幅随机噪声图像开始(或从一幅内容图像开始,但为了理解,从随机噪声开始更容易)。 -* 我们的目标是创建一幅图像,使其接近内容图像和风格图像。这将由两个损失函数来决定: - - **内容损失**是基于CNN在某些层从当前图像和内容图像提取的特征计算的。 - - **风格损失**是以一种巧妙的方式计算当前图像和风格图像之间的关系,使用Gram矩阵(更多细节见[示例笔记本](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb))。 -* 为了使图像更平滑并去除噪声,我们还引入**变异损失**,计算相邻像素之间的平均距离。 -* 主要优化循环使用梯度下降(或其他优化算法)调整当前图像,以最小化总损失,该损失是所有三种损失的加权和。 +* 我们从一个随机噪声图像开始(或者从内容图像开始,但为了便于理解,通常从随机噪声开始)。 +* 我们的目标是生成一个同时接近内容图像和风格图像的图像。这通过两个损失函数来确定: + - **内容损失**基于CNN在某些层从当前图像和内容图像中提取的特征计算。 + - **风格损失**通过一种巧妙的方法使用Gram矩阵在当前图像和风格图像之间计算(更多细节见[示例笔记本](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb))。 +* 为了使图像更平滑并去除噪声,我们还引入了**变化损失**,它计算相邻像素之间的平均距离。 +* 主要的优化循环使用梯度下降(或其他优化算法)调整当前图像以最小化总损失,总损失是所有三种损失的加权和。 ## ✍️ 示例:[风格迁移](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb) -## [课后小测](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/210) +## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/210) -## 结论 +## 总结 -在本课中,您学习了GAN及其训练方法。您还了解了这种类型的神经网络可能面临的特殊挑战,以及一些应对这些挑战的策略。 +在本课中,你学习了GAN及其训练方法。你还了解了这种类型的神经网络可能面临的特殊挑战,以及一些解决这些问题的策略。 ## 🚀 挑战 -使用您自己的图像运行[风格迁移笔记本](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb)。 +运行[风格迁移笔记本](../../../../../lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb),使用你自己的图像进行实验。 ## 复习与自学 -作为参考,您可以在以下资源中进一步了解GAN: +参考以下资源,了解更多关于GAN的信息: -* Marco Pasini,[我在训练GAN一年中学到的10课](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628) -* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN),一个*事实上的* GAN架构值得考虑 +* Marco Pasini,[我在训练GAN一年中学到的10个经验](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628) +* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN),一个值得关注的*事实上的*GAN架构 * [在Azure ML上使用GAN创建生成艺术](https://soshnikov.com/scienceart/creating-generative-art-using-gan-on-azureml/) ## 作业 -重新访问与本课相关的两个笔记本之一,并在您自己的图像上重新训练GAN。您能创造出什么? +重新访问本课相关的两个笔记本之一,并使用你自己的图像重新训练GAN。你能创造出什么? **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/11-ObjectDetection/README.md b/translations/zh/lessons/4-ComputerVision/11-ObjectDetection/README.md index c8efce24..126305dd 100644 --- a/translations/zh/lessons/4-ComputerVision/11-ObjectDetection/README.md +++ b/translations/zh/lessons/4-ComputerVision/11-ObjectDetection/README.md @@ -1,63 +1,74 @@ -### 物体检测 + +# 目标检测 -到目前为止,我们处理的图像分类模型接收一张图像并生成一个分类结果,例如在 MNIST 问题中的 'number' 类别。然而,在许多情况下,我们不仅想知道一张图片描绘了哪些物体 - 我们希望能够确定它们的精确位置。这正是 **物体检测** 的意义所在。 +我们之前讨论的图像分类模型通常会接收一张图片并输出一个类别结果,例如在 MNIST 问题中输出类别“数字”。然而,在许多情况下,我们不仅仅想知道图片中是否有物体——我们还希望能够确定它们的具体位置。这正是**目标检测**的核心所在。 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/111) -![物体检测](../../../../../translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.zh.png) +![目标检测](../../../../../translated_images/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be1b905373ed9c858102c054b16e4595c76ec3f7bba0feb549.zh.png) -> 图片来自 [YOLO v2 网站](https://pjreddie.com/darknet/yolov2/) +> 图片来源:[YOLO v2 网站](https://pjreddie.com/darknet/yolov2/) -## 一种简单的物体检测方法 +## 一种简单的目标检测方法 -假设我们想在一张图片中找到一只猫,一种非常简单的物体检测方法如下: +假设我们想在一张图片中找到一只猫,一种非常简单的目标检测方法可能是: -1. 将图片分解为多个瓦片 -2. 对每个瓦片进行图像分类。 -3. 结果激活值足够高的瓦片可以认为包含了所需的物体。 +1. 将图片分割成多个小块。 +2. 对每个小块进行图像分类。 +3. 对于分类结果激活值足够高的小块,可以认为其中包含目标物体。 -![简单物体检测](../../../../../translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.zh.png) +![简单目标检测](../../../../../translated_images/naive-detection.e7f1ba220ccd08c68a2ea8e06a7ed75c3fcc738c2372f9e00b7f4299a8659c01.zh.png) -> *图片来自 [练习笔记本](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection-TF.ipynb)* +> *图片来源:[练习笔记本](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection-TF.ipynb)* -然而,这种方法远非理想,因为它只能让算法非常不精确地定位物体的边界框。为了更精确地定位,我们需要运行某种 **回归** 来预测边界框的坐标 - 为此,我们需要特定的数据集。 +然而,这种方法远非理想,因为它只能非常粗略地定位物体的边界框。为了更精确地定位,我们需要进行某种**回归**来预测边界框的坐标——这需要特定的数据集。 -## 物体检测的回归 +## 用回归进行目标检测 -[这篇博客文章](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491)对检测形状有很好的入门介绍。 +[这篇博客文章](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491)对目标检测中的形状识别进行了很好的入门介绍。 -## 物体检测的数据集 +## 目标检测数据集 -您可能会遇到以下数据集用于此任务: +在进行目标检测任务时,你可能会遇到以下数据集: -* [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 20 个类别 -* [COCO](http://cocodataset.org/#home) - 上下文中的常见物体。80 个类别,边界框和分割掩码 +* [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 包含 20 个类别 +* [COCO](http://cocodataset.org/#home) - 常见物体上下文数据集。包含 80 个类别,边界框和分割掩码 ![COCO](../../../../../translated_images/coco-examples.71bc60380fa6cceb7caad48bd09e35b6028caabd363aa04fee89c414e0870e86.zh.jpg) -## 物体检测指标 +## 目标检测评估指标 -### 交并比 +### 交并比(IoU) -虽然对于图像分类来说,衡量算法性能是简单的,但对于物体检测,我们需要同时衡量类别的正确性以及推断的边界框位置的精确度。对于后者,我们使用所谓的 **交并比** (IoU),它衡量两个框(或两个任意区域)重叠的程度。 +对于图像分类来说,评估算法性能相对简单;但对于目标检测,我们需要同时评估类别的正确性以及预测边界框位置的精确性。后者通常使用**交并比**(IoU)来衡量,即评估两个框(或任意两个区域)的重叠程度。 ![IoU](../../../../../translated_images/iou_equation.9a4751d40fff4e119ecd0a7bcca4e71ab1dc83e0d4f2a0d66ff0859736f593cf.zh.png) -> *图2来自 [这篇关于 IoU 的优秀博客文章](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)* +> *图片来源:[这篇关于 IoU 的优秀博客文章](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)* -这个概念很简单 - 我们将两个图形之间的交集面积除以它们的并集面积。对于两个相同的区域,IoU 将为 1,而对于完全不相交的区域,IoU 将为 0。否则,它将介于 0 和 1 之间。我们通常只考虑那些 IoU 超过某个值的边界框。 +其思想很简单——将两个图形的交集面积除以它们的并集面积。对于两个完全相同的区域,IoU 值为 1;对于完全不相交的区域,IoU 值为 0。其他情况下,IoU 值介于 0 到 1 之间。通常我们只考虑 IoU 超过某个阈值的边界框。 -### 平均精度 +### 平均精度(AP) -假设我们想衡量给定物体类别 $C$ 的识别效果。为了进行测量,我们使用 **平均精度** 指标,其计算方法如下: +假设我们想评估某个类别 $C$ 的识别效果。为此,我们使用**平均精度**(AP)指标,其计算方法如下: -1. 考虑精度-召回曲线,显示准确度取决于检测阈值(从 0 到 1)。 -2. 根据阈值,我们将检测到的物体数量有所不同,精度和召回值也会不同。 -3. 曲线将呈现如下形状: +1. 考虑精度-召回曲线,该曲线显示检测阈值(从 0 到 1)变化时的准确性。 +2. 根据阈值,我们会检测到图片中的更多或更少的物体,并得到不同的精度和召回值。 +3. 曲线如下所示: -> *图片来自 [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + -给定类别 $C$ 的平均精度是该曲线下的面积。更准确地说,召回轴通常被分为 10 个部分,精度在所有这些点上进行平均: +> *图片来源:[NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + +某类别 $C$ 的平均精度是该曲线下的面积。更具体地说,召回轴通常分为 10 个部分,精度在这些点上取平均值: $$ AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10}) @@ -65,109 +76,113 @@ $$ ### AP 和 IoU -我们只考虑那些 IoU 超过某个值的检测。例如,在 PASCAL VOC 数据集中,通常假设 $\mbox{IoU Threshold} = 0.5$,而在 COCO 中,AP 是针对不同的 $\mbox{IoU Threshold}$ 值进行测量的。 +我们只考虑 IoU 超过某个阈值的检测。例如,在 PASCAL VOC 数据集中通常假设 $\mbox{IoU Threshold} = 0.5$,而在 COCO 数据集中,AP 是针对不同的 $\mbox{IoU Threshold}$ 值计算的。 -> *图片来自 [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* + -### 平均平均精度 - mAP +> *图片来源:[NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)* -物体检测的主要指标称为 **平均平均精度**,或 **mAP**。它是所有物体类别的平均精度的值,有时也会在 $\mbox{IoU Threshold}$ 上进行平均。更详细地说,计算 **mAP** 的过程在 [这篇博客文章](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3) 中有描述,此外 [这里还有代码示例](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734)。 +### 平均平均精度(mAP) -## 不同的物体检测方法 +目标检测的主要评估指标是**平均平均精度**(mAP)。它是所有类别的平均精度值,有时也包括不同的 $\mbox{IoU Threshold}$。关于**mAP**的详细计算过程可以参考 +[这篇博客文章](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3),以及[这里的代码示例](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734)。 -物体检测算法大致分为两类: +## 不同的目标检测方法 -* **区域提议网络** (R-CNN, Fast R-CNN, Faster R-CNN)。其主要思想是生成 **兴趣区域** (ROI),并在其上运行 CNN,寻找最大激活。它有点类似于简单的方法,唯一的区别是 ROI 是以更聪明的方式生成的。这种方法的一个主要缺点是速度较慢,因为我们需要对图像进行多次 CNN 分类器的传递。 -* **一次性** (YOLO, SSD, RetinaNet) 方法。在这些架构中,我们设计网络以在一次传递中同时预测类别和 ROI。 +目标检测算法主要分为两大类: + +* **区域提议网络**(R-CNN、Fast R-CNN、Faster R-CNN)。其核心思想是生成**兴趣区域**(ROI),并对其运行 CNN,寻找最大激活值。这种方法与简单方法类似,但 ROI 的生成方式更为智能。此类方法的主要缺点是速度较慢,因为需要对图像进行多次 CNN 分类。 +* **单次检测**(YOLO、SSD、RetinaNet)方法。这些架构设计为在一次网络运行中同时预测类别和 ROI。 ### R-CNN:基于区域的 CNN -[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf) 使用 [选择性搜索](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf) 生成 ROI 区域的层次结构,这些区域随后通过 CNN 特征提取器和 SVM 分类器进行处理,以确定物体类别,并通过线性回归确定 *边界框* 坐标。[官方论文](https://arxiv.org/pdf/1506.01497v1.pdf) +[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf) 使用[选择性搜索](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf)生成 ROI 区域的层次结构,然后通过 CNN 特征提取器和 SVM 分类器确定物体类别,并通过线性回归确定*边界框*坐标。[官方论文](https://arxiv.org/pdf/1506.01497v1.pdf) ![RCNN](../../../../../translated_images/rcnn1.cae407020dfb1d1fb572656e44f75cd6c512cc220591c116c506652c10e47f26.zh.png) -> *图片来自 van de Sande 等人 ICCV’11* +> *图片来源:van de Sande 等人 ICCV’11* ![RCNN-1](../../../../../translated_images/rcnn2.2d9530bb83516484ec65b250c22dbf37d3d23244f32864ebcb91d98fe7c3112c.zh.png) -> *图片来自 [这篇博客](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e)* +> *图片来源:[这篇博客](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e)* ### F-RCNN - 快速 R-CNN -这种方法类似于 R-CNN,但在应用卷积层之后定义区域。 +这种方法与 R-CNN 类似,但区域是在应用卷积层之后定义的。 ![FRCNN](../../../../../translated_images/f-rcnn.3cda6d9bb41888754037d2d9763e2298a96de5d9bc2a21db3147357aa5da9b1a.zh.png) -> 图片来自 [官方论文](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf),[arXiv](https://arxiv.org/pdf/1504.08083.pdf),2015 +> 图片来源:[官方论文](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf),[arXiv](https://arxiv.org/pdf/1504.08083.pdf),2015 ### Faster R-CNN -这种方法的主要思想是使用神经网络来预测 ROI - 所谓的 *区域提议网络*。[论文](https://arxiv.org/pdf/1506.01497.pdf),2016 +这种方法的核心思想是使用神经网络预测 ROI,即所谓的*区域提议网络*。[论文](https://arxiv.org/pdf/1506.01497.pdf),2016 ![FasterRCNN](../../../../../translated_images/faster-rcnn.8d46c099b87ef30ab2ea26dbc4bdd85b974a57ba8eb526f65dc4cd0a4711de30.zh.png) -> 图片来自 [官方论文](https://arxiv.org/pdf/1506.01497.pdf) +> 图片来源:[官方论文](https://arxiv.org/pdf/1506.01497.pdf) ### R-FCN:基于区域的全卷积网络 -该算法比 Faster R-CNN 更快。其主要思想如下: +这种算法比 Faster R-CNN 更快。其核心思想如下: -1. 使用 ResNet-101 提取特征 -1. 特征通过 **位置敏感得分图** 进行处理。每个 $C$ 类别的物体被划分为 $k\times k$ 区域,我们训练以预测物体的部分。 -1. 对于每个 $k\times k$ 区域,所有网络对物体类别进行投票,选择得票最多的物体类别。 +1. 使用 ResNet-101 提取特征。 +2. 特征通过**位置敏感得分图**处理。每个类别 $C$ 的物体被划分为 $k\times k$ 区域,并训练预测物体的各部分。 +3. 对于 $k\times k$ 区域的每个部分,所有网络对物体类别进行投票,选择得票最多的类别。 ![r-fcn image](../../../../../translated_images/r-fcn.13eb88158b99a3da50fa2787a6be5cb310d47f0e9655cc93a1090dc7aab338d1.zh.png) -> 图片来自 [官方论文](https://arxiv.org/abs/1605.06409) +> 图片来源:[官方论文](https://arxiv.org/abs/1605.06409) -### YOLO - 你只看一次 +### YOLO - 你只需看一次 -YOLO 是一种实时的一次性算法。其主要思想如下: +YOLO 是一种实时单次检测算法。其核心思想如下: - * 将图像划分为 $S\times S$ 区域 - * 对于每个区域,**CNN** 预测 $n$ 个可能的物体、*边界框* 坐标和 *置信度*=*概率* * IoU。 + * 将图像划分为 $S\times S$ 区域。 + * 对每个区域,**CNN** 预测 $n$ 个可能的物体、*边界框*坐标和*置信度*=*概率* * IoU。 ![YOLO](../../../../../translated_images/yolo.a2648ec82ee8bb4ea27537677adb482fd4b733ca1705c561b6a24a85102dced5.zh.png) -> 图片来自 [官方论文](https://arxiv.org/abs/1506.02640) + +> 图片来源:[官方论文](https://arxiv.org/abs/1506.02640) ### 其他算法 * RetinaNet: [官方论文](https://arxiv.org/abs/1708.02002) - - [PyTorch 在 Torchvision 中的实现](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) + - [PyTorch 实现(Torchvision)](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) - [Keras 实现](https://github.com/fizyr/keras-retinanet) - - [使用 RetinaNet 的目标检测](https://keras.io/examples/vision/retinanet/) 在 Keras 示例中 -* SSD(单次检测器): [官方论文](https://arxiv.org/abs/1512.02325) + - [Keras 示例中的 RetinaNet 目标检测](https://keras.io/examples/vision/retinanet/) +* SSD(单次检测器):[官方论文](https://arxiv.org/abs/1512.02325) ## ✍️ 练习:目标检测 -在以下笔记本中继续学习: +通过以下笔记本继续学习: [ObjectDetection.ipynb](../../../../../lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb) -## 结论 +## 总结 -在本节课中,你快速浏览了实现目标检测的各种方法! +在本课中,你快速了解了实现目标检测的各种方法! ## 🚀 挑战 -阅读这些关于 YOLO 的文章和笔记本,并亲自尝试 +阅读以下关于 YOLO 的文章和笔记本,并尝试自己动手实践: -* [一篇好的博客文章](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/) 描述了 YOLO +* [优秀博客文章](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/)介绍 YOLO * [官方网站](https://pjreddie.com/darknet/yolo/) - * Yolo: [Keras 实现](https://github.com/experiencor/keras-yolo2),[逐步笔记本](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb) - * Yolo v2: [Keras 实现](https://github.com/experiencor/keras-yolo2),[逐步笔记本](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb) + * YOLO:[Keras 实现](https://github.com/experiencor/keras-yolo2),[逐步笔记本](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb) + * YOLO v2:[Keras 实现](https://github.com/experiencor/keras-yolo2),[逐步笔记本](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb) ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/211) ## 复习与自学 -* [目标检测](https://tjmachinelearning.com/lectures/1718/obj/) 由 Nikhil Sardana 撰写 -* [目标检测算法的良好比较](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html) -* [深度学习算法在目标检测中的回顾](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852) -* [基本目标检测算法的逐步介绍](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/) -* [在 Python 中实现 Faster R-CNN 进行目标检测](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/) +* [目标检测](https://tjmachinelearning.com/lectures/1718/obj/) 作者:Nikhil Sardana +* [目标检测算法的优秀比较](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html) +* [深度学习目标检测算法综述](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852) +* [目标检测算法基础入门](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/) +* [Python 实现 Faster R-CNN 进行目标检测](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/) ## [作业:目标检测](lab/README.md) **免责声明**: -本文件是使用机器翻译服务进行翻译的。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或错误解读不承担任何责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md b/translations/zh/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md index be25078a..f76da3f7 100644 --- a/translations/zh/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md +++ b/translations/zh/lessons/4-ComputerVision/11-ObjectDetection/lab/README.md @@ -1,14 +1,23 @@ + # 使用好莱坞头部数据集进行头部检测 -来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验作业。 +来自 [AI 初学者课程](https://github.com/microsoft/ai-for-beginners) 的实验任务。 ## 任务 -在视频监控摄像头流中计数人数是一个重要的任务,这将使我们能够估算商店中的访客数量、餐厅的繁忙时段等。为了解决这个任务,我们需要能够从不同角度检测人头。为了训练对象检测模型以检测人头,我们可以使用 [Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/)。 +通过视频监控摄像头流统计人数是一项重要任务,它可以帮助我们估算商店的访客数量、餐厅的繁忙时段等。为了解决这个任务,我们需要能够从不同角度检测人类的头部。为了训练一个能够检测人类头部的目标检测模型,我们可以使用 [好莱坞头部数据集](https://www.di.ens.fr/willow/research/headdetection/)。 ## 数据集 -[Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/release/HollywoodHeads.zip) 包含369,846个在好莱坞电影的224,740个电影帧中标注的人头。它以 [https://host.robots.ox.ac.uk/pascal/VOC/](../../../../../../lessons/4-ComputerVision/11-ObjectDetection/lab/PASCAL VOC) 格式提供,每张图像都有一个看起来像这样的XML描述文件: +[好莱坞头部数据集](https://www.di.ens.fr/willow/research/headdetection/release/HollywoodHeads.zip) 包含了 369,846 个标注的人类头部,分布在 224,740 帧好莱坞电影画面中。数据集采用 [https://host.robots.ox.ac.uk/pascal/VOC/](../../../../../../lessons/4-ComputerVision/11-ObjectDetection/lab/PASCAL VOC) 格式提供,每张图片都有一个对应的 XML 描述文件,格式如下: ```xml @@ -48,19 +57,19 @@ ``` -在这个数据集中,只有一个对象类别 `head`,对于每个头部,你可以获得边界框的坐标。你可以使用Python库解析XML,或者使用 [这个库](https://pypi.org/project/pascal-voc/) 直接处理PASCAL VOC格式。 +在这个数据集中,只有一个类别的对象 `head`,对于每个头部,都会提供其边界框的坐标。你可以使用 Python 库解析 XML,或者使用 [这个库](https://pypi.org/project/pascal-voc/) 直接处理 PASCAL VOC 格式。 -## 训练对象检测 +## 训练目标检测模型 -你可以通过以下几种方式训练对象检测模型: +你可以通过以下方式之一来训练目标检测模型: -* 使用 [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste) 及其Python API以编程方式在云中训练模型。自定义视觉服务无法使用超过几百张图像来训练模型,因此你可能需要限制数据集。 -* 使用 [Keras tutorial](https://keras.io/examples/vision/retinanet/) 中的示例来训练RetinaNet模型。 -* 使用 [torchvision.models.detection.RetinaNet](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) 中内置的模块。 +* 使用 [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste) 及其 Python API,在云端以编程方式训练模型。Custom Vision 只能使用几百张图片进行模型训练,因此可能需要限制数据集的规模。 +* 使用 [Keras 教程](https://keras.io/examples/vision/retinanet/) 中的示例来训练 RetunaNet 模型。 +* 使用 [torchvision.models.detection.RetinaNet](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) 中的内置模块进行训练。 ## 收获 -对象检测是工业中经常需要的任务。虽然有一些服务可以用于执行对象检测(例如 [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste)),但理解对象检测的工作原理并能够训练自己的模型是很重要的。 +目标检测是工业中经常需要完成的任务。虽然有一些服务可以用来执行目标检测(例如 [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste)),但理解目标检测的工作原理并能够训练自己的模型是非常重要的。 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于重要信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或误读不承担责任。 \ No newline at end of file +本文档使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/12-Segmentation/README.md b/translations/zh/lessons/4-ComputerVision/12-Segmentation/README.md index 19d74472..d1f179a0 100644 --- a/translations/zh/lessons/4-ComputerVision/12-Segmentation/README.md +++ b/translations/zh/lessons/4-ComputerVision/12-Segmentation/README.md @@ -1,69 +1,78 @@ + # 分割 -我们之前学习了物体检测,它允许我们通过预测物体的 *边界框* 来定位图像中的物体。然而,对于某些任务,我们不仅需要边界框,还需要更精确的物体定位。这个任务被称为 **分割**。 +我们之前学习了目标检测,它可以通过预测*边界框*来定位图像中的目标。然而,对于某些任务,我们不仅需要边界框,还需要更精确的目标定位。这项任务被称为**分割**。 -## [课前小测](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/112) +## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/112) -分割可以被视为 **像素分类**,对于图像的 **每个** 像素,我们必须预测其类别(*背景* 是其中一个类别)。分割算法主要有两种: +分割可以看作是**像素分类**,即对于图像中的**每个**像素,我们必须预测其类别(*背景*是其中一个类别)。主要有两种分割算法: -* **语义分割** 仅仅告诉我们像素的类别,而不区分同一类别的不同物体。 -* **实例分割** 将类别划分为不同的实例。 +* **语义分割**只告诉像素的类别,不区分同一类别的不同目标。 +* **实例分割**将类别划分为不同的实例。 -对于实例分割,这些羊是不同的物体,但对于语义分割,所有的羊都被表示为一个类别。 +例如,对于实例分割,这些羊是不同的目标;而对于语义分割,所有的羊都被表示为一个类别。 -> 图片来自 [这篇博客文章](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50) +> 图片来源于[这篇博客文章](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50) -有不同的神经网络架构用于分割,但它们都有相同的结构。在某种程度上,它类似于你之前学习的自编码器,但我们的目标不是解构原始图像,而是解构一个 **掩膜**。因此,分割网络具有以下部分: +分割有不同的神经网络架构,但它们的结构都相同。从某种意义上说,它类似于你之前学习过的自动编码器,但我们的目标不是解构原始图像,而是解构一个**掩码**。因此,分割网络包括以下部分: -* **编码器** 从输入图像中提取特征 -* **解码器** 将这些特征转换为 **掩膜图像**,其大小和通道数与类别数相对应。 +* **编码器**从输入图像中提取特征。 +* **解码器**将这些特征转换为**掩码图像**,其大小与输入图像相同,通道数对应类别数量。 -> 图片来自 [这篇出版物](https://arxiv.org/pdf/2001.05566.pdf) +> 图片来源于[这篇论文](https://arxiv.org/pdf/2001.05566.pdf) -我们特别需要提到用于分割的损失函数。当使用经典的自编码器时,我们需要测量两幅图像之间的相似性,我们可以使用均方误差 (MSE) 来做到这一点。在分割中,目标掩膜图像中的每个像素表示类别编号(在第三维度上进行独热编码),因此我们需要使用特定于分类的损失函数 - 交叉熵损失,平均所有像素。如果掩膜是二元的 - 使用 **二元交叉熵损失** (BCE)。 +我们特别需要提到分割中使用的损失函数。在使用经典自动编码器时,我们需要测量两张图像之间的相似性,可以使用均方误差(MSE)来实现。在分割中,目标掩码图像中的每个像素表示类别编号(在第三维度上进行独热编码),因此我们需要使用特定于分类的损失函数——交叉熵损失,并对所有像素进行平均。如果掩码是二值的,则使用**二值交叉熵损失**(BCE)。 -> ✅ 独热编码是一种将类别标签编码为长度等于类别数的向量的方法。查看 [这篇文章](https://datagy.io/sklearn-one-hot-encode/) 以了解这种技术。 +> ✅ 独热编码是一种将类别标签编码为长度等于类别数量的向量的方法。可以查看[这篇文章](https://datagy.io/sklearn-one-hot-encode/)了解该技术。 -## 医学影像的分割 +## 医学影像中的分割 -在本课中,我们将通过训练网络识别医学图像上的人类痣(也称为胎记)来看到分割的实际应用。我们将使用 PH2 数据库 的皮肤镜图像作为图像来源。该数据集包含三类共200幅图像:典型痣、非典型痣和黑色素瘤。所有图像还包含一个对应的 **掩膜**,勾勒出痣的轮廓。 +在本课中,我们将通过训练网络识别医学图像中的人类痣(也称为黑痣)来实际应用分割技术。我们将使用PH2数据库中的皮肤镜图像作为图像来源。该数据集包含200张图像,分为三类:典型痣、非典型痣和黑色素瘤。所有图像还包含对应的**掩码**,用于勾勒痣的轮廓。 -> ✅ 这种技术特别适用于这种类型的医学影像,但你能想象其他什么现实世界的应用? +> ✅ 这种技术特别适用于此类医学影像,但你能想到其他现实世界中的应用场景吗? navi -> 图片来自 PH2 数据库 +> 图片来源于PH2数据库 -我们将训练一个模型,从背景中分割出任何痣。 +我们将训练一个模型,将任何痣从背景中分割出来。 ## ✍️ 练习:语义分割 -打开下面的笔记本,了解更多关于不同语义分割架构的内容,练习与它们的合作,并观察它们的实际应用。 +打开以下笔记本,了解不同的语义分割架构,练习使用它们,并观察它们的实际效果。 * [语义分割 Pytorch](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb) * [语义分割 TensorFlow](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb) -## [课后小测](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/212) +## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/212) -## 结论 +## 总结 -分割是一种非常强大的图像分类技术,超越了边界框,达到了像素级分类。它在医学影像等多种应用中被广泛使用。 +分割是一种非常强大的图像分类技术,它超越了边界框,达到了像素级分类。这项技术在医学影像等领域有广泛应用。 ## 🚀 挑战 -身体分割只是我们可以用人像图像进行的常见任务之一。另一个重要任务包括 **骨架检测** 和 **姿态检测**。尝试使用 [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) 库,看看姿态检测如何被使用。 +人体分割只是我们可以对人物图像进行的常见任务之一。其他重要任务包括**骨架检测**和**姿态检测**。试试[OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)库,看看姿态检测的实际应用。 ## 复习与自学 -这篇 [维基百科文章](https://wikipedia.org/wiki/Image_segmentation) 提供了对该技术各种应用的良好概述。自行深入了解实例分割和全景分割在这一研究领域的子领域。 +这篇[维基百科文章](https://wikipedia.org/wiki/Image_segmentation)提供了关于该技术各种应用的良好概述。自行学习实例分割和全景分割在该领域的子领域。 ## [作业](lab/README.md) -在这个实验中,尝试使用 [全身分割 MADS 数据集](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset) 来进行 **人体分割**。 +在本实验中,尝试使用[Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)数据集进行**人体分割**。 **免责声明**: -本文件是使用机器翻译的人工智能翻译服务进行翻译的。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或误读不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/12-Segmentation/lab/README.md b/translations/zh/lessons/4-ComputerVision/12-Segmentation/lab/README.md index 3c0c6fd1..8b914930 100644 --- a/translations/zh/lessons/4-ComputerVision/12-Segmentation/lab/README.md +++ b/translations/zh/lessons/4-ComputerVision/12-Segmentation/lab/README.md @@ -1,22 +1,31 @@ + # 人体分割 来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验任务。 ## 任务 -在视频制作中,例如天气预报,我们常常需要从摄像机中剪切出人像,并将其放置在其他画面上。这通常通过 **色度键** 技术完成,当一个人在均匀颜色背景前拍摄时,该背景会被去除。在这个实验中,我们将训练一个神经网络模型来剪切出人类轮廓。 +在视频制作中,例如天气预报,我们经常需要从摄像机中剪切出人像,并将其叠加到其他画面上。这通常通过 **抠像技术(chroma key)** 实现,即人在一个统一颜色的背景前拍摄,然后将背景移除。在本实验中,我们将训练一个神经网络模型来剪切出人像轮廓。 ## 数据集 -我们将使用来自 Kaggle 的 [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)。请从 Kaggle 手动下载数据集。 +我们将使用来自 Kaggle 的 [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)。请从 Kaggle 手动下载该数据集。 -## 启动笔记本 +## 起始笔记本 -通过打开 [BodySegmentation.ipynb](../../../../../../lessons/4-ComputerVision/12-Segmentation/lab/BodySegmentation.ipynb) 来开始实验。 +通过打开 [BodySegmentation.ipynb](../../../../../../lessons/4-ComputerVision/12-Segmentation/lab/BodySegmentation.ipynb) 开始实验。 ## 收获 -人体分割只是我们可以对人像图像执行的常见任务之一。另一个重要的任务包括 **骨架检测** 和 **姿态检测**。查看 [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) 库,了解这些任务如何实现。 +人体分割只是我们可以对人物图像进行的常见任务之一。其他重要任务包括 **骨架检测** 和 **姿态检测**。可以查看 [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) 库,了解如何实现这些任务。 **免责声明**: -本文件是使用机器翻译的人工智能翻译服务进行翻译的。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原文件的母语版本应被视为权威来源。对于重要信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/README.md b/translations/zh/lessons/4-ComputerVision/README.md index 6876af7c..2491c960 100644 --- a/translations/zh/lessons/4-ComputerVision/README.md +++ b/translations/zh/lessons/4-ComputerVision/README.md @@ -1,16 +1,25 @@ + # 计算机视觉 -![计算机视觉内容的摘要图](../../../../translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.zh.png) +![计算机视觉内容总结涂鸦](../../../../translated_images/ai-computervision.6506ebebac3fbf76cdb78989d7d3dfea87e88285c0feaade53aa7804a22b248f.zh.png) -在本节中,我们将学习: +在本节中,我们将学习以下内容: -* [计算机视觉与 OpenCV 简介](06-IntroCV/README.md) +* [计算机视觉和OpenCV简介](06-IntroCV/README.md) * [卷积神经网络](07-ConvNets/README.md) -* [预训练网络与迁移学习](08-TransferLearning/README.md) +* [预训练网络和迁移学习](08-TransferLearning/README.md) * [自编码器](09-Autoencoders/README.md) * [生成对抗网络](10-GANs/README.md) * [目标检测](11-ObjectDetection/README.md) * [语义分割](12-Segmentation/README.md) -**免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于重要信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或错误解读不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/13-TextRep/README.md b/translations/zh/lessons/5-NLP/13-TextRep/README.md index 3f3d6845..a6af651d 100644 --- a/translations/zh/lessons/5-NLP/13-TextRep/README.md +++ b/translations/zh/lessons/5-NLP/13-TextRep/README.md @@ -1,76 +1,85 @@ + # 将文本表示为张量 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/113) ## 文本分类 -在本节的第一部分,我们将重点关注**文本分类**任务。我们将使用[AG News](https://www.kaggle.com/amananandrai/ag-news-classification-dataset)数据集,该数据集包含以下新闻文章: +在本节的第一部分中,我们将专注于**文本分类**任务。我们将使用 [AG News](https://www.kaggle.com/amananandrai/ag-news-classification-dataset) 数据集,该数据集包含如下的新闻文章: -* 类别:科技 -* 标题:肯塔基公司获得资助研究肽(美联社) -* 正文:美联社 - 一家由路易斯维尔大学的化学研究人员创办的公司获得了一项资助,用于开发... +* 类别:科技/技术 +* 标题:Ky. 公司获得研究肽的资助 (美联社) +* 正文:美联社 - 一家由路易斯维尔大学化学研究员创立的公司获得了一项开发资助…… -我们的目标是根据文本将新闻项分类到一个类别中。 +我们的目标是根据文本将新闻项目分类到某个类别中。 -## 文本表示 +## 表示文本 -如果我们想用神经网络解决自然语言处理(NLP)任务,我们需要某种方式将文本表示为张量。计算机已经将文本字符表示为映射到屏幕上字体的数字,使用如ASCII或UTF-8等编码。 +如果我们想用神经网络解决自然语言处理 (NLP) 任务,我们需要一种方法将文本表示为张量。计算机已经通过诸如 ASCII 或 UTF-8 等编码将文本字符表示为映射到屏幕字体的数字。 -显示字符与ASCII和二进制表示之间映射的图像 +显示将字符映射到 ASCII 和二进制表示的图示 > [图片来源](https://www.seobility.net/en/wiki/ASCII) -作为人类,我们理解每个字母**代表**的含义,以及所有字符如何结合形成句子的单词。然而,计算机本身并没有这样的理解,神经网络必须在训练过程中学习其含义。 +作为人类,我们理解每个字母**代表**什么,以及所有字符如何组合成句子的单词。然而,计算机本身并不具备这种理解能力,神经网络需要在训练过程中学习这些含义。 -因此,在表示文本时,我们可以使用不同的方法: +因此,我们可以使用不同的方法来表示文本: -* **字符级表示**,即通过将每个字符视为一个数字来表示文本。假设我们的文本语料库中有*C*个不同的字符,单词*Hello*将由5x*C*的张量表示。每个字母将对应于独热编码中的一个张量列。 -* **词级表示**,在这种表示中,我们创建一个文本中所有单词的**词汇表**,然后使用独热编码表示单词。这种方法在某种程度上更好,因为每个字母本身并没有太多含义,因此通过使用更高层次的语义概念——单词——我们简化了神经网络的任务。然而,考虑到字典的庞大,我们需要处理高维稀疏张量。 +* **字符级表示**:将文本表示为每个字符对应一个数字。假设文本语料库中有 *C* 个不同的字符,那么单词 *Hello* 将表示为一个 5x*C* 的张量。每个字母对应于独热编码中的一个张量列。 +* **单词级表示**:创建一个包含文本中所有单词的**词汇表**,然后用独热编码表示单词。这种方法更优,因为单个字母本身意义不大,而使用更高层次的语义概念(单词)可以简化神经网络的任务。然而,由于词典规模较大,我们需要处理高维稀疏张量。 -无论采用何种表示,我们首先需要将文本转换为一系列**标记**,一个标记可以是一个字符、一个单词,或者有时甚至是一个单词的一部分。然后,我们将标记转换为数字,通常使用**词汇表**,这个数字可以通过独热编码输入到神经网络中。 +无论采用哪种表示方式,我们首先需要将文本转换为**标记**序列,一个标记可以是字符、单词,甚至是单词的一部分。然后,我们使用**词汇表**将标记转换为数字,这个数字可以通过独热编码输入到神经网络中。 -## N-grams +## N-Grams -在自然语言中,单词的确切含义只能在上下文中确定。例如,*neural network*和*fishing network*的含义完全不同。考虑这一点的一个方法是基于单词对构建我们的模型,将单词对视为独立的词汇标记。这样,句子*I like to go fishing*将被表示为以下标记序列:*I like*, *like to*, *to go*, *go fishing*。这种方法的问题在于字典大小显著增长,像*go fishing*和*go shopping*这样的组合被表示为不同的标记,尽管它们共享相同的动词,但并没有任何语义相似性。 +在自然语言中,单词的确切含义只能在上下文中确定。例如,*神经网络* 和 *捕鱼网络* 的含义完全不同。为了解决这个问题,我们可以基于单词对构建模型,并将单词对视为独立的词汇标记。这样,句子 *I like to go fishing* 将表示为以下标记序列:*I like*,*like to*,*to go*,*go fishing*。这种方法的问题在于词典规模会显著增长,像 *go fishing* 和 *go shopping* 这样的组合会被表示为不同的标记,尽管它们共享相同的动词,但并没有语义上的相似性。 -在某些情况下,我们还可以考虑使用三元组——三个单词的组合。因此,这种方法通常被称为**n-grams**。此外,使用字符级表示的n-grams也很有意义,在这种情况下,n-grams大致对应于不同的音节。 +在某些情况下,我们还可以考虑使用三元组(tri-grams)——即三个单词的组合。因此,这种方法通常被称为 **n-grams**。此外,在字符级表示中使用 n-grams 也是有意义的,在这种情况下,n-grams 大致对应于不同的音节。 -## 词袋模型和TF/IDF +## 词袋模型和 TF/IDF -在解决文本分类等任务时,我们需要能够用一个固定大小的向量表示文本,这个向量将用作最终密集分类器的输入。实现这一点的最简单方法之一是将所有单个单词表示结合起来,例如通过相加。如果我们将每个单词的独热编码相加,我们将得到一个频率向量,显示每个单词在文本中出现的次数。这种文本表示被称为**词袋模型**(BoW)。 +在解决诸如文本分类的任务时,我们需要能够用一个固定大小的向量表示文本,这个向量将作为最终密集分类器的输入。最简单的方法之一是将所有单个单词表示组合起来,例如通过相加。如果我们将每个单词的独热编码相加,就会得到一个频率向量,显示每个单词在文本中出现的次数。这种文本表示被称为**词袋模型** (BoW)。 > 图片由作者提供 -BoW本质上表示文本中出现的单词及其数量,这确实可以很好地指示文本的主题。例如,关于政治的新闻文章可能包含*president*和*country*等单词,而科学出版物则可能包含*collider*、*discovered*等。因此,单词频率在许多情况下可以很好地指示文本内容。 +词袋模型本质上表示了文本中出现了哪些单词以及它们的数量,这确实可以很好地反映文本的主题。例如,关于政治的新闻文章可能包含 *总统* 和 *国家* 这样的词,而科学出版物可能会有 *对撞机*、*发现* 等词。因此,单词频率在许多情况下可以很好地指示文本内容。 -BoW的问题在于某些常见单词,如*and*、*is*等,出现在大多数文本中,并且它们的频率最高,掩盖了真正重要的单词。我们可以通过考虑单词在整个文档集合中出现的频率来降低这些单词的重要性。这就是TF/IDF方法背后的主要思想,详细内容将在本课程附带的笔记本中介绍。 +词袋模型的问题在于某些常见单词(如 *and*、*is* 等)在大多数文本中都会出现,并且它们的频率最高,从而掩盖了真正重要的单词。我们可以通过考虑单词在整个文档集合中出现的频率来降低这些单词的重要性。这就是 TF/IDF 方法背后的主要思想,在本课附带的笔记本中对此有更详细的介绍。 -然而,这些方法都无法完全考虑文本的**语义**。我们需要更强大的神经网络模型来做到这一点,稍后我们将在本节中讨论。 +然而,这些方法都无法完全考虑文本的**语义**。我们需要更强大的神经网络模型来实现这一点,这将在本节后续内容中讨论。 ## ✍️ 练习:文本表示 -在以下笔记本中继续学习: +通过以下笔记本继续学习: -* [使用PyTorch进行文本表示](../../../../../lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) -* [使用TensorFlow进行文本表示](../../../../../lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) +* [使用 PyTorch 表示文本](../../../../../lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb) +* [使用 TensorFlow 表示文本](../../../../../lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb) -## 结论 +## 总结 -到目前为止,我们研究了可以为不同单词添加频率权重的技术。然而,它们无法表示含义或顺序。正如著名语言学家J. R. Firth在1935年所说:“一个词的完整含义总是与上下文相关,任何与上下文无关的意义研究都无法被认真对待。”我们将在课程的后面学习如何通过语言建模从文本中捕捉上下文信息。 +到目前为止,我们已经学习了可以为不同单词添加频率权重的技术。然而,这些技术无法表示单词的含义或顺序。正如著名语言学家 J. R. Firth 在 1935 年所说:“单词的完整意义总是与上下文相关,任何脱离上下文的意义研究都不应被认真对待。”我们将在课程后续内容中学习如何通过语言建模从文本中捕获上下文信息。 ## 🚀 挑战 -尝试使用词袋模型和不同数据模型进行其他练习。您可能会受到这个[在Kaggle上的比赛](https://www.kaggle.com/competitions/word2vec-nlp-tutorial/overview/part-1-for-beginners-bag-of-words)的启发。 +尝试使用词袋模型和不同的数据模型完成其他练习。你可以从这个 [Kaggle 比赛](https://www.kaggle.com/competitions/word2vec-nlp-tutorial/overview/part-1-for-beginners-bag-of-words) 中获得灵感。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/213) ## 复习与自学 -在[Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste)上练习您的文本嵌入和词袋技术。 +在 [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/?WT.mc_id=academic-77998-cacaste) 上练习你的文本嵌入和词袋模型技术。 ## [作业:笔记本](assignment.md) -**免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或误读不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/13-TextRep/assignment.md b/translations/zh/lessons/5-NLP/13-TextRep/assignment.md index ea5b4621..dbb0caaf 100644 --- a/translations/zh/lessons/5-NLP/13-TextRep/assignment.md +++ b/translations/zh/lessons/5-NLP/13-TextRep/assignment.md @@ -1,6 +1,15 @@ -# 任务:笔记本 + +# 作业:笔记本 -使用与本课程相关的笔记本(可以是 PyTorch 或 TensorFlow 版本),使用您自己的数据集重新运行它们,数据集可以来自 Kaggle,并请注明来源。重写笔记本,以突出您的发现。尝试一些可能令人惊讶的创新数据集,例如 [这个关于 UFO 目击事件的数据集](https://www.kaggle.com/datasets/NUFORC/ufo-sightings) 来自 NUFORC。 +使用与本课程相关的笔记本(可以选择 PyTorch 或 TensorFlow 版本),使用您自己的数据集重新运行它们,例如从 Kaggle 获取并注明出处。重写笔记本以突出您自己的发现。尝试一些可能令人惊讶的创新数据集,例如 [这个关于 UFO 目击事件的数据集](https://www.kaggle.com/datasets/NUFORC/ufo-sightings) 来自 NUFORC。 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/14-Embeddings/README.md b/translations/zh/lessons/5-NLP/14-Embeddings/README.md index 35f12750..267148a1 100644 --- a/translations/zh/lessons/5-NLP/14-Embeddings/README.md +++ b/translations/zh/lessons/5-NLP/14-Embeddings/README.md @@ -1,68 +1,77 @@ + # 嵌入 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/114) -在基于 BoW 或 TF/IDF 训练分类器时,我们操作的是长度为 `vocab_size` 的高维词袋向量,并且我们明确地将低维位置表示向量转换为稀疏的一热编码表示。然而,这种一热编码表示并不高效。此外,每个单词是独立处理的,即一热编码向量并不表达单词之间的任何语义相似性。 +在基于 BoW 或 TF/IDF 训练分类器时,我们使用的是长度为 `vocab_size` 的高维词袋向量,并且我们显式地将低维位置表示向量转换为稀疏的独热表示。然而,这种独热表示并不节省内存。此外,每个单词都是独立处理的,即独热编码向量无法表达单词之间的语义相似性。 -**嵌入** 的理念是用低维稠密向量来表示单词,这些向量在某种程度上反映了单词的语义含义。我们稍后将讨论如何构建有意义的词嵌入,但现在我们可以将嵌入视为一种降低词向量维度的方法。 +**嵌入**的想法是用低维密集向量来表示单词,这些向量能够在某种程度上反映单词的语义含义。稍后我们会讨论如何构建有意义的单词嵌入,但现在我们可以将嵌入简单地理解为一种降低单词向量维度的方法。 -因此,嵌入层将一个单词作为输入,并生成指定长度 `embedding_size` 的输出向量。从某种意义上说,它与 `Linear` 层非常相似,但它不是接受一热编码向量,而是能够接受单词编号作为输入,从而避免创建大型一热编码向量。 +嵌入层会将一个单词作为输入,并生成指定 `embedding_size` 的输出向量。从某种意义上说,它与 `Linear` 层非常相似,但它不需要独热编码向量,而是可以直接接受单词编号作为输入,从而避免创建大型独热编码向量。 -通过将嵌入层作为分类器网络的第一层,我们可以从词袋模型切换到 **嵌入袋** 模型,在这种模型中,我们首先将文本中的每个单词转换为相应的嵌入,然后计算这些嵌入的某种聚合函数,例如 `sum`、`average` 或 `max`。 +通过在分类器网络中使用嵌入层作为第一层,我们可以从词袋模型切换到 **嵌入袋** 模型。在嵌入袋模型中,我们首先将文本中的每个单词转换为对应的嵌入,然后对所有这些嵌入计算某种聚合函数,例如 `sum`、`average` 或 `max`。 -![展示五个序列单词的嵌入分类器的图像。](../../../../../translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.zh.png) +![展示五个序列单词的嵌入分类器的图片。](../../../../../translated_images/embedding-classifier-example.b77f021a7ee67eeec8e68bfe11636c5b97d6eaa067515a129bfb1d0034b1ac5b.zh.png) > 图片由作者提供 ## ✍️ 练习:嵌入 -在以下笔记本中继续学习: +通过以下笔记本继续学习: * [使用 PyTorch 的嵌入](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb) * [使用 TensorFlow 的嵌入](../../../../../lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb) ## 语义嵌入:Word2Vec -虽然嵌入层学会了将单词映射到向量表示,但这种表示不一定具有太多的语义意义。能够学习到一种向量表示,使得相似的单词或同义词对应的向量在某种向量距离(例如欧几里得距离)上是接近的,这将是非常有益的。 +虽然嵌入层可以将单词映射到向量表示,但这种表示不一定具有很强的语义意义。如果能学习一种向量表示,使得相似单词或同义词在某种向量距离(例如欧几里得距离)上彼此接近,那就更好了。 -为此,我们需要以特定方式在大量文本上预训练我们的嵌入模型。一种训练语义嵌入的方法称为 [Word2Vec](https://en.wikipedia.org/wiki/Word2vec)。它基于两种主要架构,用于生成单词的分布式表示: +为此,我们需要以特定方式在大量文本上预训练嵌入模型。一种训练语义嵌入的方法叫做 [Word2Vec](https://en.wikipedia.org/wiki/Word2vec)。它基于两种主要架构来生成单词的分布式表示: - - **连续词袋模型**(CBoW)——在这种架构中,我们训练模型从周围的上下文中预测一个单词。给定 ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$,模型的目标是从 $(W_{-2},W_{-1},W_1,W_2)$ 预测 $W_0$。 - - **连续跳字模型**与 CBoW 相反。模型使用上下文单词的周围窗口来预测当前单词。 + - **连续词袋** (CBoW) —— 在这种架构中,我们训练模型根据上下文预测单词。给定 ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$,模型的目标是从 $(W_{-2},W_{-1},W_1,W_2)$ 预测 $W_0$。 + - **连续跳词模型** (Skip-Gram) —— 与 CBoW 相反,模型使用上下文窗口中的单词来预测当前单词。 -CBoW 速度更快,而跳字模型速度较慢,但在表示不常见单词方面表现更好。 +CBoW 的速度更快,而 Skip-Gram 的速度较慢,但在表示不常见单词方面表现更好。 -![展示 CBoW 和跳字算法将单词转换为向量的图像。](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.zh.png) +![展示 CBoW 和 Skip-Gram 算法将单词转换为向量的图片。](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.zh.png) -> 图片来自 [这篇论文](https://arxiv.org/pdf/1301.3781.pdf) +> 图片来源于 [这篇论文](https://arxiv.org/pdf/1301.3781.pdf) -Word2Vec 预训练的嵌入(以及其他类似模型,如 GloVe)也可以替代神经网络中的嵌入层。然而,我们需要处理词汇表,因为用于预训练 Word2Vec/GloVe 的词汇表可能与我们的文本语料库中的词汇表不同。请查看上述笔记本,了解如何解决这个问题。 +Word2Vec 预训练嵌入(以及其他类似模型,例如 GloVe)也可以替代神经网络中的嵌入层使用。然而,我们需要处理词汇表问题,因为用于预训练 Word2Vec/GloVe 的词汇表可能与我们文本语料库中的词汇表不同。查看上述笔记本,了解如何解决这个问题。 ## 上下文嵌入 -传统的预训练嵌入表示(如 Word2Vec)的一个关键限制是单词意义消歧的问题。虽然预训练的嵌入可以捕捉单词在上下文中的某些含义,但单词的每种可能含义都被编码到同一个嵌入中。这可能会在下游模型中引发问题,因为许多单词(例如“play”这个词)根据上下文的不同有不同的含义。 +传统预训练嵌入表示(如 Word2Vec)的一个关键限制是词义消歧问题。虽然预训练嵌入可以捕捉单词在上下文中的部分意义,但每个单词的所有可能意义都被编码到同一个嵌入中。这可能会在下游模型中引发问题,因为许多单词(例如“play”)的含义会因上下文而异。 -例如,单词“play”在这两个不同的句子中有着截然不同的意思: +例如,“play”在以下两个句子中的含义完全不同: -- 我去剧院看了一场 **戏**。 -- 约翰想和他的朋友们 **玩**。 +- 我去剧院看了一场**戏剧**。 +- 约翰想和朋友们一起**玩**。 -上述预训练的嵌入在同一个嵌入中表示了“play”这个词的这两种含义。为了克服这个限制,我们需要基于 **语言模型** 构建嵌入,该模型是在大量文本语料库上训练的,并且*知道*单词如何在不同上下文中组合。讨论上下文嵌入超出了本教程的范围,但我们将在后面的课程中讨论语言模型时再回到这个话题。 +上述预训练嵌入将“play”的两种含义表示为同一个嵌入。为了克服这一限制,我们需要基于**语言模型**构建嵌入,该模型在大量文本语料库上进行训练,并且*了解*单词在不同上下文中的组合方式。讨论上下文嵌入超出了本教程的范围,但我们将在课程后续讲解语言模型时回到这个话题。 -## 结论 +## 总结 -在本课中,您了解到如何在 TensorFlow 和 Pytorch 中构建和使用嵌入层,以更好地反映单词的语义含义。 +在本课中,你学习了如何在 TensorFlow 和 PyTorch 中构建和使用嵌入层,以更好地反映单词的语义含义。 ## 🚀 挑战 -Word2Vec 已被用于一些有趣的应用,包括生成歌词和诗歌。请查看 [这篇文章](https://www.politetype.com/blog/word2vec-color-poems),了解作者如何使用 Word2Vec 生成诗歌。观看 [Dan Shiffmann 的这段视频](https://www.youtube.com/watch?v=LSS_bos_TPI&ab_channel=TheCodingTrain),以发现对这种技术的不同解释。然后尝试将这些技术应用于您自己的文本语料库,也许可以从 Kaggle 获取数据。 +Word2Vec 已被用于一些有趣的应用,包括生成歌词和诗歌。阅读 [这篇文章](https://www.politetype.com/blog/word2vec-color-poems),了解作者如何使用 Word2Vec 生成诗歌。观看 [Dan Shiffmann 的视频](https://www.youtube.com/watch?v=LSS_bos_TPI&ab_channel=TheCodingTrain),了解该技术的另一种解释。然后尝试将这些技术应用到你自己的文本语料库中,可以从 Kaggle 获取数据。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/214) ## 复习与自学 -阅读这篇关于 Word2Vec 的论文:[高效估计向量空间中的单词表示](https://arxiv.org/pdf/1301.3781.pdf) +阅读这篇关于 Word2Vec 的论文:[Efficient Estimation of Word Representations in Vector Space](https://arxiv.org/pdf/1301.3781.pdf) ## [作业:笔记本](assignment.md) -**免责声明**: -本文件是使用基于机器的人工智能翻译服务进行翻译的。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/14-Embeddings/assignment.md b/translations/zh/lessons/5-NLP/14-Embeddings/assignment.md index 0f3d5e13..fb9e6a43 100644 --- a/translations/zh/lessons/5-NLP/14-Embeddings/assignment.md +++ b/translations/zh/lessons/5-NLP/14-Embeddings/assignment.md @@ -1,6 +1,15 @@ + # 作业:笔记本 -使用与本课相关的笔记本(无论是 PyTorch 版本还是 TensorFlow 版本),使用您自己的数据集重新运行它们,可能是来自 Kaggle 的数据集,并进行适当的引用。重写笔记本,以突出您的发现。尝试不同类型的数据集并记录您的发现,使用诸如 [这些披头士歌词](https://www.kaggle.com/datasets/jenlooper/beatles-lyrics) 的文本。 +使用与本课程相关的笔记本(可以是 PyTorch 或 TensorFlow 版本),使用您自己的数据集重新运行它们,例如来自 Kaggle 的数据集,并注明出处。重写笔记本以突出您自己的发现。尝试使用不同类型的数据集并记录您的发现,例如使用[这些 Beatles 歌词](https://www.kaggle.com/datasets/jenlooper/beatles-lyrics)中的文本。 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业的人类翻译。我们对因使用此翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/15-LanguageModeling/README.md b/translations/zh/lessons/5-NLP/15-LanguageModeling/README.md index 1e2426f9..69c23f5a 100644 --- a/translations/zh/lessons/5-NLP/15-LanguageModeling/README.md +++ b/translations/zh/lessons/5-NLP/15-LanguageModeling/README.md @@ -1,45 +1,54 @@ + # 语言建模 -语义嵌入,例如 Word2Vec 和 GloVe,实际上是 **语言建模** 的第一步——创建能够在某种程度上 *理解*(或 *表示*)语言本质的模型。 +语义嵌入,例如 Word2Vec 和 GloVe,实际上是迈向**语言建模**的第一步——创建某种能够*理解*(或*表示*)语言本质的模型。 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/115) -语言建模的主要思想是在无标签数据集上以无监督的方式进行训练。这一点很重要,因为我们有大量的无标签文本可用,而有标签文本的数量总是受到我们在标记上花费的努力的限制。通常,我们可以构建能够 **预测文本中缺失的单词** 的语言模型,因为在文本中随机屏蔽一个单词并将其用作训练样本是很简单的。 +语言建模的核心思想是通过无监督方式在未标注的数据集上进行训练。这很重要,因为我们拥有大量未标注的文本,而标注文本的数量总是受到标注工作量的限制。通常,我们可以构建能够**预测文本中缺失单词**的语言模型,因为随机遮盖文本中的某个单词并将其作为训练样本是非常简单的。 -## 训练嵌入 +## 嵌入训练 -在之前的示例中,我们使用了预训练的语义嵌入,但观察这些嵌入是如何训练的也很有趣。有几种可能的思路可以使用: +在之前的例子中,我们使用了预训练的语义嵌入,但了解这些嵌入是如何训练的也很有趣。有几种可能的思路可以用来训练嵌入: -* **N-Gram** 语言建模,当我们通过查看 N 个之前的标记来预测一个标记(N-gram) -* **连续词袋模型**(CBoW),当我们在标记序列 $W_{-N}$, ..., $W_N$ 中预测中间标记 $W_0$ 时。 -* **跳字模型**,我们从中间标记 $W_0$ 预测一组邻近的标记 {$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$}。 +* **N-Gram**语言建模,通过查看前 N 个标记(N-gram)来预测当前标记。 +* **连续词袋模型** (CBoW),通过预测标记序列 $W_{-N}$, ..., $W_N$ 中的中间标记 $W_0$。 +* **Skip-gram**,通过中间标记 $W_0$ 来预测一组相邻标记 {$W_{-N},\dots, W_{-1}, W_1,\dots, W_N$}。 -![来自论文的将单词转换为向量的示例算法](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.zh.png) +![论文中关于将单词转换为向量的示例图](../../../../../translated_images/example-algorithms-for-converting-words-to-vectors.fbe9207a726922f6f0f5de66427e8a6eda63809356114e28fb1fa5f4a83ebda7.zh.png) -> 图片来自 [这篇论文](https://arxiv.org/pdf/1301.3781.pdf) +> 图片来源于[这篇论文](https://arxiv.org/pdf/1301.3781.pdf) ## ✍️ 示例笔记本:训练 CBoW 模型 -在以下笔记本中继续学习: +通过以下笔记本继续学习: * [使用 TensorFlow 训练 CBoW Word2Vec](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb) * [使用 PyTorch 训练 CBoW Word2Vec](../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb) -## 结论 +## 总结 -在之前的课程中,我们看到单词嵌入的效果就像魔法一样!现在我们知道训练单词嵌入并不是一项非常复杂的任务,如果需要,我们应该能够为特定领域的文本训练自己的单词嵌入。 +在上一节课中,我们看到单词嵌入的效果就像魔法一样!现在我们知道训练单词嵌入并不是一项非常复杂的任务,如果需要,我们应该能够为特定领域的文本训练自己的单词嵌入。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/215) ## 复习与自学 -* [官方 PyTorch 语言建模教程](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html)。 -* [官方 TensorFlow 训练 Word2Vec 模型教程](https://www.TensorFlow.org/tutorials/text/word2vec)。 -* 使用 **gensim** 框架在几行代码中训练最常用的嵌入的过程在 [这份文档中](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html) 有描述。 +* [PyTorch 官方语言建模教程](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html)。 +* [TensorFlow 官方 Word2Vec 模型训练教程](https://www.TensorFlow.org/tutorials/text/word2vec)。 +* 使用 **gensim** 框架训练最常用嵌入的简便方法详见[此文档](https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html)。 -## 🚀 [作业:训练跳字模型](lab/README.md) +## 🚀 [作业:训练 Skip-Gram 模型](lab/README.md) -在实验中,我们挑战你修改本课的代码,以训练跳字模型,而不是 CBoW。 [阅读详情](lab/README.md) +在实验中,我们挑战你修改本课的代码以训练 Skip-Gram 模型而不是 CBoW。[阅读详情](lab/README.md) **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误读不承担任何责任。 \ No newline at end of file +本文档使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于重要信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或误读承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/15-LanguageModeling/lab/README.md b/translations/zh/lessons/5-NLP/15-LanguageModeling/lab/README.md index a8eb8123..7e7f5fb8 100644 --- a/translations/zh/lessons/5-NLP/15-LanguageModeling/lab/README.md +++ b/translations/zh/lessons/5-NLP/15-LanguageModeling/lab/README.md @@ -1,14 +1,23 @@ + # 训练 Skip-Gram 模型 -来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验作业。 +来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验任务。 ## 任务 -在本实验中,我们挑战您使用 Skip-Gram 技术训练 Word2Vec 模型。训练一个网络,通过嵌入来预测 $N$-tokens 宽的 Skip-Gram 窗口中的邻近词。您可以使用 [本课的代码](../../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb),并稍作修改。 +在本实验中,我们挑战你使用 Skip-Gram 技术训练 Word2Vec 模型。训练一个嵌入网络来预测 $N$ 个词宽的 Skip-Gram 窗口中的邻近词。你可以使用[本课中的代码](../../../../../../lessons/5-NLP/15-LanguageModeling/CBoW-TF.ipynb),并稍作修改。 ## 数据集 -您可以使用任何书籍。您可以在 [Project Gutenberg](https://www.gutenberg.org/) 找到很多免费的文本,例如,这里有一条直接链接到路易斯·卡罗尔的 [《爱丽丝梦游仙境》](https://www.gutenberg.org/files/11/11-0.txt)。或者,您可以使用莎士比亚的戏剧,您可以使用以下代码获取: +你可以使用任何书籍。你可以在 [Project Gutenberg](https://www.gutenberg.org/) 找到许多免费文本,例如,这里有一个直接链接到刘易斯·卡罗尔的《爱丽丝梦游仙境》:[Alice's Adventures in Wonderland](https://www.gutenberg.org/files/11/11-0.txt)。或者,你可以使用莎士比亚的戏剧,以下代码可以获取: ```python path_to_file = tf.keras.utils.get_file( @@ -19,11 +28,11 @@ text = open(path_to_file, 'rb').read().decode(encoding='utf-8') ## 探索! -如果您有时间并想深入了解该主题,可以尝试探索几个方面: +如果你有时间并希望深入研究这个主题,可以尝试探索以下内容: * 嵌入大小如何影响结果? -* 不同文本风格如何影响结果? -* 选取几种非常不同类型的词及其同义词,获取它们的向量表示,应用 PCA 将维度降低到 2,并在二维空间中绘制它们。您能看到任何模式吗? +* 不同的文本风格如何影响结果? +* 选择几组非常不同类型的单词及其同义词,获取它们的向量表示,应用 PCA 将维度降到 2,并在二维空间中绘制它们。你能发现任何模式吗? -**免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而导致的任何误解或误释不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/16-RNN/README.md b/translations/zh/lessons/5-NLP/16-RNN/README.md index 4e1cb25f..5cdef79c 100644 --- a/translations/zh/lessons/5-NLP/16-RNN/README.md +++ b/translations/zh/lessons/5-NLP/16-RNN/README.md @@ -1,86 +1,95 @@ + # 循环神经网络 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/116) -在之前的章节中,我们使用了丰富的文本语义表示,并在嵌入的基础上使用了简单的线性分类器。这种架构的作用是捕捉句子中单词的聚合意义,但它没有考虑单词的**顺序**,因为在嵌入之上的聚合操作移除了原始文本中的这一信息。由于这些模型无法建模单词的顺序,因此它们无法解决更复杂或模糊的任务,如文本生成或问答。 +在之前的章节中,我们使用了丰富的文本语义表示,并在嵌入层之上应用了一个简单的线性分类器。这种架构能够捕捉句子中单词的整体意义,但它没有考虑单词的**顺序**,因为嵌入层上的聚合操作会丢失原始文本中的顺序信息。由于这些模型无法建模单词的顺序,它们无法解决更复杂或更模糊的任务,例如文本生成或问答。 -为了捕捉文本序列的意义,我们需要使用另一种神经网络架构,称为**循环神经网络**(RNN)。在RNN中,我们一次将句子中的一个符号传递给网络,网络生成一些**状态**,然后我们将其与下一个符号一起再次传递给网络。 +为了捕捉文本序列的意义,我们需要使用另一种神经网络架构,称为**循环神经网络**(Recurrent Neural Network,RNN)。在 RNN 中,我们将句子逐个符号输入网络,网络会生成某种**状态**,然后将该状态与下一个符号一起再次输入网络。 ![RNN](../../../../../translated_images/rnn.27f5c29c53d727b546ad3961637a267f0fe9ec5ab01f2a26a853c92fcefbb574.zh.png) > 图片由作者提供 -给定输入序列的标记 X0,...,Xn,RNN创建一系列神经网络块,并使用反向传播对该序列进行端到端训练。每个网络块接受一对 (Xi,Si) 作为输入,并生成 Si+1 作为结果。最终状态 Sn 或(输出 Yn)进入线性分类器以生成结果。所有网络块共享相同的权重,并通过一次反向传播传递进行端到端训练。 +给定输入序列的标记 X0,...,Xn,RNN 会创建一系列神经网络块,并通过反向传播对整个序列进行端到端训练。每个网络块以 (Xi,Si) 作为输入,并生成 Si+1 作为结果。最终状态 Sn 或 (输出 Yn) 会进入线性分类器以生成结果。所有网络块共享相同的权重,并通过一次反向传播训练端到端。 -由于状态向量 S0,...,Sn 被传递通过网络,因此它能够学习单词之间的顺序依赖关系。例如,当单词 *not* 在序列中出现时,它可以学习在状态向量中否定某些元素,从而实现否定。 +由于状态向量 S0,...,Sn 会在网络中传递,RNN 能够学习单词之间的顺序依赖关系。例如,当单词 *not* 出现在序列中的某处时,它可以学习在状态向量中否定某些元素,从而实现否定。 -> ✅ 由于上面图片中所有 RNN 块的权重是共享的,因此可以将同一图片表示为一个块(右侧),并带有一个递归反馈环,将网络的输出状态传回输入。 +> ✅ 由于上图中所有 RNN 块的权重是共享的,因此可以将其表示为一个带有循环反馈的单块(右侧图),将网络的输出状态反馈到输入。 ## RNN 单元的结构 -让我们看看一个简单的 RNN 单元是如何组织的。它接受前一个状态 Si-1 和当前符号 Xi 作为输入,并必须生成输出状态 Si(有时我们也对一些其他输出 Yi 感兴趣,例如在生成网络的情况下)。 +让我们看看一个简单的 RNN 单元是如何组织的。它接受前一个状态 Si-1 和当前符号 Xi 作为输入,并需要生成输出状态 Si(有时我们也对其他输出 Yi 感兴趣,例如在生成网络中)。 -一个简单的 RNN 单元内部有两个权重矩阵:一个用于转换输入符号(我们称之为 W),另一个用于转换输入状态(H)。在这种情况下,网络的输出计算为 σ(W×Xi+H×Si-1+b),其中 σ 是激活函数,b 是附加偏置。 +一个简单的 RNN 单元内部有两个权重矩阵:一个用于转换输入符号(称为 W),另一个用于转换输入状态(称为 H)。在这种情况下,网络的输出计算公式为 σ(W×Xi+H×Si-1+b),其中 σ 是激活函数,b 是额外的偏置。 RNN 单元结构 > 图片由作者提供 -在许多情况下,输入标记在进入 RNN 之前会通过嵌入层以降低维度。在这种情况下,如果输入向量的维度为 *emb_size*,状态向量为 *hid_size*,则 W 的大小为 *emb_size*×*hid_size*,H 的大小为 *hid_size*×*hid_size*。 +在许多情况下,输入标记会在进入 RNN 之前通过嵌入层以降低维度。在这种情况下,如果输入向量的维度为 *emb_size*,状态向量的维度为 *hid_size*,那么 W 的大小为 *emb_size*×*hid_size*,H 的大小为 *hid_size*×*hid_size*。 -## 长短期记忆(LSTM) +## 长短时记忆网络(LSTM) -经典 RNN 的主要问题之一是所谓的**消失梯度**问题。由于 RNN 是在一次反向传播中端到端训练的,因此它在将误差传播到网络的第一层时遇到困难,因此网络无法学习远距离标记之间的关系。避免这个问题的一种方法是通过使用所谓的**门**引入**显式状态管理**。这种类型有两个著名的架构:**长短期记忆**(LSTM)和**门控循环单元**(GRU)。 +经典 RNN 的主要问题之一是所谓的**梯度消失**问题。由于 RNN 是通过一次反向传播端到端训练的,它难以将误差传播到网络的第一层,因此无法学习远距离标记之间的关系。解决这一问题的一种方法是通过使用所谓的**门控机制**引入**显式状态管理**。有两种著名的架构:**长短时记忆网络**(Long Short Term Memory,LSTM)和**门控循环单元**(Gated Relay Unit,GRU)。 -![展示长短期记忆单元的图片](../../../../../lessons/5-NLP/16-RNN/images/long-short-term-memory-cell.svg) +![显示长短时记忆单元示例的图片](../../../../../lessons/5-NLP/16-RNN/images/long-short-term-memory-cell.svg) > 图片来源待定 -LSTM 网络的组织方式类似于 RNN,但有两个状态在层与层之间传递:实际状态 C 和隐藏向量 H。在每个单元中,隐藏向量 Hi 与输入 Xi 连接在一起,并通过**门**控制状态 C 的变化。每个门都是一个具有 sigmoid 激活的神经网络(输出范围为 [0,1]),在与状态向量相乘时可以被视为按位掩码。上面图片中的门如下(从左到右): +LSTM 网络的组织方式与 RNN 类似,但有两个状态会在层与层之间传递:实际状态 C 和隐藏向量 H。在每个单元中,隐藏向量 Hi 与输入 Xi 连接在一起,并通过**门控机制**控制状态 C 的变化。每个门控机制都是一个带有 sigmoid 激活(输出范围为 [0,1])的神经网络,可以通过与状态向量相乘来理解为逐位掩码。以下是这些门控机制(从左到右): -* **遗忘门**接收隐藏向量并确定我们需要忘记向量 C 的哪些分量,以及哪些分量需要保留。 -* **输入门**从输入和隐藏向量中提取一些信息并将其插入状态中。 -* **输出门**通过带有 *tanh* 激活的线性层转换状态,然后使用隐藏向量 Hi 选择其某些分量以生成新状态 Ci+1。 +* **遗忘门**:接收隐藏向量并决定状态向量 C 的哪些部分需要遗忘,哪些需要保留。 +* **输入门**:从输入和隐藏向量中提取信息并插入状态。 +* **输出门**:通过带有 *tanh* 激活的线性层转换状态,然后使用隐藏向量 Hi 选择状态的某些部分以生成新状态 Ci+1。 -状态 C 的分量可以视为一些可以打开和关闭的标志。例如,当我们在序列中遇到名字 *Alice* 时,我们可能希望假设它指的是一个女性角色,并在状态中提高一个标志,表示我们在句子中有一个女性名词。当我们进一步遇到短语 *and Tom* 时,我们将提高一个标志,表示我们有一个复数名词。因此,通过操控状态,我们可以追踪句子部分的语法属性。 +状态 C 的各个部分可以被视为一些可以开关的标志。例如,当我们在序列中遇到名字 *Alice* 时,可以假设它指代一个女性角色,并在状态中设置一个标志,表示句子中有一个女性名词。当我们进一步遇到短语 *and Tom* 时,可以设置一个标志,表示句子中有复数名词。因此,通过操控状态,我们可以跟踪句子部分的语法属性。 -> ✅ 理解 LSTM 内部机制的一个优秀资源是 Christopher Olah 的这篇精彩文章 [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/)。 +> ✅ 理解 LSTM 内部机制的一个优秀资源是 Christopher Olah 的文章 [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/)。 ## 双向和多层 RNN -我们讨论了单向操作的循环网络,从序列的开始到结束。这看起来很自然,因为它类似于我们阅读和听取语言的方式。然而,由于在许多实际情况下我们可以随机访问输入序列,因此在两个方向上运行循环计算可能是有意义的。这种网络称为**双向** RNN。在处理双向网络时,我们需要两个隐藏状态向量,一个用于每个方向。 +我们已经讨论了单向运行的循环网络,从序列的开头到结尾。这看起来很自然,因为它类似于我们阅读和听取语音的方式。然而,由于在许多实际情况下我们可以随机访问输入序列,运行双向的循环计算可能更有意义。这种网络称为**双向** RNN。在处理双向网络时,我们需要两个隐藏状态向量,每个方向一个。 -循环网络,无论是单向还是双向,都捕捉序列中的某些模式,并可以将其存储到状态向量中或传递到输出中。与卷积网络一样,我们可以在第一个网络之上构建另一个循环层,以捕捉更高层次的模式,并从第一个层提取的低层模式中构建。这引导我们到**多层 RNN**的概念,它由两个或更多的循环网络组成,其中前一层的输出作为输入传递给下一层。 +循环网络,无论是单向还是双向,都能捕捉序列中的某些模式,并将其存储到状态向量中或传递到输出中。与卷积网络类似,我们可以在第一层之上构建另一层循环网络,以捕捉更高级别的模式,并从第一层提取的低级模式中构建。这引出了**多层 RNN** 的概念,它由两个或更多循环网络组成,前一层的输出作为下一层的输入。 -![展示多层长短期记忆 RNN 的图片](../../../../../translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.zh.jpg) +![显示多层长短时记忆 RNN 的图片](../../../../../translated_images/multi-layer-lstm.dd975e29bb2a59fe58b429db833932d734c81f211cad2783797a9608984acb8c.zh.jpg) -*图片来源于 [这篇精彩的文章](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) by Fernando López* +*图片来源:[这篇精彩的文章](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) 作者 Fernando López* ## ✍️ 练习:嵌入 -继续在以下笔记本中学习: +通过以下笔记本继续学习: * [使用 PyTorch 的 RNN](../../../../../lessons/5-NLP/16-RNN/RNNPyTorch.ipynb) * [使用 TensorFlow 的 RNN](../../../../../lessons/5-NLP/16-RNN/RNNTF.ipynb) -## 结论 +## 总结 -在本单元中,我们看到 RNN 可用于序列分类,但实际上它们可以处理更多任务,如文本生成、机器翻译等。我们将在下一个单元中考虑这些任务。 +在本单元中,我们了解到 RNN 可以用于序列分类,但实际上它们可以处理更多任务,例如文本生成、机器翻译等。我们将在下一单元中讨论这些任务。 ## 🚀 挑战 -阅读一些关于 LSTM 的文献,并考虑它们的应用: +阅读一些关于 LSTM 的文献并考虑其应用: -- [网格长短期记忆](https://arxiv.org/pdf/1507.01526v1.pdf) -- [展示、关注与讲述:具有视觉注意的神经图像字幕生成](https://arxiv.org/pdf/1502.03044v2.pdf) +- [网格长短时记忆](https://arxiv.org/pdf/1507.01526v1.pdf) +- [展示、关注和讲述:带视觉注意力的神经图像字幕生成](https://arxiv.org/pdf/1502.03044v2.pdf) ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/216) ## 复习与自学 -- [理解 LSTM 网络](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) by Christopher Olah. +- [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) 作者 Christopher Olah。 ## [作业:笔记本](assignment.md) **免责声明**: -本文件是使用机器翻译的人工智能翻译服务进行翻译的。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业的人类翻译。我们对因使用本翻译而导致的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/16-RNN/assignment.md b/translations/zh/lessons/5-NLP/16-RNN/assignment.md index 44b45d04..ea9ea3ed 100644 --- a/translations/zh/lessons/5-NLP/16-RNN/assignment.md +++ b/translations/zh/lessons/5-NLP/16-RNN/assignment.md @@ -1,6 +1,15 @@ + # 作业:笔记本 -使用与本课程相关的笔记本(无论是 PyTorch 版本还是 TensorFlow 版本),使用您自己的数据集重新运行它们,可能是来自 Kaggle 的数据集,并确保注明出处。重写笔记本以突出您自己的发现。尝试使用不同类型的数据集,并记录您的发现,使用文本如 [这个关于天气推文的 Kaggle 竞赛数据集](https://www.kaggle.com/competitions/crowdflower-weather-twitter/data?select=train.csv)。 +使用与本课程相关的笔记本(可以是 PyTorch 或 TensorFlow 版本),使用您自己的数据集重新运行它们,例如来自 Kaggle 的数据集,并注明出处。重写笔记本以突出您自己的发现。尝试使用不同类型的数据集并记录您的发现,例如使用类似 [这个关于天气推文的 Kaggle 比赛数据集](https://www.kaggle.com/competitions/crowdflower-weather-twitter/data?select=train.csv) 的文本。 -**免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/17-GenerativeNetworks/README.md b/translations/zh/lessons/5-NLP/17-GenerativeNetworks/README.md index 5465a6e9..2574a970 100644 --- a/translations/zh/lessons/5-NLP/17-GenerativeNetworks/README.md +++ b/translations/zh/lessons/5-NLP/17-GenerativeNetworks/README.md @@ -1,31 +1,40 @@ + # 生成网络 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/117) -递归神经网络(RNN)及其门控单元变体,如长短期记忆单元(LSTM)和门控递归单元(GRU),为语言建模提供了一种机制,因为它们能够学习单词顺序并对序列中的下一个单词进行预测。这使得我们能够将RNN用于**生成任务**,例如普通文本生成、机器翻译甚至图像描述。 +循环神经网络(RNN)及其门控单元变体(如长短期记忆单元 LSTM 和门控循环单元 GRU)提供了一种语言建模的机制,因为它们可以学习单词的顺序并预测序列中下一个单词。这使得我们可以使用 RNN 执行**生成任务**,例如普通文本生成、机器翻译,甚至图像描述。 -> ✅ 想想你在输入时受益于文本补全等生成任务的所有时刻。研究一下你最喜欢的应用程序,看看它们是否利用了RNN。 +> ✅ 想一想你在使用文本补全等生成任务时受益的场景。研究一下你喜欢的应用程序,看看它们是否利用了 RNN。 -在我们在上一单元中讨论的RNN架构中,每个RNN单元都生成下一个隐藏状态作为输出。然而,我们还可以为每个递归单元添加另一个输出,这将允许我们输出一个**序列**(其长度与原始序列相等)。此外,我们可以使用不在每一步接受输入的RNN单元,仅使用一些初始状态向量,然后生成一系列输出。 +在上一单元中讨论的 RNN 架构中,每个 RNN 单元会生成下一个隐藏状态作为输出。然而,我们也可以为每个循环单元添加另一个输出,这样就可以输出一个**序列**(长度与原始序列相等)。此外,我们可以使用不在每一步接受输入的 RNN 单元,而是仅接受一个初始状态向量,然后生成一系列输出。 -这允许出现不同的神经网络架构,如下图所示: +这使得可以构建不同的神经网络架构,如下图所示: -![展示常见递归神经网络模式的图像。](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.zh.jpg) +![展示常见循环神经网络模式的图片。](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.zh.jpg) -> 图片来自博客文章 [递归神经网络的非凡有效性](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) 由 [Andrej Karpaty](http://karpathy.github.io/) +> 图片来源:[Andrej Karpaty](http://karpathy.github.io/) 的博客文章 [Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) * **一对一** 是传统的神经网络,具有一个输入和一个输出 -* **一对多** 是一种生成架构,接受一个输入值,并生成一系列输出值。例如,如果我们想训练一个**图像描述**网络来生成图片的文本描述,我们可以将一张图片作为输入,通过CNN获取其隐藏状态,然后让递归链逐字生成描述 -* **多对一** 对应于我们在上一单元中描述的RNN架构,例如文本分类 -* **多对多**,或**序列到序列**,对应于诸如**机器翻译**的任务,其中第一个RNN从输入序列中收集所有信息到隐藏状态,另一个RNN链将此状态展开为输出序列。 +* **一对多** 是一种生成架构,接受一个输入值,并生成一系列输出值。例如,如果我们想训练一个**图像描述**网络,该网络会生成图片的文字描述,我们可以将图片作为输入,通过 CNN 获取其隐藏状态,然后通过一个循环链逐字生成描述 +* **多对一** 对应于我们在上一单元中描述的 RNN 架构,例如文本分类 +* **多对多** 或 **序列到序列** 对应于任务如**机器翻译**,其中第一个 RNN 将输入序列的所有信息收集到隐藏状态中,另一个 RNN 链将该状态展开为输出序列。 -在本单元中,我们将专注于简单的生成模型,帮助我们生成文本。为了简单起见,我们将使用字符级标记化。 +在本单元中,我们将专注于帮助我们生成文本的简单生成模型。为了简化,我们将使用字符级标记化。 -我们将逐步训练这个RNN来生成文本。在每一步中,我们将取长度为 `nchars` 的字符序列,并要求网络为每个输入字符生成下一个输出字符: +我们将训练这个 RNN 逐步生成文本。在每一步中,我们将取一个长度为 `nchars` 的字符序列,并让网络为每个输入字符生成下一个输出字符: -![展示单词 'HELLO' 的示例 RNN 生成。](../../../../../translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.zh.png) +![展示 RNN 生成单词 'HELLO' 的示例图片。](../../../../../translated_images/rnn-generate.56c54afb52f9781d63a7c16ea9c1b86cb70e6e1eae6a742b56b7b37468576b17.zh.png) -在生成文本时(在推理过程中),我们从一些**提示**开始,该提示通过RNN单元生成其中间状态,然后从这个状态开始生成。我们一次生成一个字符,并将状态和生成的字符传递给另一个RNN单元以生成下一个字符,直到生成足够的字符。 +在生成文本(推理阶段)时,我们从某个**提示**开始,将其传递给 RNN 单元以生成中间状态,然后从该状态开始生成。我们一次生成一个字符,并将状态和生成的字符传递给另一个 RNN 单元以生成下一个字符,直到生成足够的字符。 @@ -33,47 +42,47 @@ ## ✍️ 练习:生成网络 -在以下笔记本中继续你的学习: +通过以下笔记本继续学习: * [使用 PyTorch 的生成网络](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb) * [使用 TensorFlow 的生成网络](../../../../../lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb) ## 软文本生成与温度 -每个RNN单元的输出是字符的概率分布。如果我们总是选择概率最高的字符作为生成文本中的下一个字符,文本往往会在相同的字符序列之间“循环”,就像这个例子: +每个 RNN 单元的输出是一个字符的概率分布。如果我们总是选择概率最高的字符作为生成文本的下一个字符,文本往往会在相同的字符序列之间“循环”,如下例所示: ``` today of the second the company and a second the company ... ``` -然而,如果我们查看下一个字符的概率分布,可能会发现几个最高概率之间的差异并不大,例如,一个字符的概率为0.2,另一个为0.19等。例如,在查找序列 '*play*' 中的下一个字符时,下一个字符可以是空格或**e**(如单词 *player* 中)。 +然而,如果我们查看下一个字符的概率分布,可能会发现几个最高概率之间的差异并不大,例如一个字符的概率是 0.2,另一个是 0.19 等。例如,在寻找序列 '*play*' 的下一个字符时,下一个字符可能是空格,也可能是 **e**(如单词 *player*)。 -这使我们得出结论,选择概率更高的字符并不总是“公平”,因为选择第二高的字符仍然可能导致有意义的文本。更明智的做法是从网络输出给出的概率分布中**采样**字符。我们还可以使用一个参数,**温度**,这将平坦化概率分布,以便我们想增加更多随机性,或者使其更陡峭,如果我们想更贴近最高概率的字符。 +这让我们得出结论:并不总是“公平”地选择概率最高的字符,因为选择第二高的字符仍然可能生成有意义的文本。更明智的做法是从网络输出的概率分布中**采样**字符。我们还可以使用一个参数 **温度** 来调整概率分布的平坦程度。如果我们希望增加随机性,可以使分布更平坦;如果希望更倾向于最高概率的字符,可以使分布更陡峭。 -探索上述笔记本中如何实现这种软文本生成。 +在上面链接的笔记本中探索软文本生成的实现方式。 -## 结论 +## 总结 -虽然文本生成本身可能有用,但主要的好处来自于使用RNN从某个初始特征向量生成文本的能力。例如,文本生成作为机器翻译的一部分(在这种情况下,*编码器*的状态向量用于生成或*解码*翻译消息),或者生成图像的文本描述(在这种情况下,特征向量来自CNN提取器)。 +虽然文本生成本身可能很有用,但其主要优势在于能够从某个初始特征向量使用 RNN 生成文本。例如,文本生成可以作为机器翻译的一部分(序列到序列,在这种情况下,*编码器* 的状态向量用于生成或*解码*翻译后的消息),或者生成图像的文字描述(在这种情况下,特征向量来自 CNN 提取器)。 ## 🚀 挑战 -在 Microsoft Learn 上参加一些关于这个主题的课程 +在 Microsoft Learn 上学习相关课程 -* 使用 [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/6-generative-networks/?WT.mc_id=academic-77998-cacaste)/[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/5-generative-networks/?WT.mc_id=academic-77998-cacaste) 的文本生成 +* 使用 [PyTorch](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-pytorch/6-generative-networks/?WT.mc_id=academic-77998-cacaste)/[TensorFlow](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/5-generative-networks/?WT.mc_id=academic-77998-cacaste) 进行文本生成 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/217) ## 复习与自学 -以下是一些扩展你知识的文章 +以下文章可以扩展你的知识 -* 使用马尔可夫链、LSTM 和 GPT-2 的文本生成不同方法:[博客文章](https://towardsdatascience.com/text-generation-gpt-2-lstm-markov-chain-9ea371820e1e) -* [Keras 文档](https://keras.io/examples/generative/lstm_character_level_text_generation/) 中的文本生成示例 +* 使用马尔可夫链、LSTM 和 GPT-2 的不同文本生成方法:[博客文章](https://towardsdatascience.com/text-generation-gpt-2-lstm-markov-chain-9ea371820e1e) +* [Keras 文档](https://keras.io/examples/generative/lstm_character_level_text_generation/)中的文本生成示例 ## [作业](lab/README.md) -我们已经看到如何逐字符生成文本。在实验室中,你将探索词级文本生成。 +我们已经了解了如何逐字符生成文本。在实验中,你将探索逐单词的文本生成。 -**免责声明**: -本文件是使用机器翻译AI服务进行翻译的。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而导致的任何误解或错误解释不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/17-GenerativeNetworks/lab/README.md b/translations/zh/lessons/5-NLP/17-GenerativeNetworks/lab/README.md index 83bd10c6..0ffe5659 100644 --- a/translations/zh/lessons/5-NLP/17-GenerativeNetworks/lab/README.md +++ b/translations/zh/lessons/5-NLP/17-GenerativeNetworks/lab/README.md @@ -1,14 +1,23 @@ -# 基于 RNN 的词级文本生成 + +# 使用 RNN 进行词级文本生成 -来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验作业。 +来自 [AI 初学者课程](https://github.com/microsoft/ai-for-beginners) 的实验任务。 ## 任务 -在这个实验中,您需要选择一本书,并将其作为数据集来训练词级文本生成器。 +在本实验中,你需要选择任意一本书,并将其用作数据集来训练一个词级文本生成器。 ## 数据集 -您可以使用任何一本书。您可以在 [Project Gutenberg](https://www.gutenberg.org/) 找到许多免费的文本,例如,这里有一本由 Lewis Carroll 撰写的 [爱丽丝梦游仙境](https://www.gutenberg.org/files/11/11-0.txt) 的直接链接。 +你可以使用任何书籍作为数据集。你可以在 [Project Gutenberg](https://www.gutenberg.org/) 找到许多免费的文本,例如,这里是 Lewis Carroll 的 [爱丽丝梦游仙境](https://www.gutenberg.org/files/11/11-0.txt) 的直接链接。 **免责声明**: -本文件是使用机器翻译的人工智能翻译服务进行翻译的。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业的人类翻译。我们对因使用此翻译而产生的任何误解或错误解释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或误读承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/18-Transformers/README.md b/translations/zh/lessons/5-NLP/18-Transformers/README.md new file mode 100644 index 00000000..7d3b6418 --- /dev/null +++ b/translations/zh/lessons/5-NLP/18-Transformers/README.md @@ -0,0 +1,121 @@ + +# 注意力机制与Transformer + +## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/118) + +在自然语言处理(NLP)领域中,**机器翻译**是一个非常重要的问题,它是支持像Google翻译这样的工具的核心任务。在本节中,我们将重点讨论机器翻译,或者更广泛地说,任何*序列到序列*任务(也称为**句子转换**)。 + +使用RNN时,序列到序列任务通过两个循环网络实现,其中一个网络是**编码器**,将输入序列压缩为一个隐藏状态,而另一个网络是**解码器**,将隐藏状态展开为翻译结果。然而,这种方法存在一些问题: + +* 编码器网络的最终状态很难记住句子的开头部分,因此对于长句子的模型质量较差。 +* 序列中的所有单词对结果的影响是相同的。然而,实际上,输入序列中的某些特定单词对输出序列的影响往往比其他单词更大。 + +**注意力机制**提供了一种方法,可以为每个输入向量对RNN的每个输出预测的上下文影响赋予不同的权重。其实现方式是创建输入RNN的中间状态与输出RNN之间的快捷连接。这样,在生成输出符号yt时,我们会考虑所有输入隐藏状态hi,并赋予不同的权重系数αt,i。 + +![显示带有加性注意力层的编码器/解码器模型的图片](../../../../../translated_images/encoder-decoder-attention.7a726296894fb567aa2898c94b17b3289087f6705c11907df8301df9e5eeb3de.zh.png) + +> [Bahdanau等人,2015](https://arxiv.org/pdf/1409.0473.pdf)中的加性注意力机制编码器-解码器模型,图片来源于[这篇博客](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html) + +注意力矩阵{αi,j}表示某些输入单词在生成输出序列中某个单词时的作用程度。以下是一个这样的矩阵示例: + +![显示RNNsearch-50找到的示例对齐的图片,来源于Bahdanau - arviz.org](../../../../../translated_images/bahdanau-fig3.09ba2d37f202a6af11de6c82d2d197830ba5f4528d9ea430eb65fd3a75065973.zh.png) + +> 图片来源于[Bahdanau等人,2015](https://arxiv.org/pdf/1409.0473.pdf)(图3) + +注意力机制是当前或接近当前NLP领域最先进技术的核心。然而,添加注意力机制会显著增加模型参数的数量,这导致了RNN的扩展问题。RNN扩展的一个关键限制是其循环特性使得训练难以批量化和并行化。在RNN中,序列的每个元素需要按顺序处理,这意味着它无法轻松并行化。 + +![带注意力的编码器解码器](../../../../../lessons/5-NLP/18-Transformers/images/EncDecAttention.gif) + +> 图片来源于[Google的博客](https://research.googleblog.com/2016/09/a-neural-network-for-machine.html) + +注意力机制的采用结合了这一限制,促成了我们今天所知的最先进的Transformer模型的诞生,例如BERT和Open-GPT3。 + +## Transformer模型 + +Transformer的核心思想之一是避免RNN的顺序特性,创建一个在训练期间可并行化的模型。这通过以下两种方法实现: + +* 位置编码 +* 使用自注意力机制捕获模式,而不是使用RNN(或CNN)(这也是为什么介绍Transformer的论文被称为*[Attention is all you need](https://arxiv.org/abs/1706.03762)*) + +### 位置编码/嵌入 + +位置编码的思想如下: +1. 使用RNN时,标记的相对位置由步数表示,因此不需要显式表示。 +2. 然而,一旦我们切换到注意力机制,我们需要知道序列中标记的相对位置。 +3. 为了获得位置编码,我们将标记序列与序列中的标记位置序列(即数字序列0,1, ...)结合。 +4. 然后我们将标记位置与标记嵌入向量混合。为了将位置(整数)转换为向量,我们可以使用不同的方法: + +* 可训练的嵌入,类似于标记嵌入。这是我们在这里考虑的方法。我们在标记和它们的位置上应用嵌入层,得到相同维度的嵌入向量,然后将它们相加。 +* 固定位置编码函数,如原始论文中提出的。 + + + +> 图片由作者提供 + +通过位置嵌入,我们得到的结果既嵌入了原始标记,也嵌入了它在序列中的位置。 + +### 多头自注意力 + +接下来,我们需要在序列中捕获一些模式。为此,Transformer使用了**自注意力**机制,本质上是将注意力应用于相同的输入和输出序列。应用自注意力使我们能够考虑句子中的**上下文**,并查看哪些单词是相互关联的。例如,它可以帮助我们识别代词(如*it*)所指代的单词,并将上下文纳入考虑: + +![](../../../../../translated_images/CoreferenceResolution.861924d6d384a7d68d8d0039d06a71a151f18a796b8b1330239d3590bd4947eb.zh.png) + +> 图片来源于[Google博客](https://research.googleblog.com/2017/08/transformer-novel-neural-network.html) + +在Transformer中,我们使用**多头注意力**,以赋予网络捕获多种依赖关系的能力,例如长期与短期的单词关系、共指关系与其他关系等。 + +[TensorFlow Notebook](../../../../../lessons/5-NLP/18-Transformers/TransformersTF.ipynb)中包含了Transformer层实现的更多细节。 + +### 编码器-解码器注意力 + +在Transformer中,注意力机制用于两个地方: + +* 使用自注意力捕获输入文本中的模式 +* 执行序列翻译——即编码器和解码器之间的注意力层。 + +编码器-解码器注意力与RNN中使用的注意力机制非常相似,如本节开头所述。以下动画图解说明了编码器-解码器注意力的作用。 + +![显示Transformer模型中评估如何执行的动画GIF](../../../../../lessons/5-NLP/18-Transformers/images/transformer-animated-explanation.gif) + +由于每个输入位置可以独立映射到每个输出位置,Transformer比RNN更容易并行化,这使得更大、更具表现力的语言模型成为可能。每个注意力头可以用来学习单词之间的不同关系,从而改进下游的自然语言处理任务。 + +## BERT + +**BERT**(Bidirectional Encoder Representations from Transformers)是一个非常大的多层Transformer网络,*BERT-base*有12层,*BERT-large*有24层。该模型首先在大规模文本数据(维基百科+书籍)上进行无监督预训练(预测句子中的被遮掩单词)。在预训练期间,模型吸收了大量的语言理解能力,这些能力可以通过微调其他数据集加以利用。这一过程被称为**迁移学习**。 + +![图片来源于http://jalammar.github.io/illustrated-bert/](../../../../../translated_images/jalammarBERT-language-modeling-masked-lm.34f113ea5fec4362e39ee4381aab7cad06b5465a0b5f053a0f2aa05fbe14e746.zh.png) + +> 图片[来源](http://jalammar.github.io/illustrated-bert/) + +## ✍️ 练习:Transformer + +通过以下笔记本继续学习: + +* [PyTorch中的Transformer](../../../../../lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb) +* [TensorFlow中的Transformer](../../../../../lessons/5-NLP/18-Transformers/TransformersTF.ipynb) + +## 总结 + +在本课中,你学习了Transformer和注意力机制,它们是NLP工具箱中的重要工具。Transformer架构有许多变体,包括BERT、DistilBERT、BigBird、OpenGPT3等,这些模型可以进行微调。[HuggingFace包](https://github.com/huggingface/)提供了一个用于训练这些架构的库,支持PyTorch和TensorFlow。 + +## 🚀 挑战 + +## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/218) + +## 复习与自学 + +* [博客文章](https://mchromiak.github.io/articles/2017/Sep/12/Transformer-Attention-is-all-you-need/),解释了经典的[Attention is all you need](https://arxiv.org/abs/1706.03762)论文。 +* [一系列博客文章](https://towardsdatascience.com/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452),详细解释了Transformer的架构。 + +## [作业](assignment.md) + +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/18-Transformers/assignment.md b/translations/zh/lessons/5-NLP/18-Transformers/assignment.md index 9d971689..d94106da 100644 --- a/translations/zh/lessons/5-NLP/18-Transformers/assignment.md +++ b/translations/zh/lessons/5-NLP/18-Transformers/assignment.md @@ -1,6 +1,15 @@ -# 任务:变换器 + +# 作业:Transformers -在 HuggingFace 上实验变换器!尝试一些他们提供的脚本,以便与他们网站上可用的各种模型进行互动:https://huggingface.co/docs/transformers/run_scripts。尝试他们的一个数据集,然后从本课程或 Kaggle 导入您自己的数据集,看看您能否生成有趣的文本。制作一个包含您发现的笔记本。 +在 HuggingFace 上尝试使用 Transformers!试试他们提供的一些脚本,来操作他们网站上提供的各种模型:https://huggingface.co/docs/transformers/run_scripts。尝试使用他们的一个数据集,然后从本课程或 Kaggle 导入一个你自己的数据集,看看你是否能生成有趣的文本。制作一个包含你发现的内容的笔记本。 -**免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。对于因使用此翻译而产生的任何误解或误读,我们不承担任何责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/19-NER/README.md b/translations/zh/lessons/5-NLP/19-NER/README.md index 4b598732..9442e053 100644 --- a/translations/zh/lessons/5-NLP/19-NER/README.md +++ b/translations/zh/lessons/5-NLP/19-NER/README.md @@ -1,83 +1,94 @@ + # 命名实体识别 -到目前为止,我们主要集中在一个自然语言处理(NLP)任务——分类。然而,还有其他可以通过神经网络完成的NLP任务。其中之一是**[命名实体识别](https://wikipedia.org/wiki/Named-entity_recognition)**(NER),它涉及在文本中识别特定的实体,例如地点、人物姓名、日期时间区间、化学公式等。 +到目前为止,我们主要集中在一个自然语言处理任务——分类。然而,还有其他可以通过神经网络完成的自然语言处理任务。其中一个任务是**[命名实体识别](https://wikipedia.org/wiki/Named-entity_recognition)** (NER),它处理识别文本中的特定实体,例如地点、人物姓名、日期时间区间、化学公式等。 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/119) -## 使用NER的示例 +## 使用 NER 的示例 -假设您想开发一个自然语言聊天机器人,类似于亚马逊Alexa或谷歌助手。智能聊天机器人的工作方式是通过对输入句子进行文本分类来*理解*用户的需求。这种分类的结果称为**意图**,它决定了聊天机器人应该执行什么操作。 +假设你想开发一个类似于亚马逊 Alexa 或谷歌助手的自然语言聊天机器人。智能聊天机器人的工作方式是通过对输入句子进行文本分类来“理解”用户的需求。分类的结果是所谓的**意图**,它决定了聊天机器人应该执行的操作。 Bot NER -> 作者提供的图像 +> 图片由作者提供 -然而,用户可能会在短语中提供一些参数。例如,在询问天气时,她可能会指定一个地点或日期。聊天机器人应该能够理解这些实体,并在执行操作之前相应地填写参数槽。这正是NER发挥作用的地方。 +然而,用户可能会在短语中提供一些参数。例如,当询问天气时,她可能会指定一个地点或日期。机器人应该能够理解这些实体,并在执行操作之前相应地填充参数槽。这正是 NER 的作用所在。 -> ✅ 另一个例子是[分析科学医学论文](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)。我们需要关注的主要内容是特定的医学术语,例如疾病和药物成分。虽然可以通过子串搜索提取少量疾病,但更复杂的实体,如化合物和药物名称,则需要更复杂的方法。 +> ✅ 另一个例子是[分析科学医学论文](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)。我们需要寻找的主要内容是特定的医学术语,例如疾病和医学物质。虽然少量疾病可能可以通过子字符串搜索提取,但更复杂的实体,例如化学化合物和药物名称,则需要更复杂的方法。 -## NER作为标记分类 +## NER 作为标记分类 -NER模型本质上是**标记分类模型**,因为对于每个输入标记,我们需要决定它是否属于某个实体,如果是,属于哪个实体类别。 +NER 模型本质上是**标记分类模型**,因为对于每个输入标记,我们需要决定它是否属于某个实体,如果属于——属于哪个实体类别。 考虑以下论文标题: -**三尖瓣反流**和**碳酸锂****毒性**在新生儿中的表现。 +**三尖瓣返流**和**碳酸锂**在新生儿中的**毒性**。 这里的实体是: -* 三尖瓣反流是一种疾病 (`DIS`) +* 三尖瓣返流是一种疾病 (`DIS`) * 碳酸锂是一种化学物质 (`CHEM`) * 毒性也是一种疾病 (`DIS`) -请注意,一个实体可以跨越多个标记。而且,如此例所示,我们需要区分两个连续的实体。因此,通常会为每个实体使用两个类别——一个指定实体的第一个标记(通常使用`B-`前缀,表示**b**eginning),另一个表示实体的后续部分(`I-`,表示**i**nner token)。我们还使用`O`作为表示所有**o**ther标记的类别。这种标记方式称为[BIO标记](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging))(或IOB)。标记后的标题如下所示: +注意,一个实体可以跨越多个标记。而且,如本例所示,我们需要区分两个连续的实体。因此,通常为每个实体使用两个类别——一个指定实体的第一个标记(通常使用 `B-` 前缀,表示**开始**),另一个表示实体的延续部分(`I-`,表示**内部标记**)。我们还使用 `O` 作为类别来表示所有**其他**标记。这种标记标注被称为 [BIO 标注](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging))(或 IOB)。标注后,我们的标题将如下所示: -标记 | 标签 +标记 | 标注 ------|----- 三尖瓣 | B-DIS -反流 | I-DIS +返流 | I-DIS 和 | O -碳酸锂 | B-CHEM +碳酸 | B-CHEM +锂 | I-CHEM 毒性 | B-DIS 在 | O -一个 | O 新生儿 | O 中 | O -。 | O +的 | O +毒性 | O +. | O -由于我们需要在标记和类别之间建立一一对应关系,因此可以从这张图中训练一个最右侧的**多对多**神经网络模型: +由于我们需要在标记和类别之间建立一一对应关系,我们可以从下图中训练一个最右侧的**多对多**神经网络模型: -![显示常见递归神经网络模式的图像。](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.zh.jpg) +![展示常见循环神经网络模式的图片。](../../../../../translated_images/unreasonable-effectiveness-of-rnn.541ead816778f42dce6c42d8a56c184729aa2378d059b851be4ce12b993033df.zh.jpg) -> *图像来自[这篇博文](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)作者是[Andrej Karpathy](http://karpathy.github.io/)。NER标记分类模型对应于此图中的最右侧网络架构。* +> *图片来自 [这篇博客文章](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) 作者 [Andrej Karpathy](http://karpathy.github.io/)。NER 标记分类模型对应于此图片中的最右侧网络架构。* -## 训练NER模型 +## 训练 NER 模型 -由于NER模型本质上是一个标记分类模型,因此我们可以使用已经熟悉的RNN来完成此任务。在这种情况下,每个递归网络块将返回标记ID。以下示例笔记本展示了如何训练LSTM进行标记分类。 +由于 NER 模型本质上是一个标记分类模型,我们可以使用我们已经熟悉的 RNN 来完成这个任务。在这种情况下,每个循环网络块将返回标记 ID。以下示例笔记本展示了如何训练 LSTM 进行标记分类。 ## ✍️ 示例笔记本:NER -在以下笔记本中继续您的学习: +通过以下笔记本继续学习: -* [使用TensorFlow进行NER](../../../../../lessons/5-NLP/19-NER/NER-TF.ipynb) +* [使用 TensorFlow 的 NER](../../../../../lessons/5-NLP/19-NER/NER-TF.ipynb) -## 结论 +## 总结 -NER模型是一个**标记分类模型**,这意味着它可以用于执行标记分类。这是NLP中一个非常常见的任务,有助于识别文本中的特定实体,包括地点、名称、日期等。 +NER 模型是一种**标记分类模型**,这意味着它可以用于执行标记分类。这是自然语言处理中的一个非常常见的任务,帮助识别文本中的特定实体,包括地点、姓名、日期等。 ## 🚀 挑战 -完成下面链接的作业,以训练一个医学术语的命名实体识别模型,然后在不同的数据集上进行尝试。 +完成以下链接的作业,训练一个用于医学术语的命名实体识别模型,然后尝试在不同的数据集上应用它。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/219) ## 复习与自学 -阅读博客[递归神经网络的非凡有效性](http://karpathy.github.io/2015/05/21/rnn-effectiveness/),并按照文章中的进一步阅读部分深入了解。 +阅读博客 [循环神经网络的非凡有效性](http://karpathy.github.io/2015/05/21/rnn-effectiveness/),并按照文章中的进一步阅读部分加深你的知识。 ## [作业](lab/README.md) -在本课的作业中,您需要训练一个医学实体识别模型。您可以从训练本课中描述的LSTM模型开始,然后继续使用BERT变换模型。阅读[说明](lab/README.md)以获取所有详细信息。 +在本课的作业中,你需要训练一个医学实体识别模型。你可以从本课描述的 LSTM 模型训练开始,然后继续使用 BERT 转换器模型。阅读[说明](lab/README.md)以获取所有详细信息。 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/19-NER/lab/README.md b/translations/zh/lessons/5-NLP/19-NER/lab/README.md index 9565c528..28cc4e55 100644 --- a/translations/zh/lessons/5-NLP/19-NER/lab/README.md +++ b/translations/zh/lessons/5-NLP/19-NER/lab/README.md @@ -1,14 +1,23 @@ -# NER + +# 命名实体识别 (NER) -来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验作业。 +来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验任务。 ## 任务 -在这个实验中,您需要训练一个用于医学术语的命名实体识别模型。 +在本实验中,你需要训练一个用于医学术语的命名实体识别模型。 ## 数据集 -为了训练 NER 模型,我们需要一个标注良好的包含医学实体的数据集。[BC5CDR 数据集](https://biocreative.bioinformatics.udel.edu/tasks/biocreative-v/track-3-cdr/) 包含来自 1500 多篇论文的标注疾病和化学实体。您可以在他们的网站注册后下载数据集。 +为了训练 NER 模型,我们需要一个标注良好的包含医学实体的数据集。[BC5CDR 数据集](https://biocreative.bioinformatics.udel.edu/tasks/biocreative-v/track-3-cdr/) 包含了从 1500 多篇论文中提取的疾病和化学物质实体。你可以在其网站注册后下载该数据集。 BC5CDR 数据集的格式如下: @@ -21,17 +30,17 @@ BC5CDR 数据集的格式如下: ... ``` -在这个数据集中,前两行是论文的标题和摘要,接下来是单个实体,包含在标题+摘要块中的起始和结束位置。除了实体类型,您还将获得该实体在某个医学本体中的本体 ID。 +在这个数据集中,第一行和第二行分别是论文标题和摘要,接下来是各个实体的信息,包括它们在标题+摘要块中的起始和结束位置。除了实体类型外,你还可以获得该实体在某些医学本体中的本体 ID。 -您需要编写一些 Python 代码将其转换为 BIO 编码。 +你需要编写一些 Python 代码,将这些数据转换为 BIO 编码格式。 ## 网络 -第一次尝试 NER 可以使用 LSTM 网络,就像您在课程中看到的例子一样。然而,在 NLP 任务中,[变压器架构](https://en.wikipedia.org/wiki/Transformer_(machine_learning_model)),特别是 [BERT 语言模型](https://en.wikipedia.org/wiki/BERT_(language_model)) 表现得更好。预训练的 BERT 模型理解语言的一般结构,并且可以通过相对较小的数据集和计算成本进行微调以适应特定任务。 +第一次尝试 NER 时,可以使用 LSTM 网络,就像你在课程中看到的示例一样。然而,在 NLP 任务中,[Transformer 架构](https://en.wikipedia.org/wiki/Transformer_(machine_learning_model)),特别是 [BERT 语言模型](https://en.wikipedia.org/wiki/BERT_(language_model)),通常能取得更好的效果。预训练的 BERT 模型能够理解语言的基本结构,并且可以通过相对较小的数据集和计算成本针对特定任务进行微调。 -由于我们计划将 NER 应用到医学场景中,使用在医学文本上训练的 BERT 模型是合理的。微软研究院发布了一个名为 [PubMedBERT][PubMedBERT] 的预训练模型 ([publication][PubMedBERT-Pub]),该模型是使用来自 [PubMed](https://pubmed.ncbi.nlm.nih.gov/) 仓库的文本进行微调的。 +由于我们计划将 NER 应用于医学场景,因此使用在医学文本上训练的 BERT 模型是合理的。微软研究院发布了一个名为 [PubMedBERT][PubMedBERT] 的预训练模型([相关论文][PubMedBERT-Pub]),该模型使用 [PubMed](https://pubmed.ncbi.nlm.nih.gov/) 仓库中的文本进行了微调。 -训练变压器模型的*事实*标准是 [Hugging Face Transformers](https://huggingface.co/) 库。它还包含一个由社区维护的预训练模型库,包括 PubMedBERT。要加载和使用这个模型,我们只需几行代码: +训练 Transformer 模型的事实标准是 [Hugging Face Transformers](https://huggingface.co/) 库。该库还包含一个由社区维护的预训练模型仓库,其中包括 PubMedBERT。加载和使用该模型只需要几行代码: ```python model_name = "microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract" @@ -40,11 +49,11 @@ tokenizer = AutoTokenizer.from_pretrained(model_name) model = BertForTokenClassification.from_pretrained(model_name, classes) ``` -这将给我们提供 `model` itself, built for token classification task using `classes` number of classes, as well as `tokenizer` 对象,可以将输入文本拆分为标记。您需要将数据集转换为 BIO 格式,同时考虑 PubMedBERT 的分词。您可以使用 [这段 Python 代码](https://gist.github.com/shwars/580b55684be3328eb39ecf01b9cbbd88) 作为灵感。 +这段代码为我们提供了一个 `model` 对象,用于基于 `classes` 数量的类别进行标注任务,以及一个 `tokenizer` 对象,用于将输入文本分割为 token。你需要将数据集转换为 BIO 格式,同时考虑到 PubMedBERT 的分词方式。你可以参考 [这段 Python 代码](https://gist.github.com/shwars/580b55684be3328eb39ecf01b9cbbd88) 来获取灵感。 ## 收获 -这个任务非常接近您如果想深入了解大量自然语言文本时可能会遇到的实际任务。在我们的案例中,我们可以将训练好的模型应用于 [与 COVID 相关的论文数据集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge),看看我们能够获得哪些洞察。 [这篇博客文章](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/) 和 [这篇论文](https://www.mdpi.com/2504-2289/6/1/4) 描述了可以在这个论文语料库上使用 NER 进行的研究。 +这个任务非常接近实际工作中可能遇到的任务,尤其是当你希望从大量自然语言文本中获取更多洞见时。在我们的案例中,我们可以将训练好的模型应用于 [COVID 相关论文数据集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge),看看能从中获取哪些洞见。[这篇博客文章](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/) 和 [这篇论文](https://www.mdpi.com/2504-2289/6/1/4) 描述了可以使用 NER 对该论文语料库进行的研究。 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/20-LangModels/README.md b/translations/zh/lessons/5-NLP/20-LangModels/README.md new file mode 100644 index 00000000..655899ae --- /dev/null +++ b/translations/zh/lessons/5-NLP/20-LangModels/README.md @@ -0,0 +1,64 @@ + +# 预训练大型语言模型 + +在我们之前的所有任务中,我们都使用标注数据集训练神经网络来完成特定任务。而对于像 BERT 这样的大型 Transformer 模型,我们通过自监督的方式进行语言建模,构建一个语言模型,然后通过进一步的领域特定训练将其专门化用于特定的下游任务。然而,研究表明,大型语言模型甚至可以在没有任何领域特定训练的情况下解决许多任务。这类能够实现这一点的模型家族被称为 **GPT**:生成式预训练 Transformer。 + +## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/120) + +## 文本生成与困惑度 + +神经网络能够在没有下游训练的情况下完成通用任务的想法,最早在论文 [《语言模型是无监督的多任务学习者》](https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf) 中提出。其核心思想是,许多其他任务可以通过**文本生成**来建模,因为理解文本本质上意味着能够生成文本。由于模型在包含人类知识的大量文本上进行了训练,它也因此对各种主题变得熟悉。 + +> 理解并生成文本也意味着对周围世界有所了解。人类在很大程度上也是通过阅读学习的,而 GPT 网络在这方面与人类类似。 + +文本生成网络通过预测下一个单词的概率 $$P(w_N)$$ 来工作。然而,下一个单词的无条件概率等于该单词在文本语料库中的出现频率。GPT 能够为我们提供下一个单词的**条件概率**,即基于前面的单词:$$P(w_N | w_{n-1}, ..., w_0)$$ + +> 您可以在我们的 [《数据科学入门课程》](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/1-Introduction/04-stats-and-probability) 中了解更多关于概率的内容。 + +语言生成模型的质量可以通过**困惑度**来定义。这是一种内在的度量方法,可以在没有任何任务特定数据集的情况下衡量模型的质量。它基于*句子概率*的概念——模型会为可能是真实的句子分配高概率(即模型对其不**困惑**),而对不太合理的句子(例如 *Can it does what?*)分配低概率。当我们将真实文本语料库中的句子输入模型时,我们期望它们具有高概率和低**困惑度**。数学上,困惑度定义为测试集的归一化逆概率: +$$ +\mathrm{Perplexity}(W) = \sqrt[N]{1\over P(W_1,...,W_N)} +$$ + +**您可以使用 [Hugging Face 提供的 GPT 驱动文本编辑器](https://transformer.huggingface.co/doc/gpt2-large) 进行文本生成实验**。在这个编辑器中,您可以开始编写文本,按下 **[TAB]** 键会为您提供几个补全选项。如果选项太短或您不满意,可以再次按下 [TAB] 键,您将获得更多选项,包括更长的文本片段。 + +## GPT 是一个家族 + +GPT 不是单一模型,而是由 [OpenAI](https://openai.com) 开发和训练的一系列模型。 + +在 GPT 模型家族中,我们有: + +| [GPT-2](https://huggingface.co/docs/transformers/model_doc/gpt2#openai-gpt2) | [GPT-3](https://openai.com/research/language-models-are-few-shot-learners) | [GPT-4](https://openai.com/gpt-4) | +| -- | -- | -- | +|语言模型,参数量高达 15 亿。| 语言模型,参数量高达 1750 亿 | 参数量达 100 万亿,支持图像和文本输入,输出为文本。| + +GPT-3 和 GPT-4 模型可以通过 [Microsoft Azure 的认知服务](https://azure.microsoft.com/en-us/services/cognitive-services/openai-service/#overview?WT.mc_id=academic-77998-cacaste) 和 [OpenAI API](https://openai.com/api/) 使用。 + +## 提示工程 + +由于 GPT 在大量数据上进行了训练,能够理解语言和代码,因此它会根据输入(提示)生成输出。提示是 GPT 的输入或查询,用户通过提示向模型提供任务指令以完成下一步操作。为了获得理想的结果,您需要设计最有效的提示,这涉及选择合适的词语、格式、短语甚至符号。这种方法被称为 [提示工程](https://learn.microsoft.com/en-us/shows/ai-show/the-basics-of-prompt-engineering-with-azure-openai-service?WT.mc_id=academic-77998-bethanycheum)。 + +[此文档](https://learn.microsoft.com/en-us/semantic-kernel/prompt-engineering/?WT.mc_id=academic-77998-bethanycheum) 提供了有关提示工程的更多信息。 + +## ✍️ 示例笔记本:[探索 OpenAI-GPT](../../../../../lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) + +通过以下笔记本继续学习: + +* [使用 OpenAI-GPT 和 Hugging Face Transformers 生成文本](../../../../../lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb) + +## 总结 + +新的通用预训练语言模型不仅能够建模语言结构,还包含大量自然语言知识。因此,它们可以在零样本或少样本的情况下有效地解决一些自然语言处理任务。 + +## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/220) + +**免责声明**: +本文档使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/5-NLP/README.md b/translations/zh/lessons/5-NLP/README.md index 7663bf50..a8f34683 100644 --- a/translations/zh/lessons/5-NLP/README.md +++ b/translations/zh/lessons/5-NLP/README.md @@ -1,30 +1,39 @@ + # 自然语言处理 -![NLP任务总结手绘图](../../../../translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.zh.png) +![NLP任务总结图](../../../../translated_images/ai-nlp.b22dcb8ca4707ceaee8576db1c5f4089c8cac2f454e9e03ea554f07fda4556b8.zh.png) -在本节中,我们将重点讨论使用神经网络处理与**自然语言处理(NLP)**相关的任务。我们希望计算机能够解决许多NLP问题: +在本节中,我们将重点使用神经网络来处理与**自然语言处理 (NLP)**相关的任务。我们希望计算机能够解决许多NLP问题: -* **文本分类**是一个典型的分类问题,涉及文本序列。例如,将电子邮件消息分类为垃圾邮件与非垃圾邮件,或者将文章归类为体育、商业、政治等。此外,在开发聊天机器人时,我们常常需要理解用户想表达的内容——在这种情况下,我们处理的是**意图分类**。在意图分类中,我们通常需要处理多个类别。 -* **情感分析**是一个典型的回归问题,我们需要给句子的含义分配一个数字(情感),以表示其正面或负面的程度。情感分析的更高级版本是**基于方面的情感分析**(ABSA),我们将情感归因于句子的不同部分(方面),例如:*在这家餐厅,我喜欢菜肴,但气氛糟糕*。 -* **命名实体识别**(NER)是指从文本中提取特定实体的问题。例如,我们可能需要理解在短语*我明天需要飞往巴黎*中,单词*明天*指的是日期,而*巴黎*是一个地点。 -* **关键词提取**类似于NER,但我们需要自动提取对句子含义重要的单词,而不需要针对特定实体类型进行预训练。 -* **文本聚类**在我们想要将相似句子分组时非常有用,例如在技术支持对话中的相似请求。 -* **问答系统**指的是模型回答特定问题的能力。模型接收一段文本和一个问题作为输入,并需要提供文本中包含问题答案的位置(或者,有时生成答案文本)。 -* **文本生成**是模型生成新文本的能力。它可以被视为一个分类任务,根据某些*文本提示*预测下一个字母/单词。高级文本生成模型,如GPT-3,能够使用一种称为[提示编程](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0)或[提示工程](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)的技术解决其他NLP任务,如分类。 -* **文本摘要**是一种技术,当我们希望计算机“阅读”长文本并用几句话进行总结时使用。 -* **机器翻译**可以被视为在一种语言中理解文本和在另一种语言中生成文本的结合。 +* **文本分类**是一个典型的与文本序列相关的分类问题。例如,将电子邮件分类为垃圾邮件或非垃圾邮件,或者将文章分类为体育、商业、政治等类别。此外,在开发聊天机器人时,我们通常需要理解用户的意图——这就是所谓的**意图分类**。意图分类通常需要处理许多类别。 +* **情感分析**是一个典型的回归问题,我们需要为句子的正面/负面意义赋予一个数值(情感)。更高级的情感分析是**基于方面的情感分析** (ABSA),它不是为整个句子赋予情感,而是为句子的不同部分(方面)赋予情感,例如:*在这家餐厅,我喜欢菜品,但氛围很糟糕*。 +* **命名实体识别** (NER) 是从文本中提取特定实体的问题。例如,我们需要理解在短语*我明天要飞往巴黎*中,*明天*指的是日期,*巴黎*是一个地点。 +* **关键词提取**与NER类似,但我们需要自动提取对句子意义重要的词,而无需针对特定实体类型进行预训练。 +* **文本聚类**在我们希望将相似的句子分组时非常有用,例如在技术支持对话中将相似的请求归类。 +* **问答**是指模型回答特定问题的能力。模型接收一个文本段落和一个问题作为输入,并需要提供文本中包含问题答案的位置(有时需要生成答案文本)。 +* **文本生成**是模型生成新文本的能力。它可以被视为一个分类任务,根据某些*文本提示*预测下一个字母/单词。高级文本生成模型(如GPT-3)能够通过一种称为[提示编程](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0)或[提示工程](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)的技术解决其他NLP任务,例如分类。 +* **文本摘要**是一种技术,我们希望计算机能够“阅读”长文本并用几句话进行总结。 +* **机器翻译**可以被视为一种结合一种语言的文本理解和另一种语言的文本生成的任务。 -最初,大多数NLP任务是使用传统方法如语法解决的。例如,在机器翻译中,解析器被用来将初始句子转换为语法树,然后提取更高级的语义结构来表示句子的含义,并根据这个含义和目标语言的语法生成结果。如今,许多NLP任务通过神经网络更有效地解决。 +最初,大多数NLP任务是通过传统方法(如语法)解决的。例如,在机器翻译中,解析器用于将初始句子转换为语法树,然后提取高级语义结构以表示句子的意义,基于这种意义和目标语言的语法生成结果。如今,许多NLP任务通过神经网络更有效地解决。 -> 许多经典的NLP方法已在[自然语言处理工具包(NLTK)](https://www.nltk.org)的Python库中实现。在线上有一本很棒的[NLTK书](https://www.nltk.org/book/),涵盖了如何使用NLTK解决不同的NLP任务。 +> 许多经典的NLP方法在[自然语言处理工具包 (NLTK)](https://www.nltk.org) Python库中实现。在线有一本很棒的[NLTK书籍](https://www.nltk.org/book/),涵盖了如何使用NLTK解决不同的NLP任务。 -在我们的课程中,我们将主要专注于使用神经网络进行NLP,并在需要时使用NLTK。 +在我们的课程中,我们将主要关注使用神经网络进行NLP,并在需要时使用NLTK。 -我们已经学习了如何使用神经网络处理表格数据和图像。这些数据类型与文本之间的主要区别在于,文本是可变长度的序列,而图像的输入大小是预先已知的。虽然卷积网络可以从输入数据中提取模式,但文本中的模式更为复杂。例如,否定与主语的分离在许多词中是任意的(例如:*我不喜欢橙子*,与*我不喜欢那些大而色彩斑斓的美味橙子*),而这仍应被解释为一种模式。因此,为了处理语言,我们需要引入新的神经网络类型,如*递归网络*和*变换器*。 +我们已经学习了如何使用神经网络处理表格数据和图像。这些数据类型与文本的主要区别在于,文本是一个可变长度的序列,而图像的输入大小是预先确定的。虽然卷积网络可以从输入数据中提取模式,但文本中的模式更复杂。例如,否定可能与主语分隔许多单词(例如:*我不喜欢橙子*,与*我不喜欢那些又大又多彩又美味的橙子*),但仍应被解释为一个模式。因此,为了处理语言,我们需要引入新的神经网络类型,例如*循环网络*和*Transformer*。 ## 安装库 -如果您使用本地Python安装来运行本课程,您可能需要使用以下命令安装NLP所需的所有库: +如果您使用本地Python安装运行本课程,可能需要使用以下命令安装所有NLP所需的库: **对于PyTorch** ```bash @@ -39,13 +48,13 @@ pip install -r requirements-tf.txt ## GPU警告 -在本节中,在一些示例中我们将训练相当大的模型。 -* **使用支持GPU的计算机**:建议在支持GPU的计算机上运行您的笔记本,以减少处理大型模型时的等待时间。 -* **GPU内存限制**:在GPU上运行可能会导致内存不足的情况,特别是在训练大型模型时。 +在本节中,我们将在一些示例中训练较大的模型。 +* **使用支持GPU的计算机**:建议在支持GPU的计算机上运行您的笔记本,以减少训练大型模型时的等待时间。 +* **GPU内存限制**:在GPU上运行可能会导致GPU内存不足的情况,尤其是在训练大型模型时。 * **GPU内存消耗**:训练期间消耗的GPU内存量取决于多个因素,包括小批量大小。 -* **最小化小批量大小**:如果遇到GPU内存问题,请考虑在代码中减少小批量大小作为潜在解决方案。 -* **TensorFlow GPU内存释放**:旧版本的TensorFlow在一个Python内核中训练多个模型时可能无法正确释放GPU内存。为了有效管理GPU内存使用,您可以配置TensorFlow仅在需要时分配GPU内存。 -* **代码包含**:要将TensorFlow设置为仅在需要时增长GPU内存分配,请在您的笔记本中包含以下代码: +* **最小化小批量大小**:如果遇到GPU内存问题,可以考虑减少代码中的小批量大小作为解决方案。 +* **TensorFlow GPU内存释放**:旧版本的TensorFlow可能无法正确释放GPU内存,尤其是在一个Python内核中训练多个模型时。为了有效管理GPU内存使用,可以配置TensorFlow仅在需要时分配GPU内存。 +* **代码包含**:要设置TensorFlow仅在需要时增长GPU内存分配,请在笔记本中包含以下代码: ```python physical_devices = tf.config.list_physical_devices('GPU') @@ -53,7 +62,7 @@ if len(physical_devices)>0: tf.config.experimental.set_memory_growth(physical_devices[0], True) ``` -如果您有兴趣从经典机器学习的角度学习NLP,请访问[这套课程](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)。 +如果您对从经典机器学习角度学习NLP感兴趣,请访问[这套课程](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)。 ## 本节内容 在本节中,我们将学习: @@ -61,9 +70,9 @@ if len(physical_devices)>0: * [将文本表示为张量](13-TextRep/README.md) * [词嵌入](14-Emdeddings/README.md) * [语言建模](15-LanguageModeling/README.md) -* [递归神经网络](16-RNN/README.md) +* [循环神经网络](16-RNN/README.md) * [生成网络](17-GenerativeNetworks/README.md) -* [变换器](18-Transformers/README.md) +* [Transformer](18-Transformers/README.md) -**免责声明**: -本文件是使用基于机器的人工智能翻译服务进行翻译的。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或误释不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/6-Other/21-GeneticAlgorithms/README.md b/translations/zh/lessons/6-Other/21-GeneticAlgorithms/README.md index d4108c86..df1adf18 100644 --- a/translations/zh/lessons/6-Other/21-GeneticAlgorithms/README.md +++ b/translations/zh/lessons/6-Other/21-GeneticAlgorithms/README.md @@ -1,39 +1,48 @@ + # 遗传算法 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/121) -**遗传算法** (GA) 基于一种 **进化方法** 来实现人工智能,其中利用种群进化的方法来获得给定问题的最优解。它们由 [约翰·亨利·霍兰德](https://wikipedia.org/wiki/John_Henry_Holland) 于1975年提出。 +**遗传算法** (GA) 基于一种**进化式方法**,通过模拟种群的进化过程来为给定问题找到最优解。这种方法由 [John Henry Holland](https://wikipedia.org/wiki/John_Henry_Holland) 于1975年提出。 -遗传算法基于以下思想: +遗传算法基于以下理念: -* 问题的有效解可以表示为 **基因** -* **交叉** 使我们能够将两个解结合在一起以获得一个新的有效解 -* **选择** 用于通过某种 **适应度函数** 选择更优的解 -* 引入 **变异** 以破坏优化过程并使我们摆脱局部最优解 +* 问题的有效解可以表示为**基因** +* **交叉**允许我们将两个解结合起来,生成一个新的有效解 +* **选择**通过某种**适应度函数**来选择更优的解 +* **变异**被引入以打破优化的稳定性,从而摆脱局部最优解 -如果您想实现遗传算法,您需要以下内容: +如果你想实现一个遗传算法,你需要以下内容: - * 找到一种使用 **基因** g∈Γ 编码我们问题解的方法 - * 在基因集 Γ 上定义 **适应度函数** fit: Γ→**R**。较小的函数值对应于更好的解。 - * 定义 **交叉** 机制,将两个基因结合在一起以获得一个新的有效解 crossover: Γ2→Γ。 - * 定义 **变异** 机制 mutate: Γ→Γ。 +* 找到一种方法,用**基因** g∈Γ 来编码问题的解 +* 在基因集合 Γ 上定义**适应度函数** fit: Γ→**R**。函数值越小,解越优。 +* 定义**交叉**机制,用于将两个基因结合生成一个新的有效解 crossover: Γ2→Γ。 +* 定义**变异**机制 mutate: Γ→Γ。 -在许多情况下,交叉和变异都是相对简单的算法,可以将基因视为数值序列或位向量进行操作。 +在许多情况下,交叉和变异是相对简单的算法,用于操作基因作为数值序列或位向量。 -遗传算法的具体实现因情况而异,但总体结构如下: +遗传算法的具体实现可能因情况而异,但总体结构如下: 1. 选择初始种群 G⊂Γ -2. 随机选择将在此步骤中执行的操作之一:交叉或变异 +2. 随机选择本步骤将执行的操作:交叉或变异 3. **交叉**: - * 随机选择两个基因 g1,g2 ∈ G - * 计算交叉 g=crossover(g1,g2) - * 如果 fit(g)1) 或 fit(g)2) - 用 g 替换种群中的相应基因。 -4. **变异** - 随机选择基因 g∈G 并用 mutate(g) 替换它 -5. 从第2步重复,直到我们得到足够小的 fit 值,或直到达到步骤数量的限制。 + * 随机选择两个基因 g1, g2 ∈ G + * 计算交叉结果 g=crossover(g1,g2) + * 如果 fit(g)1) 或 fit(g)2),用 g 替换种群中的对应基因。 +4. **变异** - 随机选择一个基因 g∈G,并用 mutate(g) 替换它 +5. 从步骤2开始重复,直到我们获得足够小的 fit 值,或者达到步骤数的限制。 -## 典型任务 +## 常见任务 -遗传算法通常解决的任务包括: +遗传算法通常解决以下任务: 1. 排程优化 1. 最优装箱 @@ -42,39 +51,39 @@ ## ✍️ 练习:遗传算法 -在以下笔记本中继续学习: +通过以下笔记本继续学习: -前往 [这个笔记本](../../../../../lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb) 查看使用遗传算法的两个示例: +访问[这个笔记本](../../../../../lessons/6-Other/21-GeneticAlgorithms/Genetic.ipynb),查看两个使用遗传算法的示例: -1. 公平分配财宝 +1. 公平分配宝藏 1. 八皇后问题 ## 结论 -遗传算法用于解决许多问题,包括物流和搜索问题。该领域受到心理学和计算机科学交叉研究的启发。 +遗传算法被用于解决许多问题,包括物流和搜索问题。这个领域受到心理学和计算机科学交叉研究的启发。 ## 🚀 挑战 -“遗传算法简单易于实现,但其行为难以理解。” [来源](https://wikipedia.org/wiki/Genetic_algorithm) 进行一些研究,寻找一个遗传算法的实现,例如解决数独难题,并以草图或流程图的形式解释它是如何工作的。 +“遗传算法易于实现,但其行为难以理解。” [来源](https://wikipedia.org/wiki/Genetic_algorithm) 进行一些研究,找到一个遗传算法的实现,例如解决数独问题,并通过草图或流程图解释其工作原理。 ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/221) ## 复习与自学 -观看 [这个精彩的视频](https://www.youtube.com/watch?v=qv6UVOQ0F44),讲述计算机如何通过遗传算法训练的神经网络学习玩超级马里奥。我们将在 [下一部分](../22-DeepRL/README.md) 中了解更多关于计算机学习玩此类游戏的内容。 +观看[这个精彩视频](https://www.youtube.com/watch?v=qv6UVOQ0F44),了解计算机如何通过遗传算法训练的神经网络学习玩超级马里奥。我们将在[下一节](../22-DeepRL/README.md)中进一步学习计算机如何学习玩类似的游戏。 ## [作业:丢番图方程](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) -您的目标是解决所谓的 **丢番图方程** - 一个具有整数根的方程。例如,考虑方程 a+2b+3c+4d=30。您需要找到满足该方程的整数根。 +你的目标是解决所谓的**丢番图方程**——一个具有整数根的方程。例如,考虑方程 a+2b+3c+4d=30。你需要找到满足该方程的整数根。 -*此作业灵感来自 [这篇文章](https://habr.com/post/128704/)。* +*此作业灵感来源于[这篇文章](https://habr.com/post/128704/)。* 提示: -1. 您可以考虑根在区间 [0;30] 内 -1. 作为基因,考虑使用根值列表 +1. 你可以考虑根值在区间 [0;30] 内 +1. 作为基因,可以考虑使用根值列表 使用 [Diophantine.ipynb](../../../../../lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb) 作为起点。 -**免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/6-Other/22-DeepRL/README.md b/translations/zh/lessons/6-Other/22-DeepRL/README.md index d42b4fdf..450773cd 100644 --- a/translations/zh/lessons/6-Other/22-DeepRL/README.md +++ b/translations/zh/lessons/6-Other/22-DeepRL/README.md @@ -1,33 +1,42 @@ + # 深度强化学习 -强化学习(RL)被视为基本的机器学习范式之一,和监督学习、无监督学习并列。在监督学习中,我们依赖于具有已知结果的数据集,而强化学习则基于**实践学习**。例如,当我们第一次看到一款电脑游戏时,我们开始玩耍,即使不知道规则,经过一段时间的游戏,我们能够通过玩耍和调整行为来提高我们的技能。 +强化学习(RL)被认为是机器学习的基本范式之一,与监督学习和无监督学习并列。与监督学习依赖于已知结果的数据集不同,RL基于**通过实践学习**。例如,当我们第一次看到一款电脑游戏时,即使不知道规则,我们也会开始玩,并通过玩游戏和调整行为逐渐提高技能。 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/122) 要进行强化学习,我们需要: -* 一个**环境**或**模拟器**,它设定了游戏的规则。我们应该能够在模拟器中运行实验并观察结果。 -* 一些**奖励函数**,指示我们的实验成功程度。在学习玩电脑游戏的情况下,奖励将是我们的最终得分。 +* 一个**环境**或**模拟器**,它定义了游戏规则。我们应该能够在模拟器中运行实验并观察结果。 +* 某种**奖励函数**,它指示我们的实验是否成功。在学习玩电脑游戏的情况下,奖励可能是我们的最终得分。 -基于奖励函数,我们应该能够调整我们的行为并提高我们的技能,以便下次能玩得更好。强化学习与其他类型的机器学习的主要区别在于,在强化学习中,我们通常不知道在游戏结束之前我们是赢还是输。因此,我们不能仅仅说某个动作是好是坏——我们只在游戏结束时获得奖励。 +基于奖励函数,我们应该能够调整行为并提高技能,以便下次表现更好。强化学习与其他类型的机器学习的主要区别在于,在RL中,我们通常直到游戏结束才知道自己是赢了还是输了。因此,我们无法单独判断某个动作是否是好的——我们只有在游戏结束时才会收到奖励。 -在强化学习过程中,我们通常会进行许多实验。在每个实验中,我们需要在遵循迄今为止学习到的最佳策略(**利用**)和探索新的可能状态(**探索**)之间进行平衡。 +在进行强化学习时,我们通常会进行许多实验。在每次实验中,我们需要在遵循迄今为止学到的最佳策略(**利用**)和探索新的可能状态(**探索**)之间找到平衡。 ## OpenAI Gym -一个很好的强化学习工具是 [OpenAI Gym](https://gym.openai.com/) - 一个**模拟环境**,可以模拟许多不同的环境,从Atari游戏到杆平衡的物理原理。它是训练强化学习算法的最受欢迎的模拟环境之一,由 [OpenAI](https://openai.com/) 维护。 +一个非常适合强化学习的工具是 [OpenAI Gym](https://gym.openai.com/)——一个**模拟环境**,可以模拟从Atari游戏到杆平衡物理等许多不同的环境。它是训练强化学习算法最流行的模拟环境之一,由 [OpenAI](https://openai.com/) 维护。 -> **注意**:您可以在 [这里](https://gym.openai.com/envs/#classic_control) 查看 OpenAI Gym 中可用的所有环境。 +> **Note**: 你可以在 [这里](https://gym.openai.com/envs/#classic_control) 查看 OpenAI Gym 提供的所有环境。 ## CartPole 平衡 -您可能都见过现代的平衡设备,如 *Segway* 或 *Gyroscooters*。它们能够通过根据加速度计或陀螺仪的信号自动调整轮子来实现平衡。在本节中,我们将学习如何解决一个类似的问题——平衡一个杆。这个问题类似于一个马戏团表演者需要在手上平衡一个杆的情况——但这个杆的平衡仅发生在一维。 +你可能都见过现代平衡设备,比如 *Segway* 或 *Gyroscooters*。它们能够通过调整轮子来响应加速度计或陀螺仪的信号,从而自动保持平衡。在本节中,我们将学习如何解决一个类似的问题——平衡杆。这类似于马戏团表演者需要在手上平衡杆的情况——但这种杆平衡仅发生在一维空间中。 -平衡的简化版本被称为**CartPole**问题。在cartpole世界中,我们有一个可以左右移动的水平滑块,目标是在滑块上方平衡一个垂直杆。 +一种简化的平衡问题被称为 **CartPole** 问题。在 CartPole 世界中,我们有一个可以左右移动的水平滑块,目标是在滑块上方保持垂直杆的平衡。 a cartpole -要创建和使用这个环境,我们需要几行Python代码: +要创建和使用这个环境,我们需要几行 Python 代码: ```python import gym @@ -45,73 +54,73 @@ while not done: print(f"Total reward: {total_reward}") ``` -每个环境的访问方式完全相同: -* `env.reset` starts a new experiment -* `env.step` 执行一个模拟步骤。它从**动作空间**接收一个**动作**,并返回一个**观察**(来自观察空间),以及一个奖励和一个终止标志。 +每个环境都可以通过以下方式访问: +* `env.reset` 开始一个新的实验 +* `env.step` 执行一个模拟步骤。它从**动作空间**接收一个**动作**,并返回一个**观察值**(来自观察空间),以及奖励和终止标志。 -在上面的例子中,我们在每个步骤执行一个随机动作,这就是实验生命周期很短的原因: +在上面的示例中,我们在每一步执行随机动作,因此实验的生命周期非常短: ![non-balancing cartpole](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-nobalance.gif) -强化学习算法的目标是训练一个模型——所谓的**策略** π——它将根据给定的状态返回动作。我们也可以将策略视为概率性的,例如,对于任何状态 *s* 和动作 *a*,它将返回在状态 *s* 采取 *a* 的概率 π(*a*|*s*)。 +强化学习算法的目标是训练一个模型——所谓的**策略** π——它会根据给定状态返回动作。我们也可以将策略视为概率性的,例如,对于任何状态 *s* 和动作 *a*,它会返回概率 π(*a*|*s*),即我们在状态 *s* 下应该采取动作 *a* 的概率。 ## 策略梯度算法 -建模策略最明显的方法是创建一个神经网络,该网络将状态作为输入,并返回相应的动作(或者说是所有动作的概率)。从某种意义上说,这类似于普通的分类任务,但有一个主要区别——我们事先不知道在每一步应该采取哪些动作。 +最直接的策略建模方法是创建一个神经网络,该网络以状态作为输入,并返回相应的动作(或所有动作的概率)。从某种意义上说,它类似于普通的分类任务,但有一个主要区别——我们事先不知道在每一步应该采取哪些动作。 -这里的想法是估计这些概率。我们构建一个**累积奖励**的向量,显示我们在实验每一步的总奖励。我们还通过将早期奖励乘以某个系数 γ=0.99 来应用**奖励折扣**,以减小早期奖励的作用。然后,我们强化在实验路径上产生更大奖励的步骤。 +这里的想法是估计这些概率。我们构建一个**累计奖励**向量,显示实验中每一步的总奖励。我们还通过乘以某个系数 γ=0.99 对早期奖励进行**奖励折扣**,以减小早期奖励的影响。然后,我们强化实验路径中产生较大奖励的步骤。 > 了解更多关于策略梯度算法的信息,并在 [示例笔记本](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) 中查看其实际应用。 ## Actor-Critic 算法 -策略梯度方法的改进版本称为**Actor-Critic**。其主要思想是神经网络将被训练以返回两样东西: +策略梯度方法的改进版本称为 **Actor-Critic**。其核心思想是神经网络将被训练以返回两件事: -* 策略,决定采取哪个动作。这部分称为**actor** -* 我们可以在该状态下预期获得的总奖励的估计——这部分称为**critic**。 +* 策略,决定采取的动作。这部分称为 **actor** +* 对当前状态下可以获得的总奖励的估计——这部分称为 **critic**。 -从某种意义上说,这种架构类似于 [GAN](../../4-ComputerVision/10-GANs/README.md),其中有两个网络相互对抗训练。在actor-critic模型中,actor提出我们需要采取的动作,而critic则尝试进行评估并估计结果。然而,我们的目标是共同训练这些网络。 +从某种意义上说,这种架构类似于 [GAN](../../4-ComputerVision/10-GANs/README.md),其中有两个网络相互对抗进行训练。在 Actor-Critic 模型中,actor 提出我们需要采取的动作,而 critic 尝试批判性地估计结果。然而,我们的目标是让这两个网络协同训练。 -因为我们知道实验过程中真实的累积奖励和critic返回的结果,所以构建一个损失函数以最小化它们之间的差异相对容易。这将给我们**critic损失**。我们可以通过使用与策略梯度算法相同的方法来计算**actor损失**。 +因为我们知道实验中的真实累计奖励和 critic 返回的结果,因此构建一个损失函数以最小化它们之间的差异相对容易。这将产生**critic 损失**。我们可以使用与策略梯度算法相同的方法计算**actor 损失**。 -运行这些算法之一后,我们可以期待我们的CartPole表现如下: +运行这些算法后,我们可以期望我们的 CartPole 表现如下: ![a balancing cartpole](../../../../../lessons/6-Other/22-DeepRL/images/cartpole-balance.gif) -## ✍️ 练习:策略梯度和Actor-Critic RL +## ✍️ 练习:策略梯度和 Actor-Critic 强化学习 -在以下笔记本中继续学习: +通过以下笔记本继续学习: -* [TensorFlow中的RL](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) -* [PyTorch中的RL](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) +* [TensorFlow 中的强化学习](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb) +* [PyTorch 中的强化学习](../../../../../lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb) -## 其他RL任务 +## 其他强化学习任务 如今,强化学习是一个快速发展的研究领域。一些有趣的强化学习示例包括: -* 教会计算机玩**Atari游戏**。这个问题的挑战在于,我们没有简单的状态以向量表示,而是一个屏幕截图——我们需要使用CNN将这个屏幕图像转换为特征向量,或提取奖励信息。Atari游戏在Gym中可用。 -* 教会计算机玩棋类游戏,如国际象棋和围棋。最近,像**Alpha Zero**这样的先进程序是通过两个代理相互对弈,从零开始训练的,并在每一步中不断提高。 -* 在工业中,强化学习被用来从模拟中创建控制系统。一个名为 [Bonsai](https://azure.microsoft.com/services/project-bonsai/?WT.mc_id=academic-77998-cacaste) 的服务专门为此设计。 +* 教电脑玩 **Atari 游戏**。这个问题的挑战在于我们没有简单的状态表示为向量,而是一个截图——我们需要使用 CNN 将屏幕图像转换为特征向量或提取奖励信息。Atari 游戏可以在 Gym 中找到。 +* 教电脑玩棋盘游戏,比如国际象棋和围棋。最近,像 **Alpha Zero** 这样的顶尖程序通过两个代理相互对战并在每一步中不断改进,从零开始进行训练。 +* 在工业中,强化学习用于从模拟中创建控制系统。一个名为 [Bonsai](https://azure.microsoft.com/services/project-bonsai/?WT.mc_id=academic-77998-cacaste) 的服务专门为此设计。 -## 结论 +## 总结 -我们现在已经学习了如何通过提供定义游戏所需状态的奖励函数,并给予智能探索搜索空间的机会,来训练代理以获得良好的结果。我们成功尝试了两种算法,并在相对较短的时间内取得了良好的结果。然而,这只是您进入强化学习旅程的开始,如果您想深入了解,绝对应该考虑参加一个单独的课程。 +我们现在已经学习了如何通过提供定义游戏期望状态的奖励函数,并让代理智能地探索搜索空间,来训练代理以获得良好的结果。我们成功尝试了两种算法,并在相对较短的时间内取得了良好的结果。然而,这只是你进入强化学习领域的开始,如果你想深入研究,应该考虑参加专门的课程。 ## 🚀 挑战 -探索“其他RL任务”部分列出的应用,并尝试实现其中一个! +探索“其他强化学习任务”部分列出的应用,并尝试实现其中一个! ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/222) ## 复习与自学 -在我们的 [初学者机器学习课程](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/README.md) 中了解更多关于经典强化学习的信息。 +在我们的 [机器学习初学者课程](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/README.md) 中了解更多关于经典强化学习的内容。 -观看 [这段精彩视频](https://www.youtube.com/watch?v=qv6UVOQ0F44),讲述计算机如何学习玩超级马里奥。 +观看 [这段精彩视频](https://www.youtube.com/watch?v=qv6UVOQ0F44),了解计算机如何学习玩超级马里奥。 -## 作业:[训练山地车](lab/README.md) +## 作业:[训练一个山地车](lab/README.md) -在这个作业中,您的目标是训练一个不同的Gym环境——[Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/)。 +在这次作业中,你的目标是训练一个不同的 Gym 环境——[山地车](https://www.gymlibrary.ml/environments/classic_control/mountain_car/)。 **免责声明**: -本文件是使用基于机器的人工智能翻译服务翻译的。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于重要信息,建议进行专业人工翻译。我们对因使用本翻译而导致的任何误解或误读不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/6-Other/22-DeepRL/lab/README.md b/translations/zh/lessons/6-Other/22-DeepRL/lab/README.md index e63a9601..15d6270b 100644 --- a/translations/zh/lessons/6-Other/22-DeepRL/lab/README.md +++ b/translations/zh/lessons/6-Other/22-DeepRL/lab/README.md @@ -1,22 +1,23 @@ -# 训练山地车逃脱 - -来自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的实验任务。 - -## 任务 - -你的目标是训练 RL 代理控制 [Mountain Car](https://www.gymlibrary.ml/environments/classic_control/mountain_car/) 在 OpenAI 环境中。你将基于截至 2023 年 10 月的数据进行训练。 - + ## 环境 -山地车环境由困在山谷中的汽车组成。你的目标是跳出山谷并到达旗帜。你可以执行的动作是向左加速、向右加速或什么都不做。你可以观察汽车在 x 轴上的位置和速度。 +Mountain Car 环境中,汽车被困在一个山谷中。你的目标是跳出山谷并到达旗帜处。你可以执行的动作包括向左加速、向右加速或保持不动。你可以观察汽车在 x 轴上的位置以及速度。 -## 启动笔记本 +## 起始笔记本 通过打开 [MountainCar.ipynb](../../../../../../lessons/6-Other/22-DeepRL/lab/MountainCar.ipynb) 开始实验。 ## 收获 -你应该在整个实验中了解到,将 RL 算法应用于新环境通常相当简单,因为 OpenAI Gym 为所有环境提供相同的接口,因此算法在很大程度上不依赖于环境的性质。你甚至可以以某种方式重构 Python 代码,以便将任何环境作为参数传递给 RL 算法。 +在整个实验过程中,你应该学到将 RL 算法应用到一个新环境通常是非常直接的,因为 OpenAI Gym 对所有环境都提供了统一的接口,而算法本身并不太依赖于环境的具体性质。你甚至可以重新组织 Python 代码,以便将任何环境作为参数传递给 RL 算法。 **免责声明**: -本文件使用机器翻译的AI翻译服务进行翻译。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/6-Other/23-MultiagentSystems/README.md b/translations/zh/lessons/6-Other/23-MultiagentSystems/README.md index efd7c177..fef8e364 100644 --- a/translations/zh/lessons/6-Other/23-MultiagentSystems/README.md +++ b/translations/zh/lessons/6-Other/23-MultiagentSystems/README.md @@ -1,38 +1,47 @@ + # 多智能体系统 -实现智能的一个可能方法是所谓的**涌现**(或**协同**)方法,这一方法基于一个事实:许多相对简单的智能体的组合行为可以导致系统整体更复杂(或更智能)的行为。从理论上讲,这基于[集体智能](https://en.wikipedia.org/wiki/Collective_intelligence)、[涌现主义](https://en.wikipedia.org/wiki/Global_brain)和[进化控制论](https://en.wikipedia.org/wiki/Global_brain)的原则,这些原则表明,当较低级系统被恰当地组合时,高级系统会获得某种附加值(即*元系统转变原则*)。 +实现智能的一种可能方法是所谓的**涌现**(或**协同**)方法,其基于这样一个事实:许多相对简单的智能体的组合行为可以导致整个系统表现出更复杂(或更智能)的行为。从理论上讲,这种方法基于[集体智能](https://en.wikipedia.org/wiki/Collective_intelligence)、[涌现论](https://en.wikipedia.org/wiki/Global_brain)和[进化控制论](https://en.wikipedia.org/wiki/Global_brain)的原则,这些理论认为,当低级系统被适当组合成高级系统时,会产生某种附加价值(即所谓的*元系统转变原则*)。 ## [课前测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/123) -**多智能体系统**的方向在1990年代的人工智能领域应运而生,作为对互联网和分布式系统增长的回应。经典人工智能教材之一,[人工智能:现代方法](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach),从多智能体系统的角度探讨经典人工智能的观点。 +**多智能体系统**这一方向在1990年代因互联网和分布式系统的发展而在人工智能领域兴起。经典的人工智能教材之一[《人工智能:现代方法》](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach)从多智能体系统的角度探讨了经典人工智能的视角。 -多智能体方法的核心是**智能体**的概念——一种存在于某种**环境**中的实体,它能够感知并对其进行操作。这是一个非常广泛的定义,智能体可以有许多不同的类型和分类: +多智能体方法的核心是**智能体**的概念——一个生活在某种**环境**中的实体,它可以感知环境并对其采取行动。这是一个非常广泛的定义,智能体可以有许多不同的类型和分类: -* 按推理能力: +* 按其推理能力: - **反应型**智能体通常具有简单的请求-响应行为 - - **深思型**智能体运用某种逻辑推理和/或规划能力 + - **推理型**智能体具备某种逻辑推理和/或规划能力 * 按智能体执行代码的位置: - - **静态**智能体在专用网络节点上工作 + - **静态**智能体在专用的网络节点上工作 - **移动**智能体可以在网络节点之间移动其代码 -* 按行为: - - **被动智能体**没有特定目标。这些智能体可以对外部刺激做出反应,但不会主动采取任何行动。 - - **主动智能体**有一些他们追求的目标 +* 按其行为: + - **被动智能体**没有特定目标。这类智能体可以对外部刺激作出反应,但不会主动采取行动 + - **主动智能体**有一些目标并会努力实现 - **认知智能体**涉及复杂的规划和推理 -如今,多智能体系统在许多应用中得到了使用: +如今,多智能体系统被应用于许多领域: -* 在游戏中,许多非玩家角色使用某种形式的人工智能,可以被视为智能体 +* 在游戏中,许多非玩家角色(NPC)使用某种形式的人工智能,可以被视为智能体 * 在视频制作中,渲染涉及人群的复杂3D场景通常使用多智能体模拟 -* 在系统建模中,多智能体方法被用来模拟复杂模型的行为。例如,多智能体方法成功用于预测COVID-19疫情在全球的传播。类似的方法可以用来模拟城市交通,并观察其如何对交通规则的变化做出反应。 -* 在复杂的自动化系统中,每个设备可以作为一个独立的智能体,从而使整个系统变得不那么单一,更加稳健。 +* 在系统建模中,多智能体方法用于模拟复杂模型的行为。例如,多智能体方法已成功用于预测COVID-19疾病在全球的传播。类似的方法也可以用来模拟城市交通,并观察其对交通规则变化的反应 +* 在复杂的自动化系统中,每个设备可以作为一个独立的智能体,这使得整个系统不再是单一的,而是更加健壮 -我们不会花太多时间深入探讨多智能体系统,而是考虑一个**多智能体建模**的例子。 +我们不会深入探讨多智能体系统,但会考虑一个**多智能体建模**的示例。 ## NetLogo -[NetLogo](https://ccl.northwestern.edu/netlogo/)是一个基于修改版[Logo](https://en.wikipedia.org/wiki/Logo_(programming_language))编程语言的多智能体建模环境。这种语言是为向儿童教授编程概念而开发的,它允许您控制一个名为**海龟**的智能体,该智能体可以移动,并留下痕迹。这使得创建复杂的几何图形成为可能,这是理解智能体行为的一种非常直观的方式。 +[NetLogo](https://ccl.northwestern.edu/netlogo/) 是一个基于修改版 [Logo](https://en.wikipedia.org/wiki/Logo_(programming_language)) 编程语言的多智能体建模环境。该语言最初是为教授儿童编程概念而开发的,它允许你控制一个名为**乌龟**的智能体,该智能体可以移动并留下痕迹。这种方式可以创建复杂的几何图形,是一种非常直观的理解智能体行为的方法。 -在NetLogo中,我们可以通过使用`create-turtles`命令创建许多海龟。然后,我们可以命令所有海龟执行某些动作(在下面的例子中——向前移动10点): +在 NetLogo 中,我们可以使用 `create-turtles` 命令创建许多乌龟。然后可以命令所有乌龟执行某些操作(例如下面的例子中,向前移动10个单位): ``` create-turtles 10 @@ -41,39 +50,39 @@ ask turtles [ ] ``` -当然,当所有海龟都做同样的事情时就没有趣味了,因此我们可以`ask` groups of turtles, eg. those who are in the vicinity of a certain point. We can also create turtles of different *breeds* using `breed [cats cat]` command. Here `cat`是一个品种的名称,我们需要同时指定单数和复数形式,因为不同的命令使用不同的形式以便于理解。 +当然,如果所有乌龟都做同样的事情就没什么意思了,因此我们可以使用 `ask` 命令对某些特定的乌龟群体发出指令,例如那些在某个点附近的乌龟。我们还可以使用 `breed [cats cat]` 命令创建不同*种类*的乌龟。这里 `cat` 是种类的名称,我们需要同时指定单数和复数形式,因为不同的命令为了清晰会使用不同的形式。 -> ✅ 我们不会深入学习NetLogo语言本身——如果您有兴趣了解更多,可以访问精彩的[初学者互动NetLogo词典](https://ccl.northwestern.edu/netlogo/bind/)资源。 +> ✅ 我们不会深入学习 NetLogo 语言本身——如果你感兴趣,可以访问非常优秀的 [NetLogo 初学者交互式词典](https://ccl.northwestern.edu/netlogo/bind/)资源。 -您可以[下载](https://ccl.northwestern.edu/netlogo/download.shtml)并安装NetLogo进行尝试。 +你可以[下载](https://ccl.northwestern.edu/netlogo/download.shtml)并安装 NetLogo 来尝试。 ### 模型库 -NetLogo的一个好处是它包含一个可供您尝试的工作模型库。前往**文件 → 模型库**,您会有许多类别的模型可供选择。 +NetLogo 的一个优点是它包含一个可供尝试的工作模型库。进入 **File → Models Library**,你会发现许多类别的模型可供选择。 -NetLogo模型库 +NetLogo 模型库 -> 由Dmitry Soshnikov提供的模型库截图 +> Dmitry Soshnikov 提供的模型库截图 -您可以打开其中一个模型,例如**生物学 → 群聚**。 +你可以打开其中一个模型,例如 **Biology → Flocking**。 -### 主要原则 +### 主要原理 -打开模型后,您将进入NetLogo的主屏幕。这里是一个示例模型,描述了在有限资源(草)下狼和羊的种群。 +打开模型后,你会进入 NetLogo 的主界面。以下是一个描述狼和羊种群在有限资源(草地)条件下的示例模型。 -![NetLogo主屏幕](../../../../../translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.zh.png) +![NetLogo 主界面](../../../../../translated_images/NetLogo-Main.32653711ec1a01b3cab22ec0b148e64193d0b979b055285bef329d5e3d6958c5.zh.png) -> 截图由Dmitry Soshnikov提供 +> Dmitry Soshnikov 提供的截图 -在此屏幕上,您可以看到: +在这个界面上,你可以看到: * **界面**部分包含: - - 所有智能体生活的主要场地 + - 所有智能体生活的主场地 - 不同的控件:按钮、滑块等 - - 您可以用来显示仿真参数的图表 -* **代码**选项卡包含编辑器,您可以在其中输入NetLogo程序 + - 用于显示模拟参数的图表 +* **代码**选项卡包含编辑器,你可以在其中编写 NetLogo 程序 -在大多数情况下,界面会有一个**设置**按钮,用于初始化仿真状态,以及一个**开始**按钮,用于启动执行。这些由代码中相应的处理程序处理,其样子如下: +在大多数情况下,界面会有一个 **Setup** 按钮,用于初始化模拟状态,以及一个 **Go** 按钮,用于启动执行。这些按钮由代码中的相应处理程序处理,如下所示: ``` to go [ @@ -81,74 +90,75 @@ to go [ ] ``` -NetLogo的世界由以下对象组成: +NetLogo 的世界由以下对象组成: -* **智能体**(海龟)可以在场地上移动并做一些事情。您可以使用`ask turtles [...]` syntax, and the code in brackets is executed by all agents in *turtle mode*. -* **Patches** are square areas of the field, on which agents live. You can refer to all agents on the same patch, or you can change patch colors and some other properties. You can also `ask patches`来命令智能体执行某些操作。 -* **观察者**是一个独特的智能体,控制着世界。所有按钮处理程序都是在*观察者模式*下执行的。 +* **智能体**(乌龟),可以在场地上移动并执行操作。你可以使用 `ask turtles [...]` 语法命令智能体,方括号中的代码会以*乌龟模式*由所有智能体同时执行 +* **地块**是场地上的方形区域,智能体生活在其上。你可以引用同一地块上的所有智能体,或者更改地块的颜色和其他属性。你也可以 `ask patches` 执行某些操作 +* **观察者**是一个独特的智能体,负责控制整个世界。所有按钮处理程序都在*观察者模式*下执行 -> ✅ 多智能体环境的美妙之处在于,运行在海龟模式或补丁模式的代码是由所有智能体并行同时执行的。因此,通过编写少量代码并编程单个智能体的行为,您可以创建整个仿真系统的复杂行为。 +> ✅ 多智能体环境的美妙之处在于,运行在乌龟模式或地块模式下的代码会被所有智能体并行执行。因此,通过编写少量代码并编程单个智能体的行为,你可以创建整个模拟系统的复杂行为。 -### 群聚 +### 群体行为 -作为多智能体行为的一个例子,让我们考虑**[群聚](https://en.wikipedia.org/wiki/Flocking_(behavior))**。群聚是一种复杂的模式,与鸟群飞行的方式非常相似。观察它们飞行时,您可能会觉得它们遵循某种集体算法,或者它们具备某种形式的*集体智能*。然而,这种复杂行为的产生是因为每个个体智能体(在这种情况下是*鸟*)仅观察与其短距离内的其他智能体,并遵循三条简单规则: +作为多智能体行为的一个示例,我们来看**[群体行为](https://en.wikipedia.org/wiki/Flocking_(behavior))**。群体行为是一种复杂的模式,非常类似于鸟群飞行的方式。观察它们飞行时,你可能会认为它们遵循某种集体算法,或者拥有某种形式的*集体智能*。然而,这种复杂行为的产生仅仅是因为每个个体智能体(在这种情况下是*鸟*)只观察其附近一定距离内的其他智能体,并遵循以下三个简单规则: -* **对齐** - 它朝着邻近智能体的平均航向调整方向 -* **凝聚** - 它试图朝着邻居的平均位置调整方向(*长距离吸引*) -* **分离** - 当靠近其他鸟时,它试图远离(*短距离排斥*) +* **对齐** - 朝邻近智能体的平均方向调整 +* **凝聚** - 朝邻居的平均位置靠拢(*长距离吸引*) +* **分离** - 当与其他鸟靠得太近时,试图远离(*短距离排斥*) -您可以运行群聚示例并观察其行为。您还可以调整参数,例如*分离程度*或*视距*,这定义了每只鸟可以看到的距离。请注意,如果您将视距减少到0,所有鸟将变得失明,群聚将停止。如果您将分离减少到0,所有鸟将聚集成一条直线。 +你可以运行群体行为示例并观察其行为。你还可以调整参数,例如*分离程度*或*视距*,定义每只鸟能看到的范围。注意,如果你将视距减少到0,所有鸟都会变得“盲目”,群体行为会停止。如果将分离减少到0,所有鸟会聚集成一条直线。 -> ✅ 切换到**代码**选项卡,查看群聚的三条规则(对齐、凝聚和分离)在代码中是如何实现的。注意我们仅引用在视野中的那些智能体。 +> ✅ 切换到 **代码** 选项卡,查看群体行为的三个规则(对齐、凝聚和分离)在代码中的实现方式。注意我们如何仅引用视距内的智能体。 -### 其他可见模型 +### 其他可查看的模型 -还有一些有趣的模型供您实验: +还有一些有趣的模型可以供你实验: -* **艺术 → 烟花**展示了烟花如何被视为单个火流的集体行为 -* **社会科学 → 交通基础**和**社会科学 → 交通网格**展示了城市交通在1D和2D网格中有或没有交通信号灯的模型。仿真中的每辆车遵循以下规则: - - 如果前方空间为空 - 加速(直到达到某一最大速度) - - 如果看到前方有障碍物 - 刹车(您可以调整司机的视距) -* **社会科学 → 聚会**展示了人们在鸡尾酒会上如何聚集。您可以找到导致团体幸福感最快增加的参数组合。 +* **Art → Fireworks** 展示了烟花如何被视为单个火流的集体行为 +* **Social Science → Traffic Basic** 和 **Social Science → Traffic Grid** 展示了城市交通在1D和2D网格中有无交通信号灯的模型。模拟中的每辆车遵循以下规则: + - 如果前方空间为空——加速(直到某个最大速度) + - 如果看到前方有障碍物——刹车(你可以调整司机的视距) +* **Social Science → Party** 展示了人们在鸡尾酒会上如何聚集。你可以找到使群体幸福感最快提升的参数组合 -从这些例子中可以看出,多智能体模拟可以非常有助于理解由遵循相同或相似逻辑的个体组成的复杂系统的行为。它也可以用于控制虚拟智能体,例如计算机游戏中的[NPC](https://en.wikipedia.org/wiki/NPC)或3D动画世界中的智能体。 +从这些示例中可以看出,多智能体模拟是一种非常有用的方法,可以帮助理解由遵循相同或相似逻辑的个体组成的复杂系统的行为。它还可以用于控制虚拟智能体,例如计算机游戏中的[非玩家角色(NPC)](https://en.wikipedia.org/wiki/NPC),或3D动画世界中的智能体。 -## 深思型智能体 +## 推理型智能体 -上述描述的智能体非常简单,使用某种算法对环境的变化做出反应。因此,它们是**反应型智能体**。然而,有时智能体可以推理和规划其行动,这种情况下它们被称为**深思型**。 +上述智能体非常简单,通过某种算法对环境变化作出反应,因此它们是**反应型智能体**。然而,有时智能体可以推理并规划其行动,这种情况下它们被称为**推理型智能体**。 -一个典型的例子是一个个人智能体,它接收到人类的指令来预定度假旅行。假设有许多生活在互联网上的智能体可以帮助它。它应该联系其他智能体以查看哪些航班可用,哪些日期的酒店价格是多少,并尝试协商最佳价格。当度假计划完成并得到所有者确认后,它可以继续进行预定。 +一个典型的例子是接收人类指令预订度假行程的个人智能体。假设互联网上有许多可以帮助它的智能体。它需要联系其他智能体,查看有哪些航班可用,不同日期的酒店价格是多少,并尝试协商最优价格。当度假计划完成并得到主人确认后,它可以继续预订。 -为了做到这一点,智能体需要**通信**。为了成功通信,它们需要: +为了实现这一点,智能体需要**通信**。为了成功通信,它们需要: -* 一些**标准语言来交换知识**,例如[知识交换格式](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format)(KIF)和[知识查询与操作语言](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language)(KQML)。这些语言是基于[言语行为理论](https://en.wikipedia.org/wiki/Speech_act)设计的。 -* 这些语言还应该包括一些**谈判协议**,基于不同的**拍卖类型**。 -* 一个**共同本体**,以便它们引用相同的概念并了解其语义 -* 一种**发现**不同智能体可以做什么的方法,这也基于某种本体 +* 一些用于交换知识的**标准语言**,例如[知识交换格式](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format)(KIF)和[知识查询与操作语言](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language)(KQML)。这些语言基于[言语行为理论](https://en.wikipedia.org/wiki/Speech_act)设计 +* 这些语言还应包括一些基于不同**拍卖类型**的**协商协议** +* 一个**通用本体**,以便它们能够引用相同的概念并理解其语义 +* 一种**发现**不同智能体功能的方法,也基于某种本体 -深思型智能体比反应型智能体复杂得多,因为它们不仅对环境的变化做出反应,还应该能够*主动*采取行动。深思型智能体的一种提议架构是所谓的信念-欲望-意图(BDI)智能体: +推理型智能体比反应型智能体复杂得多,因为它们不仅对环境变化作出反应,还需要能够*主动*采取行动。一种被提出的推理型智能体架构是所谓的信念-愿望-意图(BDI)智能体: -* **信念**形成关于智能体环境的一组知识。它可以结构化为知识库或一组规则,智能体可以将其应用于环境中的特定情况。 -* **欲望**定义了智能体想要做的事情,即它的目标。例如,上述个人助手智能体的目标是预定旅行,而酒店智能体的目标是最大化利润。 -* **意图**是智能体计划实现其目标的具体行动。行动通常会改变环境并导致与其他智能体的通信。 +* **信念**是关于智能体环境的一组知识。它可以被组织为知识库或一组规则,智能体可以将其应用于环境中的特定情况 +* **愿望**定义了智能体想要做的事情,即其目标。例如,上述个人助手智能体的目标是预订旅行,而酒店智能体的目标是最大化利润 +* **意图**是智能体为实现其目标而计划的具体行动。行动通常会改变环境并引发与其他智能体的通信 -有一些可用于构建多智能体系统的平台,例如[JADE](https://jade.tilab.com/)。[这篇论文](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf)包含对多智能体平台的综述,以及多智能体系统及其不同使用场景的简要历史。 +目前有一些平台可用于构建多智能体系统,例如 [JADE](https://jade.tilab.com/)。[这篇论文](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf)包含了多智能体平台的综述,以及多智能体系统的简史及其不同的使用场景。 ## 结论 -多智能体系统可以采取非常不同的形式,并用于许多不同的应用。它们都倾向于关注单个智能体的简单行为,并通过**协同效应**实现整体系统的更复杂行为。 +多智能体系统可以采取多种形式,并应用于许多不同的领域。 +它们通常专注于单个智能体的简单行为,并通过**协同效应**实现整个系统的更复杂行为。 ## 🚀 挑战 -将这节课带入现实世界,尝试构思一个可以解决问题的多智能体系统。例如,优化校车路线的多智能体系统需要做些什么?它在面包店中如何工作? +将本课内容应用于现实世界,尝试构思一个可以解决问题的多智能体系统。例如,一个多智能体系统需要做些什么来优化校车路线?它如何在面包店中工作? ## [课后测验](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/223) ## 复习与自学 -回顾这种类型系统在行业中的使用。选择一个领域,例如制造业或视频游戏行业,发现多智能体系统如何用于解决独特问题。 +复习此类系统在工业中的应用。选择一个领域,例如制造业或视频游戏行业,探索多智能体系统如何用于解决独特问题。 -## [NetLogo作业](assignment.md) +## [NetLogo 作业](assignment.md) -**免责声明**: -本文件是使用基于机器的人工智能翻译服务进行翻译的。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业的人类翻译。我们对因使用此翻译而产生的任何误解或误释不承担任何责任。 \ No newline at end of file +**免责声明**: +本文档使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/6-Other/23-MultiagentSystems/assignment.md b/translations/zh/lessons/6-Other/23-MultiagentSystems/assignment.md index 8942c762..dedec22f 100644 --- a/translations/zh/lessons/6-Other/23-MultiagentSystems/assignment.md +++ b/translations/zh/lessons/6-Other/23-MultiagentSystems/assignment.md @@ -1,8 +1,17 @@ + # NetLogo 作业 -选择 NetLogo 库中的一个模型,并尽可能地用它来模拟现实生活中的情况。一个好的例子是调整“Alternative Visualizations”文件夹中的 Virus 模型,以展示它如何用于模拟 COVID-19 的传播。你能构建一个模仿现实生活中病毒传播的模型吗? +从 NetLogo 的库中选择一个模型,并使用它尽可能接近地模拟一个现实生活中的情境。一个很好的例子是调整“替代可视化”文件夹中的病毒模型,展示它如何用于模拟 COVID-19 的传播。你能否构建一个模拟现实生活中病毒传播的模型? -通过保存副本并制作一个视频演示来展示你的工作,解释模型如何与现实世界的情况相连接。 +通过保存一个副本并制作一个视频演示来展示你的工作,解释该模型如何与现实世界的情境相关联。 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或错误解释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。 \ No newline at end of file diff --git a/translations/zh/lessons/7-Ethics/README.md b/translations/zh/lessons/7-Ethics/README.md index bd0466b0..91722da0 100644 --- a/translations/zh/lessons/7-Ethics/README.md +++ b/translations/zh/lessons/7-Ethics/README.md @@ -1,43 +1,52 @@ + # 伦理与负责任的人工智能 -您几乎完成了本课程,我希望到现在为止,您已经清楚地认识到人工智能是基于一系列正式的数学方法,这些方法使我们能够在数据中找到关系,并训练模型以复制人类行为的某些方面。在历史的这一时刻,我们认为人工智能是一个非常强大的工具,可以从数据中提取模式,并将这些模式应用于解决新问题。 +你已经快完成这门课程了,希望到现在为止,你已经清楚地了解到人工智能是基于一系列正式的数学方法,这些方法使我们能够发现数据中的关系,并训练模型以复制人类行为的某些方面。在当下,我们认为人工智能是一种非常强大的工具,可以从数据中提取模式,并将这些模式应用于解决新的问题。 -## [课前小测验](https://white-water-09ec41f0f.azurestaticapps.net/quiz/5/) +## [课前测验](https://white-water-09ec41f0f.azurestaticapps.net/quiz/5/) -然而,在科幻作品中,我们经常看到人工智能对人类构成威胁的故事。通常这些故事围绕某种人工智能反叛展开,当人工智能决定与人类对抗时。这暗示了人工智能具有某种情感或能够做出开发者未曾预见的决策。 +然而,在科幻作品中,我们经常看到人工智能对人类构成威胁的故事。这些故事通常围绕某种人工智能叛变展开,即人工智能决定与人类对抗。这暗示人工智能具有某种情感或能够做出开发者未曾预料的决定。 -我们在本课程中学习到的人工智能不过是大型矩阵运算。它是一个非常强大的工具,帮助我们解决问题,正如其他任何强大的工具一样——它可以用于善,也可以用于恶。重要的是,它可能会被*误用*。 +我们在这门课程中学习的人工智能仅仅是大型矩阵运算。它是一种非常强大的工具,可以帮助我们解决问题,但和其他任何强大的工具一样——它既可以被用于好的目的,也可以被用于坏的目的。重要的是,它可能会被*滥用*。 -## 负责任的人工智能原则 +## 负责任人工智能的原则 -为了避免这种意外或故意的人工智能误用,微软提出了重要的[负责任的人工智能原则](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-77998-cacaste)。以下概念支撑着这些原则: +为了避免人工智能的意外或故意滥用,微软提出了重要的[负责任人工智能原则](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-77998-cacaste)。以下概念是这些原则的基础: -* **公平性**与*模型偏见*的重要问题相关,这种偏见可能是由于使用了有偏见的数据进行训练。例如,当我们尝试预测一个人获得软件开发者职位的概率时,模型可能会对男性给予更高的偏好——仅仅因为训练数据集可能偏向于男性受众。我们需要仔细平衡训练数据,调查模型以避免偏见,并确保模型考虑到更相关的特征。 -* **可靠性和安全性**。由于其本质,人工智能模型可能会犯错误。神经网络返回概率,我们在做决策时需要考虑这一点。每个模型都有一定的精确度和召回率,我们需要理解这一点,以防止错误建议可能造成的伤害。 -* **隐私和安全**在某种程度上具有人工智能特有的含义。例如,当我们使用某些数据来训练模型时,这些数据在某种程度上会“融入”模型中。一方面,这增加了安全性和隐私性,另一方面,我们需要记住模型是基于哪些数据进行训练的。 -* **包容性**意味着我们并不是在构建替代人类的人工智能,而是为了增强人类,使我们的工作更具创造性。这也与公平性有关,因为在处理代表性不足的社区时,我们收集的大多数数据集可能会有偏见,我们需要确保这些社区被包含并得到人工智能的正确处理。 -* **透明性**。这包括确保我们始终明确使用的人工智能。此外,在可能的情况下,我们希望使用*可解释*的人工智能系统。 -* **问责制**。当人工智能模型做出某些决策时,谁对这些决策负责并不总是明确的。我们需要确保了解人工智能决策的责任所在。在大多数情况下,我们希望将人类纳入重要决策的循环中,以便实际的人被追究责任。 +* **公平性**与*模型偏差*这一重要问题相关,这种偏差可能是由于使用了有偏的数据进行训练。例如,当我们试图预测一个人获得软件开发职位的概率时,模型可能会更倾向于男性——仅仅因为训练数据集可能偏向男性群体。我们需要仔细平衡训练数据并调查模型以避免偏差,并确保模型考虑到更相关的特征。 +* **可靠性与安全性**。人工智能模型本质上可能会犯错。神经网络返回的是概率,我们需要在做决策时考虑到这一点。每个模型都有一定的精确度和召回率,我们需要理解这些指标,以防止错误建议可能造成的伤害。 +* **隐私与安全性**具有一些人工智能特定的影响。例如,当我们使用某些数据训练模型时,这些数据会以某种方式“整合”到模型中。一方面,这提高了安全性和隐私性,另一方面,我们需要记住模型是基于哪些数据训练的。 +* **包容性**意味着我们不是在构建人工智能来取代人类,而是为了增强人类的能力,使我们的工作更具创造性。这也与公平性相关,因为在处理代表性不足的群体时,我们收集的大多数数据集可能会存在偏差,我们需要确保这些群体被包括在内并被人工智能正确处理。 +* **透明性**。这包括确保我们始终明确人工智能的使用。此外,在可能的情况下,我们希望使用*可解释*的人工智能系统。 +* **问责性**。当人工智能模型做出某些决定时,责任归属并不总是清晰的。我们需要确保理解人工智能决策的责任归属。在大多数情况下,我们希望将人类纳入重要决策的环节,以便实际的人类承担责任。 -## 负责任的人工智能工具 +## 负责任人工智能的工具 -微软开发了[负责任的人工智能工具箱](https://github.com/microsoft/responsible-ai-toolbox),其中包含一套工具: +微软开发了[负责任人工智能工具箱](https://github.com/microsoft/responsible-ai-toolbox),其中包含一系列工具: * 可解释性仪表板 (InterpretML) * 公平性仪表板 (FairLearn) * 错误分析仪表板 -* 负责任的人工智能仪表板,包括 +* 负责任人工智能仪表板,包括: - - EconML - 关注假设问题的因果分析工具 - - DiCE - 反事实分析工具,让您看到哪些特征需要更改以影响模型的决策 + - EconML - 用于因果分析的工具,专注于假设性问题 + - DiCE - 用于反事实分析的工具,允许你查看需要更改哪些特征以影响模型的决策 -有关人工智能伦理的更多信息,请访问[本课程](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/3-fairness?WT.mc_id=academic-77998-cacaste),该课程包括作业。 +关于人工智能伦理的更多信息,请访问机器学习课程中的[这一课](https://github.com/microsoft/ML-For-Beginners/tree/main/1-Introduction/3-fairness?WT.mc_id=academic-77998-cacaste),其中包括相关作业。 ## 复习与自学 -参加这个[学习路径](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77998-cacaste),以了解更多关于负责任的人工智能的信息。 +通过这个[学习路径](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77998-cacaste)了解更多关于负责任人工智能的内容。 -## [课后小测验](https://white-water-09ec41f0f.azurestaticapps.net/quiz/6/) +## [课后测验](https://white-water-09ec41f0f.azurestaticapps.net/quiz/6/) **免责声明**: -本文件使用机器翻译的人工智能翻译服务进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而导致的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/README.md b/translations/zh/lessons/README.md index 58fd1bdf..e5f6cec1 100644 --- a/translations/zh/lessons/README.md +++ b/translations/zh/lessons/README.md @@ -1,8 +1,17 @@ + # 概述 -![概述草图](../../../translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.zh.png) +![概述的手绘图](../../../translated_images/ai-overview.0857791951d19500d0ef8b803d77110c738dcafc52306e6d68724742cd4af167.zh.png) -> 草图由 [Tomomi Imura](https://twitter.com/girlie_mac) 提供 +> 手绘笔记由 [Tomomi Imura](https://twitter.com/girlie_mac) 提供 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/X-Extras/X1-MultiModal/README.md b/translations/zh/lessons/X-Extras/X1-MultiModal/README.md index 3d41e1f6..94251361 100644 --- a/translations/zh/lessons/X-Extras/X1-MultiModal/README.md +++ b/translations/zh/lessons/X-Extras/X1-MultiModal/README.md @@ -1,79 +1,88 @@ + # 多模态网络 -在变换器模型成功解决自然语言处理任务后,相同或类似的架构已被应用于计算机视觉任务。人们对构建能够*结合*视觉和自然语言能力的模型越来越感兴趣。OpenAI 就是这样的尝试之一,名为 CLIP 和 DALL.E。 +在Transformer模型成功解决NLP任务后,相同或类似的架构也被应用于计算机视觉任务。越来越多的人开始关注构建能够*结合*视觉和自然语言能力的模型。其中一个尝试是由OpenAI完成的,称为CLIP和DALL.E。 -## 对比图像预训练 (CLIP) +## 对比图像预训练(CLIP) -CLIP 的主要思想是能够将文本提示与图像进行比较,并确定图像与提示的对应程度。 +CLIP的核心思想是能够比较文本提示与图像,并确定图像与提示的匹配程度。 -![CLIP 架构](../../../../../translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.zh.png) +![CLIP架构](../../../../../translated_images/clip-arch.b3dbf20b4e8ed8be1c38e2bc6100fd3cc257c33cda4692b301be91f791b13ea7.zh.png) -> *图片来自 [这篇博客文章](https://openai.com/blog/clip/)* +> *图片来源于[这篇博客](https://openai.com/blog/clip/)* -该模型在从互联网上获取的图像及其说明上进行训练。对于每个批次,我们获取 N 对 (图像, 文本),并将它们转换为某种向量表示 I 和 T。这些表示随后被匹配在一起。损失函数的定义是最大化对应于一对 (例如 I 和 T) 的向量之间的余弦相似度,并最小化所有其他对之间的余弦相似度。这就是这个方法被称为 **对比** 的原因。 +该模型通过从互联网获取的图像及其标题进行训练。对于每个批次,我们获取N对(图像,文本),并将它们转换为一些向量表示I,..., I / T,..., T。这些表示随后进行匹配。损失函数的定义是最大化对应一对(例如I和T)的向量之间的余弦相似度,同时最小化所有其他对之间的余弦相似度。这就是为什么这种方法被称为**对比学习**。 -CLIP 模型/库可以从 [OpenAI GitHub](https://github.com/openai/CLIP) 获取。该方法在 [这篇博客文章](https://openai.com/blog/clip/) 中进行了描述,并在 [这篇论文](https://arxiv.org/pdf/2103.00020.pdf) 中进行了更详细的阐述。 +CLIP模型/库可以从[OpenAI GitHub](https://github.com/openai/CLIP)获取。该方法在[这篇博客](https://openai.com/blog/clip/)中有所描述,并在[这篇论文](https://arxiv.org/pdf/2103.00020.pdf)中有更详细的说明。 -一旦该模型经过预训练,我们可以给它一批图像和一批文本提示,它将返回一个包含概率的张量。CLIP 可用于多个任务: +一旦该模型被预训练,我们可以给它一批图像和一批文本提示,它将返回一个概率张量。CLIP可以用于以下任务: **图像分类** -假设我们需要对图像进行分类,例如,猫、狗和人。在这种情况下,我们可以给模型一张图像,以及一系列文本提示:“*一张猫的图片*”,“*一张狗的图片*”,“*一张人类的图片*”。在结果的 3 个概率向量中,我们只需选择具有最高值的索引。 +假设我们需要将图像分类为猫、狗和人类。在这种情况下,我们可以给模型一个图像,以及一系列文本提示:“*一张猫的图片*”、“*一张狗的图片*”、“*一张人类的图片*”。在结果的3个概率向量中,我们只需选择值最高的索引。 -![CLIP 用于图像分类](../../../../../translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.zh.png) +![CLIP用于图像分类](../../../../../translated_images/clip-class.3af42ef0b2b19369a633df5f20ddf4f5a01d6c8ffa181e9d3a0572c19f919f72.zh.png) -> *图片来自 [这篇博客文章](https://openai.com/blog/clip/)* +> *图片来源于[这篇博客](https://openai.com/blog/clip/)* **基于文本的图像搜索** -我们也可以做相反的事情。如果我们有一组图像,我们可以将这组图像传递给模型,以及一个文本提示——这将为我们提供与给定提示最相似的图像。 +我们也可以反过来操作。如果我们有一组图像,我们可以将这组图像传递给模型,并提供一个文本提示——这将返回与给定提示最相似的图像。 -## ✍️ 示例: [使用 CLIP 进行图像分类和图像搜索](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) +## ✍️ 示例:[使用CLIP进行图像分类和图像搜索](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) -打开 [Clip.ipynb](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb) 笔记本以查看 CLIP 的实际应用。 +打开[Clip.ipynb](../../../../../lessons/X-Extras/X1-MultiModal/Clip.ipynb)笔记本,查看CLIP的实际应用。 -## 使用 VQGAN+CLIP 进行图像生成 +## 使用VQGAN+CLIP进行图像生成 -CLIP 还可以用于从文本提示中**生成图像**。为此,我们需要一个**生成器模型**,能够根据某些向量输入生成图像。其中一个这样的模型被称为 [VQGAN](https://compvis.github.io/taming-transformers/)(向量量化 GAN)。 +CLIP还可以用于从文本提示生成**图像**。为了实现这一点,我们需要一个**生成器模型**,能够根据某些向量输入生成图像。其中一个这样的模型称为[VQGAN](https://compvis.github.io/taming-transformers/)(向量量化GAN)。 -VQGAN 与普通 [GAN](../../4-ComputerVision/10-GANs/README.md) 的主要区别如下: -* 使用自回归变换器架构生成组成图像的上下文丰富的视觉部分序列。这些视觉部分又通过 [CNN](../../4-ComputerVision/07-ConvNets/README.md) 学习得到。 -* 使用子图像判别器,检测图像的部分是否为“真实”或“虚假”(与传统 GAN 的“全有或全无”方法不同)。 +VQGAN与普通[GAN](../../4-ComputerVision/10-GANs/README.md)的主要区别在于以下几点: +* 使用自回归Transformer架构生成一系列上下文丰富的视觉部分,这些部分组成图像。这些视觉部分由[卷积神经网络(CNN)](../../4-ComputerVision/07-ConvNets/README.md)学习。 +* 使用子图像判别器来检测图像的部分是“真实”还是“伪造”(与传统GAN的“全或无”方法不同)。 -在 [Taming Transformers](https://compvis.github.io/taming-transformers/) 网站上了解更多关于 VQGAN 的信息。 +可以在[Taming Transformers](https://compvis.github.io/taming-transformers/)网站上了解更多关于VQGAN的信息。 -VQGAN 与传统 GAN 之间的重要区别之一是,后者可以从任何输入向量生成不错的图像,而 VQGAN 生成的图像可能不连贯。因此,我们需要进一步指导图像创建过程,这可以通过 CLIP 来实现。 +VQGAN与传统GAN的一个重要区别在于,后者可以从任何输入向量生成一个不错的图像,而VQGAN可能生成一个不连贯的图像。因此,我们需要进一步引导图像创建过程,这可以通过CLIP来实现。 -![VQGAN+CLIP 架构](../../../../../translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.zh.png) +![VQGAN+CLIP架构](../../../../../translated_images/vqgan.5027fe05051dfa3101950cfa930303f66e6478b9bd273e83766731796e462d9b.zh.png) -为了生成与文本提示对应的图像,我们从一些随机编码向量开始,并将其传递给 VQGAN 以生成图像。然后使用 CLIP 生成一个损失函数,显示图像与文本提示的对应程度。目标是最小化这个损失,使用反向传播来调整输入向量参数。 +为了生成与文本提示相对应的图像,我们从一些随机编码向量开始,将其传递给VQGAN以生成图像。然后使用CLIP生成一个损失函数,显示图像与文本提示的匹配程度。目标是通过反向传播调整输入向量参数以最小化该损失。 -一个实现 VQGAN+CLIP 的优秀库是 [Pixray](http://github.com/pixray/pixray)。 +一个实现VQGAN+CLIP的优秀库是[Pixray](http://github.com/pixray/pixray)。 -![Pixray 生成的图片](../../../../../translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.zh.png) | ![Pixray 生成的图片](../../../../../translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.zh.png) | ![Pixray 生成的图片](../../../../../translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.zh.png) +![Pixray生成的图片](../../../../../translated_images/a_closeup_watercolor_portrait_of_young_male_teacher_of_literature_with_a_book.2384968e9db8a0d09dc96de938b9f95bde8a7e1c721f48f286a7795bf16d56c7.zh.png) | ![Pixray生成的图片](../../../../../translated_images/a_closeup_oil_portrait_of_young_female_teacher_of_computer_science_with_a_computer.e0b6495f210a439077e1c32cc8afdf714e634fe24dc78dc5aa45fd2f560b0ed5.zh.png) | ![Pixray生成的图片](../../../../../translated_images/a_closeup_oil_portrait_of_old_male_teacher_of_math.5362e67aa7fc2683b9d36a613b364deb7454760cd39205623fc1e3938fa133c0.zh.png) ----|----|---- -根据提示 *一张年轻男性文学教师手持书籍的水彩特写肖像* 生成的图片 | 根据提示 *一张年轻女性计算机科学教师手持电脑的油画特写肖像* 生成的图片 | 根据提示 *一张老年男性数学教师在黑板前的油画特写肖像* 生成的图片 +从提示*一张年轻男性文学教师拿着书的水彩特写肖像*生成的图片 | 从提示*一张年轻女性计算机科学教师拿着电脑的油画特写肖像*生成的图片 | 从提示*一张老年男性数学教师站在黑板前的油画特写肖像*生成的图片 -> 图片来自 **人工教师** 系列,由 [Dmitry Soshnikov](http://soshnikov.com) 提供 +> 图片来自**人工教师**系列,由[Dmitry Soshnikov](http://soshnikov.com)创作 ## DALL-E ### [DALL-E 1](https://openai.com/research/dall-e) -DALL-E 是一种经过训练的 GPT-3 版本,旨在根据提示生成图像。它的训练参数达到了 120 亿。 +DALL-E是一个基于GPT-3的版本,能够根据提示生成图像。它使用了120亿参数进行训练。 -与 CLIP 不同,DALL-E 将文本和图像作为一系列令牌的单一流输入。因此,从多个提示中,您可以基于文本生成图像。 +与CLIP不同,DALL-E将文本和图像作为一个单一的令牌流输入。因此,可以根据多个提示生成图像。 ### [DALL-E 2](https://openai.com/dall-e-2) -DALL-E 1 和 DALL-E 2 之间的主要区别在于,后者生成的图像和艺术作品更加真实。 +DALL-E 1和2的主要区别在于,后者能够生成更真实的图像和艺术作品。 -DALL-E 生成的图像示例: -![Pixray 生成的图片](../../../../../translated_images/DALL·E%202023-06-20%2015.56.56%20-%20a%20closeup%20watercolor%20portrait%20of%20young%20male%20teacher%20of%20literature%20with%20a%20book.6c235e8271d9ed10ce985d86aeb241a58518958647973af136912116b9518fce.zh.png) | ![Pixray 生成的图片](../../../../../translated_images/DALL·E%202023-06-20%2015.57.43%20-%20a%20closeup%20oil%20portrait%20of%20young%20female%20teacher%20of%20computer%20science%20with%20a%20computer.f21dc4166340b6c8b4d1cb57efd1e22127407f9b28c9ac7afe11344065369e64.zh.png) | ![Pixray 生成的图片](../../../../../translated_images/DALL·E%202023-06-20%2015.58.42%20-%20%20a%20closeup%20oil%20portrait%20of%20old%20male%20teacher%20of%20mathematics%20in%20front%20of%20blackboard.d331c2dfbdc3f7c46aa65c0809066f5e7ed4b49609cd259852e760df21051e4a.zh.png) +以下是使用DALL-E生成图像的示例: +![DALL-E生成的图片](../../../../../translated_images/DALL·E%202023-06-20%2015.56.56%20-%20a%20closeup%20watercolor%20portrait%20of%20young%20male%20teacher%20of%20literature%20with%20a%20book.6c235e8271d9ed10ce985d86aeb241a58518958647973af136912116b9518fce.zh.png) | ![DALL-E生成的图片](../../../../../translated_images/DALL·E%202023-06-20%2015.57.43%20-%20a%20closeup%20oil%20portrait%20of%20young%20female%20teacher%20of%20computer%20science%20with%20a%20computer.f21dc4166340b6c8b4d1cb57efd1e22127407f9b28c9ac7afe11344065369e64.zh.png) | ![DALL-E生成的图片](../../../../../translated_images/DALL·E%202023-06-20%2015.58.42%20-%20%20a%20closeup%20oil%20portrait%20of%20old%20male%20teacher%20of%20mathematics%20in%20front%20of%20blackboard.d331c2dfbdc3f7c46aa65c0809066f5e7ed4b49609cd259852e760df21051e4a.zh.png) ----|----|---- -根据提示 *一张年轻男性文学教师手持书籍的水彩特写肖像* 生成的图片 | 根据提示 *一张年轻女性计算机科学教师手持电脑的油画特写肖像* 生成的图片 | 根据提示 *一张老年男性数学教师在黑板前的油画特写肖像* 生成的图片 +从提示*一张年轻男性文学教师拿着书的水彩特写肖像*生成的图片 | 从提示*一张年轻女性计算机科学教师拿着电脑的油画特写肖像*生成的图片 | 从提示*一张老年男性数学教师站在黑板前的油画特写肖像*生成的图片 ## 参考文献 -* VQGAN 论文: [高分辨率图像合成的变换器驯化](https://compvis.github.io/taming-transformers/paper/paper.pdf) -* CLIP 论文: [从自然语言监督学习可转移的视觉模型](https://arxiv.org/pdf/2103.00020.pdf) +* VQGAN论文:[Taming Transformers for High-Resolution Image Synthesis](https://compvis.github.io/taming-transformers/paper/paper.pdf) +* CLIP论文:[Learning Transferable Visual Models From Natural Language Supervision](https://arxiv.org/pdf/2103.00020.pdf) **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用此翻译而导致的任何误解或误释不承担任何责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/sketchnotes/LICENSE.md b/translations/zh/lessons/sketchnotes/LICENSE.md index 18079afd..42e905b6 100644 --- a/translations/zh/lessons/sketchnotes/LICENSE.md +++ b/translations/zh/lessons/sketchnotes/LICENSE.md @@ -1,182 +1,197 @@ -# 署名-相同方式共享 4.0 国际版 + +归属-相同方式共享 4.0 国际 ======================================================================= -创意共享公司(“创意共享”)并非法律事务所,且不提供法律服务或法律建议。分发创意共享公共许可证并不构成律师与客户或其他关系。创意共享以“按原样”基础提供其许可证及相关信息。创意共享对其许可证、根据其条款和条件许可的任何材料或任何相关信息不提供任何保证。创意共享在法律允许的最大范围内,否认因使用其许可证而产生的所有损害赔偿责任。 +创作共用公司(“创作共用”)不是律师事务所,也不提供法律服务或法律建议。分发创作共用公共许可不会建立律师-客户或其他关系。创作共用以“按原样”方式提供其许可及相关信息。创作共用对其许可、根据其条款和条件许可的任何材料或任何相关信息不作任何保证。创作共用在法律允许的最大范围内对因使用其许可而导致的损害不承担任何责任。 -使用创意共享公共许可证 +使用创作共用公共许可 -创意共享公共许可证提供了一套标准的条款和条件,供创作者和其他权利持有人用以分享原创著作和其他受版权保护的材料,以及以下公共许可证中规定的某些其他权利。以下考虑事项仅供参考,并不详尽,也不构成我们许可证的一部分。 +创作共用公共许可提供了一套标准条款和条件,创作者和其他权利持有人可以使用这些条款和条件来分享受版权保护的原创作品以及公共许可中规定的某些其他权利。以下注意事项仅供参考,并不详尽,也不构成我们许可的一部分。 -- 许可方的考虑事项:我们的公共许可证旨在供那些被授权向公众许可使用受版权和其他某些权利限制的材料的人使用。我们的许可证是不可撤销的。许可方应在应用许可证之前阅读并理解所选择许可证的条款和条件。许可方还应在应用我们的许可证之前确保所有必要的权利,以便公众能够按预期重用材料。许可方应清楚标记任何不受许可证约束的材料。这包括其他 CC 许可的材料,或根据版权的例外或限制使用的材料。更多许可方的考虑事项: -wiki.creativecommons.org/Considerations_for_licensors + 对许可人的注意事项:我们的公共许可旨在供那些有权向公众授权使用受版权和某些其他权利限制的材料的人使用。我们的许可是不可撤销的。许可人在应用许可之前应阅读并理解所选许可的条款和条件。许可人还应在应用我们的许可之前确保获得所有必要的权利,以便公众能够按预期重新使用材料。许可人应清楚标明任何不受许可约束的材料,包括其他创作共用许可的材料,或根据版权的例外或限制使用的材料。更多关于许可人的注意事项: + wiki.creativecommons.org/Considerations_for_licensors -- 公众的考虑事项:通过使用我们的公共许可证,许可方授予公众根据规定的条款和条件使用被许可材料的权限。如果由于任何原因不需要许可方的许可——例如,由于适用的版权例外或限制——那么该使用不受许可证的约束。我们的许可证仅授予许可方有权授予的版权及其他某些权利下的权限。使用被许可材料仍可能因其他原因受到限制,包括其他人对该材料拥有版权或其他权利。许可方可以提出特别请求,例如要求标记或描述所有更改。尽管我们的许可证不要求,您被鼓励在合理的情况下尊重这些请求。更多公众的考虑事项: -wiki.creativecommons.org/Considerations_for_licensees + 对公众的注意事项:通过使用我们的公共许可,许可人授予公众在规定的条款和条件下使用许可材料的权限。如果因任何原因不需要许可人的授权,例如因适用的版权例外或限制,则该使用不受许可约束。我们的许可仅授予许可人有权授予的版权和某些其他权利下的权限。对许可材料的使用可能仍因其他原因受到限制,包括其他人对材料拥有版权或其他权利。许可人可能会提出特别要求,例如要求标明或描述所有更改。虽然我们的许可不要求这样做,但建议在合理的情况下尊重这些要求。更多关于公众的注意事项: + wiki.creativecommons.org/Considerations_for_licensees ======================================================================= -创意共享署名-相同方式共享 4.0 国际公共许可证 +创作共用归属-相同方式共享 4.0 国际公共许可 -通过行使被许可权(定义见下文),您接受并同意受此创意共享署名-相同方式共享 4.0 国际公共许可证(“公共许可证”)的条款和条件的约束。在一定程度上,如果本公共许可证可被解释为合同,则您被授予被许可权是基于您接受这些条款和条件,而许可方则基于其因根据这些条款和条件提供被许可材料而获得的利益授予您该权利。 +通过行使许可权利(定义如下),您接受并同意受创作共用归属-相同方式共享 4.0 国际公共许可(“公共许可”)条款和条件的约束。如果此公共许可可被解释为合同,则您因接受这些条款和条件而被授予许可权利,许可人因根据这些条款和条件提供许可材料而获得的利益授予您这些权利。 -## 第 1 节 -- 定义 +第 1 节 -- 定义。 -a. 改编材料是指受版权和类似权利保护的材料,该材料源自或基于被许可材料,并且在其中,被许可材料以需要根据许可方持有的版权和类似权利获得许可的方式进行了翻译、修改、排列、转变或其他修改。就本公共许可证而言,如果被许可材料是音乐作品、表演或音频录音,则改编材料总是产生于被许可材料与动态图像的同步关系中。 + a. 改编材料指受版权及类似权利约束的材料,这些材料基于许可材料进行翻译、修改、编排、转化或以其他方式变更,需获得许可人持有的版权及类似权利的许可。对于本公共许可而言,当许可材料是音乐作品、表演或录音时,改编材料总是在许可材料与动态影像同步时产生。 -b. 适配者许可证是指您根据本公共许可证的条款和条件,应用于您对改编材料的贡献的版权和类似权利的许可证。 + b. 改编者许可指您根据本公共许可的条款和条件对您在改编材料中的贡献应用的版权及类似权利许可。 -c. BY-SA 兼容许可证是指在 creativecommons.org/compatiblelicenses 列出的、经创意共享批准的本公共许可证实质等效的许可证。 + c. BY-SA 兼容许可指创作共用批准的、与本公共许可基本等同的许可,列于 creativecommons.org/compatiblelicenses。 -d. 版权和类似权利是指版权和/或与版权密切相关的类似权利,包括但不限于表演、广播、音频录音和特别数据库权利,而不论这些权利如何标记或分类。就本公共许可证而言,第 2(b)(1)-(2) 节中规定的权利不属于版权和类似权利。 + d. 版权及类似权利指与版权密切相关的版权和/或类似权利,包括但不限于表演、广播、录音和特殊数据库权利,无论这些权利如何被标记或分类。对于本公共许可而言,第 2(b)(1)-(2) 中规定的权利不属于版权及类似权利。 -e. 有效技术措施是指在缺乏适当授权的情况下,根据 1996 年 12 月 20 日通过的《WIPO 版权条约》第 11 条所规定的义务和/或类似国际协议,可能无法规避的措施。 + e. 有效技术措施指在没有适当授权的情况下,根据 1996 年 12 月 20 日通过的《世界知识产权组织版权条约》第 11 条及/或类似国际协议的义务,无法规避的措施。 -f. 例外和限制是指适用于您使用被许可材料的合理使用、公平交易和/或任何其他版权和类似权利的例外或限制。 + f. 例外和限制指适用于您使用许可材料的版权及类似权利的任何例外或限制,例如合理使用、合理交易等。 -g. 许可证要素是指创意共享公共许可证名称中列出的许可证属性。本公共许可证的许可证要素是署名和相同方式共享。 + g. 许可元素指创作共用公共许可名称中列出的许可属性。本公共许可的许可元素为归属和相同方式共享。 -h. 被许可材料是指许可方应用本公共许可证的艺术或文学作品、数据库或其他材料。 + h. 许可材料指许可人应用本公共许可的艺术或文学作品、数据库或其他材料。 -i. 被许可权是指根据本公共许可证的条款和条件授予您的权利,这些权利仅限于适用于您对被许可材料使用的所有版权和类似权利,并且许可方有权许可。 + i. 许可权利指根据本公共许可的条款和条件授予您的权利,这些权利仅限于适用于您使用许可材料的所有版权及类似权利,并且许可人有权许可这些权利。 -j. 许可方是指根据本公共许可证授予权利的个人或实体。 + j. 许可人指根据本公共许可授予权利的个人或实体。 -k. 分享是指通过任何需要根据被许可权获得许可的方式或过程向公众提供材料,例如复制、公开展示、公开表演、分发、传播、交流或进口,并使材料对公众可用,包括使公众可以在他们选择的时间和地点访问材料的方式。 + k. 分享指通过任何需要许可权利的方式或过程向公众提供材料,例如复制、公开展示、公开表演、分发、传播、通信或进口,以及以公众可以在其选择的时间和地点访问材料的方式向公众提供材料。 -l. 特别数据库权利是指根据1996年3月11日欧洲议会和理事会第96/9/EC号指令有关数据库法律保护的规定而产生的除版权以外的权利,经过修订和/或替代,以及世界任何地方的其他实质等效权利。 + l. 特殊数据库权利指除版权外的权利,这些权利源自 1996 年 3 月 11 日欧洲议会和理事会通过的《数据库法律保护指令》(96/9/EC),以及其修订或继承版本,以及世界范围内其他基本等同的权利。 -m. 您是指在本公共许可证下行使被许可权的个人或实体。您的含义相应。 + m. 您指根据本公共许可行使许可权利的个人或实体。“您的”具有相应的含义。 -## 第 2 节 -- 范围 +第 2 节 -- 范围。 -a. 许可证授予。 + a. 许可授予。 -1. 根据本公共许可证的条款和条件,许可方特此授予您全球范围内的、免版税的、不可再许可的、非独占的、不可撤销的许可证,以行使被许可权于被许可材料: + 1. 根据本公共许可的条款和条件,许可人特此授予您全球范围内的、免版税的、不可转授权的、非独占的、不可撤销的许可,以行使许可权利: - a. 复制和分享被许可材料,全部或部分;以及 + a. 复制和分享许可材料,无论是全部还是部分;以及 - b. 制作、复制和分享改编材料。 + b. 生产、复制和分享改编材料。 -2. 例外和限制。为避免疑问,当例外和限制适用于您的使用时,本公共许可证不适用,您无需遵守其条款和条件。 + 2. 例外和限制。为避免疑义,如果例外和限制适用于您的使用,则本公共许可不适用,您无需遵守其条款和条件。 -3. 期限。本公共许可证的期限在第 6(a) 节中规定。 + 3. 期限。本公共许可的期限在第 6(a) 节中规定。 -4. 媒体和格式;允许的技术修改。许可方授权您在所有现在已知或将来创建的媒体和格式中行使被许可权,并进行必要的技术修改。许可方放弃和/或同意不主张禁止您进行行使被许可权所需的技术修改的任何权利或权威,包括为绕过有效技术措施而进行的技术修改。就本公共许可证而言,仅仅根据本第 2(a)(4) 节授权的修改并不会产生改编材料。 + 4. 媒体和格式;允许技术修改。许可人授权您在现有或未来创建的所有媒体和格式中行使许可权利,并进行必要的技术修改。许可人放弃和/或同意不主张任何权利或权限,以禁止您进行必要的技术修改以行使许可权利,包括必要的技术修改以规避有效技术措施。对于本公共许可,仅进行本第 2(a)(4) 节授权的修改从未产生改编材料。 -5. 下游接收者。 + 5. 下游接收者。 - a. 来自许可方的要约 -- 被许可材料。每个被许可材料的接收者自动收到来自许可方的要约,以根据本公共许可证的条款和条件行使被许可权。 + a. 许可人的要约 -- 许可材料。每个许可材料的接收者自动收到许可人的要约,以根据本公共许可的条款和条件行使许可权利。 - b. 来自许可方的额外要约 -- 改编材料。每个来自您的改编材料的接收者自动收到来自许可方的要约,以在您应用的适配者许可证的条件下行使改编材料中的被许可权。 + b. 许可人的额外要约 -- 改编材料。每个从您处接收改编材料的接收者自动收到许可人的要约,以根据您应用的改编者许可的条件行使改编材料中的许可权利。 - c. 无下游限制。如果这样做会限制任何被许可材料接收者行使被许可权,您不得对被许可材料提供或施加任何额外或不同的条款或条件,或对其应用任何有效技术措施。 + c. 无下游限制。您不得对许可材料施加任何额外或不同的条款和条件,也不得应用任何有效技术措施,如果这样做会限制任何接收者行使许可权利。 -6. 无认可。本公共许可证中的任何内容均不构成或不得解释为许可您声称或暗示您与许可方或其他指定接受署名的人员相关,或您的被许可材料的使用与许可方或其他指定接受署名的人员相关,或由许可方或其他指定接受署名的人员赞助、认可或授予官方地位。 + 6. 无认可。本公共许可中的任何内容均不构成或可解释为允许您主张或暗示您或您的使用许可材料与许可人或其他指定接收归属的人有联系、获得认可或授予官方地位。 -b. 其他权利。 + b. 其他权利。 -1. 道德权利,例如完整权,不在本公共许可证下许可,也不包括宣传权、隐私权和/或其他类似的人格权;然而,在可能的范围内,许可方放弃和/或同意不主张许可方持有的任何此类权利,以在必要的有限范围内允许您行使被许可权,但不包括其他情况。 + 1. 道德权利,例如完整性权利,不在本公共许可范围内,也不包括宣传权、隐私权和/或其他类似的个性权利;然而,在可能的范围内,许可人放弃和/或同意不主张许可人持有的任何此类权利,以允许您在有限范围内行使许可权利,但除此之外不适用。 -2. 专利和商标权不在本公共许可证下许可。 + 2. 专利和商标权不在本公共许可范围内。 -3. 在可能的范围内,许可方放弃从您行使被许可权中收取版税的任何权利,无论是直接还是通过任何自愿或可放弃的法定或强制许可计划。在所有其他情况下,许可方明确保留收取此类版税的任何权利。 + 3. 在可能的范围内,许可人放弃任何直接或通过收集协会根据任何自愿或可放弃的法定或强制许可计划向您收取版税的权利。在所有其他情况下,许可人明确保留收取此类版税的权利。 -## 第 3 节 -- 许可证条件 +第 3 节 -- 许可条件。 -您行使被许可权明确受以下条件的约束。 +您行使许可权利明确以以下条件为前提。 -a. 署名。 + a. 归属。 -1. 如果您分享被许可材料(包括修改后的形式),您必须: + 1. 如果您分享许可材料(包括修改后的形式),您必须: - a. 保留许可方随被许可材料提供的以下内容: + a. 保留以下内容(如果许可人随许可材料提供): - i. 被许可材料创作者及任何其他指定接受署名者的识别,以许可方要求的任何合理方式(包括如有指定可使用化名); + i. 许可材料创作者及任何其他指定接收归属者的身份信息,以许可人要求的任何合理方式(包括使用化名,如果指定); - ii. 版权声明; + ii. 版权声明; - iii. 提及本公共许可证的通知; + iii. 提及本公共许可的声明; - iv. 提及免责声明的通知; + iv. 提及免责声明的声明; - v. 在合理可行的范围内,提供指向被许可材料的 URI 或超链接; + v. 在合理可行的范围内,许可材料的 URI 或超链接; - b. 表示您是否修改了被许可材料,并保留任何先前修改的指示;以及 + b. 表明您是否修改了许可材料,并保留任何先前修改的标识; - c. 表示被许可材料是根据本公共许可证许可的,并包括本公共许可证的文本或 URI 或超链接。 + c. 表明许可材料是根据本公共许可授权的,并包括本公共许可的文本或 URI 或超链接。 -2. 您可以根据您分享被许可材料的媒介、方式和上下文,以任何合理的方式满足第 3(a)(1) 节中的条件。例如,通过提供指向包含所需信息的资源的 URI 或超链接,可能是合理的满足条件的方式。 + 2. 您可以根据您分享许可材料的媒介、方式和上下文,以任何合理的方式满足第 3(a)(1) 节中的条件。例如,可以通过提供包含所需信息的资源的 URI 或超链接来满足条件。 -3. 如果许可方要求,您必须在合理可行的范围内移除第 3(a)(1)(A) 节所要求的任何信息。 + 3. 如果许可人要求,您必须在合理可行的范围内删除第 3(a)(1)(A) 节中要求的任何信息。 -b. 相同方式共享。 + b. 相同方式共享。 -除了第 3(a) 节中的条件外,如果您分享您制作的改编材料,以下条件也适用。 + 除第 3(a) 节中的条件外,如果您分享您制作的改编材料,还需满足以下条件。 -1. 您应用的适配者许可证必须是具有相同许可证要素的创意共享许可证,或本版本或更高版本,或 BY-SA 兼容许可证。 + 1. 您应用的改编者许可必须是具有相同许可元素的创作共用许可(本版本或更高版本),或 BY-SA 兼容许可。 -2. 您必须包括您应用的适配者许可证的文本或 URI 或超链接。您可以根据您分享改编材料的媒介、方式和上下文,以任何合理的方式满足此条件。 + 2. 您必须包括您应用的改编者许可的文本或 URI 或超链接。您可以根据您分享改编材料的媒介、方式和上下文,以任何合理的方式满足此条件。 -3. 您不得对改编材料提供或施加任何额外或不同的条款或条件,或对其应用任何有效技术措施,这将限制根据您应用的适配者许可证授予的权利的行使。 + 3. 您不得对改编材料施加任何额外或不同的条款和条件,也不得应用任何有效技术措施,如果这样做会限制根据您应用的改编者许可授予的权利。 -## 第 4 节 -- 特别数据库权利 +第 4 节 -- 特殊数据库权利。 -在被许可权包括适用于您使用被许可材料的特别数据库权利的情况下: +如果许可权利包括适用于您使用许可材料的特殊数据库权利: -a. 为避免疑问,第 2(a)(1) 节授予您提取、重用、复制和分享数据库内容的全部或实质部分的权利; + a. 为避免疑义,第 2(a)(1) 节授予您提取、重用、复制和分享数据库内容的全部或实质部分的权利; -b. 如果您将数据库的全部或实质部分内容包含在您拥有特别数据库权利的数据库中,则您拥有特别数据库权利的数据库(但不包括其单独内容)即为改编材料,包括在第 3(b) 节的目的;以及 + b. 如果您将数据库内容的全部或实质部分包含在您拥有特殊数据库权利的数据库中: +权利,然后您对数据库拥有的特殊数据库权利(但不包括其单独内容)属于改编材料, -c. 如果您分享数据库的全部或实质部分内容,您必须遵守第 3(a) 节中的条件。 +包括用于第 3(b) 节的目的;并且 +c. 如果您共享数据库的全部或大部分内容,您必须遵守第 3(a) 节中的条件。 -为避免疑问,本第 4 节补充并不替代您在本公共许可证下的义务,其中被许可权包括其他版权和类似权利。 +为避免疑义,本第 4 节是对您在本公共许可下的义务的补充,而不是替代,当许可权利包括其他版权和类似权利时。 -## 第 5 节 -- 免责声明和责任限制 -a. 除非许可方另有单独承诺,许可方在可能的范围内以“按原样”和“可用”形式提供被许可材料,并且不对被许可材料的任何种类做出任何声明或保证,无论是明示的、暗示的、法定的还是其他的。这包括但不限于所有权、适销性、特定用途适用性、不侵权、缺陷的缺失或其他缺陷、准确性或错误的存在或缺失,无论是否已知或可发现。在不允许完全或部分免责声明的情况下,本免责声明可能不适用于您。 +第 5 节 —— 免责声明和责任限制。 -b. 在可能的范围内,许可方在任何法律理论下(包括但不限于过失)或以其他方式对您不承担任何直接、特殊、间接、附带、后果性、惩罚性、示范性或其他损失、费用、支出或因本公共许可证或使用被许可材料而产生的损害,即使许可方已被告知此类损失、费用、支出或损害的可能性。在不允许完全或部分责任限制的情况下,本限制可能不适用于您。 +a. 除非许可方另有单独承诺,在可能的范围内,许可方按“现状”和“可用”状态提供许可材料,并且不对许可材料作出任何形式的陈述或保证,无论是明示、暗示、法定或其他形式的。这包括但不限于所有权保证、适销性、特定用途适用性、非侵权性、无潜在或其他缺陷、准确性或是否存在错误(无论是否已知或可发现)。如果法律不允许完全或部分免责声明,则此免责声明可能不适用于您。 + +b. 在可能的范围内,无论基于何种法律理论(包括但不限于过失)或其他原因,许可方在任何情况下均不对因本公共许可或使用许可材料而导致的任何直接、特殊、间接、附带、后果性、惩罚性、示范性或其他损失、成本、费用或损害承担责任,即使许可方已被告知可能发生此类损失、成本、费用或损害。如果法律不允许完全或部分责任限制,则此限制可能不适用于您。 c. 上述免责声明和责任限制应以尽可能接近绝对免责声明和放弃所有责任的方式进行解释。 -## 第 6 节 -- 期限和终止 -a. 本公共许可证适用于此处许可的版权和类似权利的期限。然而,如果您未能遵守本公共许可证,则您在本公共许可证下的权利将自动终止。 +第 6 节 —— 期限和终止。 -b. 当您的使用被许可材料的权利根据第 6(a) 节终止时,它将自动恢复: +a. 本公共许可适用于此处许可的版权和类似权利的期限。然而,如果您未能遵守本公共许可,则您在本公共许可下的权利将自动终止。 -1. 在违反被纠正之日自动恢复,前提是它在您发现违规后的 30 天内得到纠正;或者 +b. 如果根据第 6(a) 节您的使用许可材料的权利已终止,则该权利可恢复: -2. 在许可方明确恢复的情况下。 +1. 如果在您发现违规行为后 30 天内纠正了违规行为,则自纠正之日起自动恢复;或 +2. 经许可方明确恢复。 -为避免疑问,本第 6(b) 节不影响许可方可能拥有的对您违反本公共许可证寻求救济的任何权利。 +为避免疑义,本第 6(b) 节不影响许可方因您违反本公共许可而寻求补救的任何权利。 -c. 为避免疑问,许可方也可以在任何时间以单独的条款或条件提供被许可材料,或停止分发被许可材料;然而,这样做不会终止本公共许可证。 +c. 为避免疑义,许可方也可以根据单独的条款或条件提供许可材料,或随时停止分发许可材料;然而,这不会终止本公共许可。 -d. 第 1、5、6、7 和 8 节在本公共许可证终止后仍然有效。 +d. 第 1、5、6、7 和 8 节在本公共许可终止后仍然有效。 -## 第 7 节 -- 其他条款和条件 -a. 除非明确同意,许可方不受您所传达的任何附加或不同条款或条件的约束。 +第 7 节 —— 其他条款和条件。 -b. 关于被许可材料的任何安排、理解或协议,除非在此明确说明,均与本公共许可证的条款和条件无关,且是独立的。 +a. 除非许可方明确同意,否则许可方不受您传达的任何附加或不同条款或条件的约束。 -## 第 8 节 -- 解释 +b. 关于许可材料的任何安排、理解或协议,如果未在此处说明,则与本公共许可的条款和条件分开且独立。 -a. 为避免疑问,本公共许可证不应被解释为减少、限制、约束或施加条件于任何可以在没有本公共许可证许可的情况下合法进行的对被许可材料的使用。 -b. 在可能的范围内,如果本公共许可证的任何条款被认为不可执行,则应自动修改至最低限度,以使其可执行。如果该条款无法修改,则应从本公共许可证中剔除,而不影响剩余条款和条件的可执行性。 +第 8 节 —— 解释。 -c. 本公共许可证的任何条款或条件均不得被放弃,且未经许可方明确同意,不得同意任何不遵守。 +a. 为避免疑义,本公共许可不会且不应被解释为减少、限制、约束或对任何在未获得本公共许可许可的情况下可以合法使用许可材料的行为施加条件。 + +b. 在可能的范围内,如果本公共许可的任何条款被视为不可执行,则应自动以最低限度的方式进行修改以使其可执行。如果该条款无法修改,则应从本公共许可中删除,而不影响其余条款和条件的可执行性。 + +c. 除非许可方明确同意,否则本公共许可的任何条款或条件均不得被放弃,也不得因未遵守而被视为同意。 + +d. 本公共许可中的任何内容均不构成或可被解释为对适用于许可方或您的任何特权和豁免的限制或放弃,包括来自任何司法管辖区或权威机构的法律程序的豁免。 -d. 本公共许可证中的任何内容均不构成或不得解释为对适用于许可方或您的任何特权和豁免的限制或放弃,包括来自任何司法管辖区或权威的法律程序。 ======================================================================= -创意共享并不是其公共许可证的当事方。尽管如此,创意共享可以选择将其公共许可证应用于其发布的材料,并在这些情况下被视为“许可方”。创意共享公共许可证的文本已根据 CC0 公共领域献身于公共领域。除非出于指示材料是根据创意共享公共许可证共享的有限目的,或根据创意共享在 creativecommons.org/policies 上发布的政策另行允许的情况,创意共享不授权使用“创意共享”商标或任何其他创意共享的商标或标志,除非事先获得书面同意,包括但不限于与对其任何公共许可证或任何其他安排、理解或协议的未经授权修改相关的情况。为避免疑问,本段落不构成公共许可证的一部分。 +Creative Commons 不是其公共许可的当事方。然而,Creative Commons 可以选择将其公共许可应用于其发布的材料,在这些情况下将被视为“许可方”。Creative Commons 公共许可的文本已通过 CC0 公共领域奉献声明献给公共领域。除非用于表明材料是根据 Creative Commons 公共许可共享的有限目的,或根据 Creative Commons 在 creativecommons.org/policies 上发布的政策另行允许,Creative Commons 不授权使用“Creative Commons”商标或任何其他 Creative Commons 的商标或标志,未经其事先书面同意,包括但不限于与对其任何公共许可的任何未经授权的修改或与许可材料使用相关的任何其他安排、理解或协议相关的情况。为避免疑义,本段不构成公共许可的一部分。 -可以通过 creativecommons.org 联系创意共享。 +您可以通过 creativecommons.org 联系 Creative Commons。 **免责声明**: -本文件使用基于机器的人工智能翻译服务进行翻译。尽管我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用本翻译而导致的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file diff --git a/translations/zh/lessons/sketchnotes/README.md b/translations/zh/lessons/sketchnotes/README.md index 32338d63..cecaf990 100644 --- a/translations/zh/lessons/sketchnotes/README.md +++ b/translations/zh/lessons/sketchnotes/README.md @@ -1,8 +1,17 @@ -所有课程的速写笔记可以在这里下载。 + +所有课程的手绘笔记可以在这里下载。 -🎨 创建者:Tomomi Imura (Twitter: [@girlie_mac](https://twitter.com/girlie_mac), GitHub: [girliemac](https://github.com/girliemac)) +🎨 由以下作者创作:Tomomi Imura(Twitter: [@girlie_mac](https://twitter.com/girlie_mac),GitHub: [girliemac](https://github.com/girliemac)) [![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) **免责声明**: -本文件是使用基于机器的人工智能翻译服务翻译的。虽然我们努力追求准确性,但请注意,自动翻译可能包含错误或不准确之处。原始文件的母语版本应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。 \ No newline at end of file +本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对于因使用本翻译而引起的任何误解或误读不承担责任。 \ No newline at end of file