찰리 제라드와 함께하는 스매싱 팟캐스트 에피소드 33: 머신 러닝이란?

게시 됨: 2022-03-10
빠른 요약 ↬ 이 에피소드에서는 기계 학습에 대해 이야기합니다. 웹 개발 컨텍스트 내에서 어떤 종류의 작업을 수행할 수 있습니까? Drew McLellan이 전문가 Charlie Gerard와 대화하여 알아냅니다.

이 에피소드에서는 기계 학습에 대해 이야기합니다. 웹 개발 컨텍스트 내에서 어떤 종류의 작업을 수행할 수 있습니까? 나는 그것을 알아보기 위해 전문가인 Charlie Gerard와 이야기를 나눴다.

메모 표시

  • JavaScript의 실용적인 기계 학습: 웹 개발자를 위한 TensorFlow.js
  • 트위터의 찰리
  • 찰리의 개인 사이트

주간 업데이트

  • 의존성 주입에 대한 실용적인 소개
    저자 제이미 코크힐
  • 광고 없는 웹을 향하여: 온라인 경제의 다양화
    저자 프레더릭 오브라이언
  • 웹은 하드웨어 기능을 노출해야 합니까?
    노암 로젠탈이 쓴
  • 2021년 Shopify 앱 판매로 더 많은 돈을 버는 방법
    저자 수잔 스카카
  • Flutter 애플리케이션에서 GetX 패키지 시작하기
    저자 켈빈 오메레숀

성적 증명서

찰리 제라드의 사진 Drew McLellan: 그녀는 Netlify의 수석 프론트엔드 개발자이자 웹 기술의 Google 개발자 전문가이자 Mozilla 기술 연사입니다. 여가 시간에 그녀는 인간 컴퓨터 상호 작용 분야를 탐구하고 하드웨어, 기계 학습 및 창의적 코딩을 사용하여 대화형 프로토타입을 만듭니다. 그녀는 정기적으로 컨퍼런스에서 연설하고 블로그 게시물을 작성하여 배운 것을 공유합니다. 그리고 가장 최근에는 Apress를 위한 JavaScript의 Practical Machine Learning이라는 책의 저자입니다.

Drew: 그래서 우리는 그녀가 프론트 엔드 전문가라는 것을 알고 있지만 꿈에서 뜨개질을 한 금속 파일을 사용하여 감옥에서 탈출한 적이 있습니다. 멋진 친구들이여, 환영합니다, Charlie Gerard. 안녕 찰리. 잘 지내고 있나요?

찰리 제라드: 굉장합니다.

Drew: 저는 오늘 기계 학습에 대해 이야기하고 싶었습니다. 기계 학습은 주로 웹 개발의 브라우저 쪽 유형에 중점을 둔 팟캐스트에 대해 약간 이상한 주제처럼 보일 수 있습니다. 저는 머신 러닝을 백의를 입은 사람들이 있는 거대한 데이터 센터나 실험실에서 발생하는 것으로 생각하는 경향이 있습니다. 확실히 요즘 유행어입니다. 우리가 기계 학습이라고 할 때 실제로 의미하는 바는 무엇입니까?

Charlie: 따라서 일반적으로 표준 정의는 컴퓨터가 무엇을 하라는 지시 없이 예측을 생성할 수 있는 기능을 제공하는 것입니다. 바라건대, 이것은 우리가 그것에 대해 계속 이야기할 때 의미가 있을 것입니다. 그러나 그것은 일종의 일반적인 대화 정의입니다. 알고리즘이나 모델에 특정 항목을 검색하도록 지시하지 않습니다. 그들은 당신이 제공한 데이터를 통해 학습하고 예측을 생성할 수 있습니다.

Drew: 특정 상황에 맞게 구체적으로 코드를 작성하는 대신 소프트웨어가 자체적으로 그 작업을 수행하는 방법을 학습할 수 있는 일반적인 경우를 만드는 것입니까?

찰리: 네, 맞습니다.

Drew: 그것은 거의 약간 소름 끼치게 들립니다. 그것은 일종의 인공 지능 측면에 가깝습니다. 이것을 하려면 하드코어 수학 괴짜 또는 데이터 과학자가 되어야 합니까? 아니면 확립된 알고리즘이나 시작하기 위해 요청할 수 있는 것과 같은 것이 있습니까?

찰리: 네. 따라서 운 좋게도 하드코어 수학 괴짜나 데이터 과학자가 될 필요는 없습니다. 그렇지 않으면 나는 분명히 이것에 대해 이야기하지 않을 것입니다. 그러나 이미 파악된 알고리즘과 모든 것을 처음부터 직접 작성할 필요 없이 이러한 알고리즘을 사용할 수 있는 도구가 이미 있습니다. 따라서 프론트엔드 생태계를 비교 대상으로 사용하는 경우 웹캠이나 마이크에 액세스하려는 경우 내비게이터와 같은 웹 API를 사용하여 사용자 미디어를 가져올 수 있습니다.

Charlie: 그리고 그 API가 실제로 내부에서 어떻게 구현되었는지 알 필요가 없습니다. 중요한 것은 이 API가 무엇에 좋은지, 원하는 경우 어떻게 사용하는지 아는 것입니다. 그런 다음 나중에 좋아하는 브라우저의 소스 코드를 살펴보고 실제로 어떻게 작동하는지 알 수 있지만 처음에는 실제로 유용하지 않습니다. 그리고 나중에 자신만의 알고리즘을 작성하려는 경우 유용할 수 있습니다. 하지만 솔직히 말해서, 당신이 이것을 하고 싶어할 가능성은 거의 없습니다.

드류: 알았어. 따라서 CSS를 작성하여 페이지에 요소를 배치하는 방법과 비슷합니다. 브라우저가 실제로 어떻게 하는지는 신경쓰지 않습니다. CSS를 작성하기만 하면 브라우저가 알아서 처리합니다.

찰리: 네. 시작하면 대부분 이런 식입니다.

드류: 좋습니다. 내 수준의 데이터 과학입니다.

찰리: 나도.

Drew: 기계 학습을 적용할 수 있는 문제의 종류는 무엇입니까? 어떤 일에 좋은가요?

Charlie: 그것은 처음에 무엇을 하고 싶은지에 달려 있습니다. 왜냐하면 어떤 것을 만들고 싶을 때 먼저 배우고자 하는 문제 유형에 대해 생각한 다음 알고리즘을 선택하는 데 도움이 될 것이기 때문입니다. 문제를 해결하거나 해결책을 찾는 데 사용할 수 있습니다. 따라서 일반적으로 해결하려고 하는 문제 유형에 대해 생각하는 것으로 시작합니다. 세 가지 주요 문제가 있습니다. 아마 더 있을 것 같지만 일반적으로 내가 하도록 훈련받은 것과 읽은 내용에 대해 언급된 세 가지 주요 내용이 있습니다.

Charlie: 제가 이 문제에 대해 설명하자면 지도 학습, 비지도 학습 및 강화 학습이 있습니다. 당신은 또한 많은 감독을 받았지만 솔직히 말해서 나는 세 개의 첫 번째 프로젝트로 내 프로젝트를 구축할 수 있었기 때문에 그것에 대해 잘 모릅니다.

Drew: 감독, 비감독 및 강화라고 하였습니까?

Charlie: 네, 강화 학습입니다.

드류: 알았어. 그렇다면 지도 학습이란 무엇일까요? 그것이 무엇을 의미하는지 예를 들어 주시겠습니까?

Charlie: 지도 학습, 데이터 세트가 기능과 레이블로 구성되어 있고 이를 알고리즘에 제공할 때입니다. 따라서 대부분의 사람들이 공감할 수 있는 예를 들면, 집이 있고 팔고자 하는 경우 집이나 집을 팔고자 하는 가격이 얼마인지 파악하려는 경우입니다. 차, 사실, 그건 그렇고, 그것은 같은 것입니다. 그리고 동일한 환경 또는 동일한 유형의 주택에 있는 주택 데이터 세트를 사용하고 시장에서 가격을 알고 있으면 자신의 주택 기능을 사용할 수 있습니다. 방이 몇 개이고 정원이 있고 어느 동네에 있습니까? 그리고 그런 것들.

Charlie: 이것들은 특징이고 레이블은 가격이 될 것입니다. 그리고 이미 당신 주위에 있는 집의 이러한 모든 데이터 세트를 사용하여 집의 특징 사이의 상관 관계를 학습하는 기계 학습 알고리즘을 사용할 수 있습니다. 그리고 시장의 가격, 당신의 집의 기능을 얻고 그것에서 가격을 생성할 수 있습니다. 따라서 가장 중요한 것은 지도 학습에서 많은 기능과 레이블도 가지고 있으므로 실제로 둘 사이의 상관 관계를 그릴 수 있다는 것입니다.

Drew: 당신은 이 예에서 주택에 대한 방대한 데이터 세트를 모델에 제공할 것입니다. 여기서 주택 가격과 주택에 대한 이러한 모든 기능을 알고 있습니다. 침실이 있고 평방 피트와 같은 것이 있다고 가정하고 위치가 고려될 수 있는 또 다른 종류의 것이라고 생각합니까?

찰리: 네. 머신 러닝의 문제 중 하나는 많은 기능을 가질 수 있고 그 중 일부는 실제로 다른 것만큼 효율적이지 않다는 것입니다. 예를 들어 집의 색상이 실제로 가격과 상관 관계가 없을 수 있지만 많은 기능을 제공할 수 있으며 모델 자체가 둘 사이의 상관 관계를 찾을 수 있습니다. 그런 다음 원하는 경우 데이터세트를 조정하고 색상을 제거하거나 정원의 크기가 중요하지 않다는 것을 알게 됩니다.

Charlie: 따라서 일반적으로 데이터 세트를 모델에 제공하더라도 처음에는 완벽한 예측을 할 수 없습니다. 일반적으로 몇 가지 다른 것을 조정하고 보게 됩니다. 꽤 정확하다고 생각되는 예측이 나올 때까지 조정합니다.

Drew: 그리고 일단 그 모델이 생성되면, 또는 한 도시의 데이터를 사용하여 생성했다고 가정하면, 그것을 가져와서 공급할 수 있습니까? 다른 도시에서 데이터를 공급해야 합니까? 교육이 완료되면 데이터 세트를 선택하여 다른 곳에서 사용할 수 있습니까? 아니면 해당 데이터 세트에만 적용되거나 어떻게 작동합니까?

Charlie: 데이터 세트에만 해당되는 것 같아요. 따라서 동일한 형식으로 다른 데이터 세트를 생성할 수 있다는 의미입니다. 열이 다른 Excel 스프레드시트가 있는 경우 동일한 레이블과 기능을 유지할 수 있지만 해당 도시의 값으로 바꿔야 합니다. 그러나 일반적으로 데이터 집합을 수집하는 데에도 많은 시간이 걸릴 수 있음을 의미하지만 예를 들어 파리에서 수행한 작업을 이미 알고 있고 데이터 집합의 구조가 동일하지만 값을 바꾸면 조금 더 빨라지고 모델을 다시 생성할 수 있습니다.

Charlie: 예를 들어 파리의 주택 가격이 호주의 작은 도시와 다르기 때문에 데이터가 다른 경우 동일한 모델을 재사용해서는 안 됩니다. 따라서 처음에는 데이터 세트의 핵심이 정확히 동일하지 않았기 때문에 잘못된 데이터를 갖고 싶지 않을 것입니다.

Drew: 우리는 머신 러닝을 사용하는 일종의 모델에 대해 많이 이야기합니다. 따라서 모델은 데이터 세트에 대한 모든 분석의 최종 결과와 같습니다. 그런 다음 후속 예측을 수행하는 데 사용됩니다. 그게 바로 모델이죠?

찰리: 네, 바로 그것입니다. 이것은 모델이므로 이전에는 본 적이 없지만 훈련 단계에서 학습한 내용을 기반으로 하는 새로운 입력을 제공하는 함수와 약간 비슷합니다. 예측을 출력할 수 있을 것입니다.

Drew: 지도 학습, 그런 다음 기능의 레이블에서 이 예측 모델을 만듭니다. 비지도 학습이란 무엇입니까?

Charlie: 그래서 unsupervised는 약간 같은 개념이지만 레이블을 제거합니다. 따라서 이 경우 주택 판매에 대한 우리의 문제는 실제로 감독되지 않은 학습 문제가 아니라고 생각할 수 있습니다. 왜냐하면 주변 주택에 대한 특징만 알고 있지만 레이블로 가격이 없으면 가격을 정말 예측할 수 없습니다. 가격이 얼마인지조차 알 수 없습니다.

Charlie: 따라서 비지도는 데이터 세트가 있고 이에 대한 기능만 있을 때 더 많습니다. 더 많은 추세 또는 사물의 클러스터를 함께 생성할 수 있습니다. 특정 출력을 원하거나 "이것의 가격은 얼마입니까?"와 같은 특정 질문이 있는 경우 비지도 학습을 사용하지 않을 것입니다. 감독되지 않는 것을 실제로 사용하는 것은 좋지 않지만 엔터티를 함께 클러스터링하려는 경우 사람 또는 이와 유사한 것이 될 수 있습니다.

Charlie: 그래서 일반적으로 사용 사례는 "당신과 같은 사람들도 이것을 듣는다"와 같은 Amazon 권장 사항 또는 Spotify 권장 사항과 같은 권장 사항이며 이 경우 기능이 있는 위치에 더 가깝습니다. 음, 그들은 가지고 있습니다. 당신에 관한 데이터, 당신이 무엇을 듣는지, 당신이 보통 어느 나라에 있는지 또는 하루에 몇 번이나 듣는지 알 수 있습니다. 따라서 사람에 대한 이러한 기능을 사용하여 동일한 클러스터 또는 동일한 유형의 청취자 또는 Amazon에서 특정 물건을 구매하는 동일한 유형의 사람들에 배치할 수 있습니다. 그리고 그런 종류의 비지도 학습을 사용하여 그들은 당신에게 무엇을 광고할지 또는 당신과 같은 사람들을 기반으로 들어야 할 것을 추천해야 하는지 알 수 있습니다. 그래서 더 그런 종류의 문제입니다.

Drew: 자, 이제 웹 개발자로서 이 모든 것이 훨씬 더 이해가 갑니다. 이것들은 우리가 처리해야 하는 모든 종류의 것들과 사이트나 제품, 또는 당신이 가지고 있는 것에 넣을 수 있는 기능입니다. 그래서 우리는 예측하고자 하는 주제에 따라 다양한 유형의 학습을 하고 있습니다. 우리가 이것을 함께 넣을 수 있는 다른 종류의 응용 프로그램이 있습니까? 사람들이 이것을 사용할 수 있도록 만든 좋은 예가 있습니까?

찰리: 네. 너무 많은 예가 있습니다. 그렇기 때문에 집값 예측에 대해 이야기할 때 아마도 그것은 당신과 관련된 것이 아닐 수도 있습니다. 그다지 흥미롭지 않을 수도 있지만 실제로 할 수 있는 일이 훨씬 더 많습니다. 주변에 정말 좋은 예가 있습니다. 내가 본 첫 번째 것은 이미지에 대해 동적으로 생성된 아트 텍스트 주위에 있었던 것 같습니다. 물론 이것은 사이트에 이미지를 추가할 때 스스로 할 수 있는 일입니다.

Charlie: 하지만 실제로 수많은 이미지가 있는 사이트가 있고 수동으로 수행하는 대신 각 이미지를 기계 학습 알고리즘에 제공하면 해당 이미지에 대한 아트 텍스트가 생성되고 아마도 사람이 할 수 있는 유일한 단계는 이것이 올바른지 확인하는 것이지만 실제로는 애플리케이션 구축에 시간을 집중할 수 있습니다.

Charlie: 그리고 이미지에 대한 아트 텍스트를 사용하여 웹사이트에 액세스할 수 있도록 만들겠지만 일종의 기계에 의해 생성될 것입니다. 이것이 제가 이 일을 시작할 때 본 예 중 하나지만 작업 콘텐츠에 안전하지 않은 필터링의 프로토타입도 있습니다. Chrome 확장 프로그램에서 실제로 꽤 좋을 것이라고 생각했습니다. 웹페이지를 열 때마다 페이지에 있는 내용이 일종의 안전한 콘텐츠인지 확인하기만 하면 되는 Chrome 확장 프로그램이 있을 수 있습니다.

Charlie: 예를 들어, 노트북이나 이와 유사한 것을 사용하는 아이들이 있는 경우 원하는 경우 이미지를 숨기거나 이 이미지를 팬더로 바꿀 수 있습니다. 하지만 기계 학습을 사용하여 특정 작업에 대해 걱정할 필요가 없도록 자동으로 작업을 수행하거나 두뇌 능력을 사용하여 다른 작업을 수행할 수 있는 그런 종류의 응용 프로그램입니다.

Charlie: 하지만 그 다음에는 Amazon Alexa 및 음성 인식 및 기타 모든 것과 통신하던 웹캠을 사용하는 제스처 인식의 예가 있습니다. 따라서 음성, 웹캠, 머신 러닝과 함께 다양한 기술을 실제로 병합하여 인식하고 다른 기술과 새로운 방식으로 상호 작용할 수 있습니다. 그래서 정말 재미있을 수 있습니다.

Drew: 그것은 우리가 일종의 데이터 모델 분석을 살펴보았기 때문에 매우 매력적입니다. 이제 우리는 이미지 콘텐츠를 보고 머신 러닝을 사용하여 이미지 콘텐츠를 분석하는 것에 대해 생각하고 있습니다. 이는 매우 흥미로운 일입니다. 누군가가 유혈이 낭자하거나 부상이나 무언가를 보여주고 있다고 생각되는 사진을 게시하고 흐리게 처리한 다음 클릭하여 표시해야 하는 경우 Facebook의 기능입니다. 그런 종류의 일, 분명히 Facebook은 업로드되는 모든 이미지를 검토하는 중재자 팀을 가질 수 없습니다.

찰리: 그러지 않기를 바랍니다.

Drew: 그것은 끝없는 작업이 될 것입니다.

Charlie: 그것도 좋은 직업이 아닙니다.

Drew: 저는 사람들이 광고를 게시할 수 있는 무료 광고 웹사이트에서 일했습니다. 그리고 웹 개발자인 나조차도 이 모든 이미지를 보면서 "네, 아니오, 예, 아니오"라고 말하면서 참여해야 하는 많은 중재가 포함되었습니다.

찰리: 나도 좀 그랬어. 그 당시에는 기계 학습이 있었으면 하고 저를 위해 작은 유틸리티 도구를 사용했는데 지금은 거기에 있습니다. 정말 멋지네요.

드류: 네, 정말 대단합니다. 그리고 웹캠의 실시간 입력에 대해 생각하고 이를 실시간으로 분석하여 제스처 기반 상호 작용을 수행할 수 있다는 것은 매우 흥미로운 일입니다. 그게…

Charlie: 예, 그래서 핵심적으로는 실제로 더 많은 이미지 분류를 사용합니다. 왜냐하면 웹캠, 이미지는 픽셀 세트이기 때문입니다. 하지만 특정 제스처를 할 때 모델을 훈련하여 오른손이 위로 올라가 있고 아마도 당신이 이런 식으로 마우스를 제어하거나 손과 화면의 좌표를 보고 마우스를 따라갑니다. 당신은 정말로 당신이 원하는 무엇이든 할 수 있습니다. 당신은 아마도 색 인식을 가질 수 있습니다.

Charlie: 당신은 정말 재미있는 일을 할 수 있습니다. 내가 만든 프로토타입 중 하나는 어느 시점에서 포기했지만 조금... 크롬 확장 프로그램이 되고 싶었지만 작동하지 않았습니다. Electron으로 작은 데스크탑 앱을 만들었습니다. 또한 머리를 기울이는 것만으로 웹 페이지를 탐색할 수 있는 JavaScript에서. 그래서 머리를 아래로 기울이면 아래로 스크롤하고 위로 올라가면 위로 올라가는 것을 인식합니다. "글쎄, 크롬 확장 프로그램으로 만들 수 있다면 어떤 사람들에게는 유용 할 수 있습니다."라고 생각한 것은 이러한 종류의 작은 실험이었습니다.

Charlie: 컴퓨터 앞에서 식사를 하고 뉴스를 읽고 있고 키보드가 더러워지는 것을 원하지 않더라도 고개를 기울일 수 있지만 접근성을 위해 실제로 사람들이 특정 웹페이지나 이와 유사한 것을 탐색하는 데 도움이 됩니다. 사용할 수 있는 도구가 많이 있으며 주변 상황을 관찰하고 기계 학습을 사용하여 이러한 문제 중 일부를 해결할 수 있다는 아이디어에 관한 것입니다.

Drew: 기계 학습을 위해 우리는 종종 언어인 Python을 생각합니다. 나는 그것이 많은 종류의 개발이 먼저 일어나는 곳이라고 생각합니다. 그러나 웹 개발자로서 우리는 일반적으로 JavaScript가 더 편합니다. 기계 학습은 우리가 현실적으로 기대할 수 있는 것입니다. 재미있는 예제가 한 가지 있지만 실제로 JavaScript에서 실제 작업에 유용합니까?

Charlie: 글쎄요, 제 생각에는 그렇게 생각하지만 제가 하는 대부분의 작업이 프로토타입이라는 것을 압니다. 하지만 그건 당신이 직장에서 처한 상황에 달려 있다고 생각합니다. 일상 업무에서 개발자로서 머신 러닝을 구현하는 방법이 있습니다. 하지만 내가 JavaScript에 대해 정말 좋아하는 것은 이미 프론트 엔드 개발자라면 새로운 생태계나 새로운 도구 세트, 새로운 구문, 새로운 언어를 배우기 위해 갈 필요가 없다는 것입니다. 당신은 이미 당신이 매일 일하는 환경에 있습니다.

Charlie: 보통 그런 종류의 것을 배울 때, 당신은 당신의 일상적인 일이 아니고 모든 사람의 시간이 소중하고 당신에게 그렇게 많지 않은 경우 자신의 시간에 시작해야 합니다. 따라서 일부 장벽을 제거하고 알고 있는 동일한 생태계에 머물 수 있다면 꽤 좋은 일이지만 시작할 수도 있습니다. JavaScript의 힘은 시작하여 사람들이 조사해야 할 아이디어가 있을 수 있습니다. JavaScript에서 빠르게 실행할 수 있으면 아이디어가 올바른지 확인할 수 있습니다.

Charlie: 그러면 리더십으로부터 동의를 얻어 더 많은 시간이나 돈을 쓸 수 있습니다. 아니면 Python으로 구축하려는 경우 Python 개발자에게 줄 수 있습니다. 그러나 나에게 아이디어를 빠르게 검증하는 이 능력은 매우 중요합니다. 특히, 스타트업에서 일하고 모든 일이 빠르게 진행되고 조사할 가치가 있다는 것을 보여줄 수 있다면 그것이 꽤 중요하다고 생각합니다.

Charlie: 그리고 도구의 거대한 생태계가 있고 점점 더 많은 기계 학습 프레임워크와 응용 프로그램이 있다는 사실도 마찬가지입니다. JavaScript에서 기계 학습을 추가할 수 있는 것은 웹 페이지에만 있는 것이 아닙니다. 앞서 말했듯이 Electron으로 Chrome 확장 프로그램과 데스크톱 앱을, React Native로 모바일 앱을, Johnny-Five와 같은 프레임워크로 하드웨어와 IoT를 구축할 수 있습니다.

Charlie: 따라서 이미 알고 있는 언어를 사용하면 실제로 동일한 실험을 실행할 수 있는 다양한 플랫폼의 거대한 생태계에 액세스할 수 있습니다. 그리고 제 생각에는 그것이 꽤 놀라운 일이라고 생각합니다. 그리고 바로 여기에서 JavaScript로 머신 러닝을 수행할 때의 진정한 힘을 알 수 있습니다. 그리고 더 좋아지면 우리가 매일 구축하는 애플리케이션에 실제로 통합할 수 있을 것입니다.

Drew: JavaScript는 어디에나 있습니다. 그렇지 않나요?

찰리: 네.

Drew: 좋든 나쁘든 그것은 어디에나 있습니다. 누가 생각했을까요? 이것은 훌륭하게 들리지만 또한 많은 작업처럼 들립니다. 그리고 저는 데이터 세트와 사물에 대해 생각합니다. 도대체 이런 종류의 작업을 시작하는 방법은 무엇입니까?

Charlie: 현재로서는 최소한 TensorFlow.JS를 사용하여 프레임워크로 할 수 있는 세 가지가 있습니다. 그리고 가장 간단한 것이 기존의 사전 훈련된 모델을 가져오는 것이라고 가정해 보겠습니다. 그래서 그들 중 몇 가지가 있습니다. 다른 데이터 세트로 훈련된 다른 모델이 있습니다. 저는 이것을 시작하는 것이 좋습니다. 왜냐하면 여러분은 실제로 프레임워크 자체를 사용하는 방법과 할 수 있는 작업에 대한 정말 기본을 배울 수 있기 때문입니다. 이 모델들과 함께.

Charlie: 다른 이미지로 훈련된 특정 이미지 인식 모델이 있습니다. 그들 중 일부는 물체 인식에 더 좋습니다. 그들 중 일부는 사람들의 인식에 더 좋으며 어떤 모델을 사용할지 이해하면 해당 모델의 제약 조건에서 원하는 모든 것을 자유롭게 구축할 수 있습니다.

Charlie: 하지만 시작하기에 좋은 방법이라고 생각합니다. 나는 여전히 많은 실험을 위해 사전 훈련된 모델을 사용합니다. 왜냐하면 그것이 이미 존재한다면 왜 바퀴를 재발명하겠습니까? 주어진 도구를 사용합시다. 그런 다음 더 나아가고 싶을 때 중요한 모델을 재학습할 때 전이 학습이라고 하는 것을 할 수 있습니다. 따라서 사전 훈련된 모델 중 하나를 계속 사용하지만 자신의 샘플을 사용하여 실시간으로 다시 훈련할 기회가 주어집니다.

Charlie: 예를 들어, 다른 사람들이 있는 이미지 분류를 사용하고 싶다면 제스처 분류를 하고 싶을 수도 있습니다. 예를 들어, 모델이 항상 오른손을 위로 들고 있는 사람들과 훈련을 받았지만, 응용 프로그램의 경우 왼손을 원하면 왼쪽 샘플을 사용하여 해당 모델을 다시 훈련할 수 있습니다. 그러면 오른손을 인식하도록 이미 충분히 훈련된 모델이 있지만 고유한 샘플을 추가하면 제공하는 새 입력 데이터의 양에 따라 브라우저에서 매우 빠르게 다시 훈련할 수 있습니다. , 약간의 시간이 걸리지만 몇 초 만에 앱에서 사용할 수 있는 이 두 제스처를 매우 잘 인식하는 재학습된 모델을 갖게 됩니다.

Charlie: 그래서 그것은 보통 두 번째 단계와 같습니다. 그리고 조금 더 복잡한 세 번째 단계는 브라우저에서 모든 작업을 수행하는 것입니다. 따라서 처음부터 자신의 모델을 작성하고 브라우저에서 훈련하고 실제로 모델을 훈련하고 실행하고 생성합니다. 브라우저의 모든 것입니다. 그러나 일반적으로 내가 본 유일한 응용 프로그램은 시각화를 구축하는 것입니다. 학습 중인 모델의 프로세스와 수행하는 단계 수, 소요 시간, 선택한 기능과 조정하는 매개변수에 따라 정확도가 올라가거나 내려가는 것을 시각화하고 싶을 때 .

Charlie: 따라서 구축하고 싶은 응용 프로그램을 찾지 못했기 때문에 실제로 사용하지는 않았지만 사전 훈련된 모델만 사용하거나 내 샘플로 재훈련시키는 두 가지 첫 번째 단계는 개인적으로 본 곳. 나는 그것을 즐겼다.

Drew: 따라서 일반적으로 사전에 모델을 생성하는 것입니다. 일종의 오프라인 상태를 유지한 다음 브라우저는 훈련된 모델을 사용하거나 약간 추가하여 약간의 재훈련을 수행하지만 일반적으로 해당 모델은 사용자의 브라우저에서 사용되기 전에 설정될 것입니까?

Charlie: 일반적으로 그렇습니다. 그러면 자신의 모델을 확실히 만들 수 있습니다. 그렇게 하면 브라우저에서 훈련하는 것을 권장하지 않지만 NodeJS에서도 할 수 있습니다. 안다면 NodeJS를 조금. 나는 확실히 내 자신의 모델을 만들었지만 성능이 조금 더 좋기 때문에 보통 NodeJS에서 실행합니다. 그런 다음 브라우저에서 생성한 생성된 모델을 사용합니다.

Drew: JavaScript로 이 작업을 수행하는 데 사용할 수 있는 도구는 무엇입니까? TensorFlow JS에 대해 언급했지만 그게 뭐죠? 그게 어디죠? 구글에서 온건가요?

찰리: 네. 처음에 Google은 Python으로 TensorFlow 도구를 사용했고 지금은 과거, 아마도 몇 년, 어쩌면 조금 더 JavaScript 버전을 만들었으므로 JS와 함께 흐르는 경향이 있습니다. 그러나 위에 약간의 추상화인 ML5 JS도 있습니다. 따라서 약간 혼란스럽거나 TensorFlow JS가 문서에서 사용하는 일부 어휘로 인해 약간 무섭게 보인다면 대부분의 기능이 동일한 ML5 JS를 사용할 수 있지만 API 또는 구문이 다음과 같다고 가정해 보겠습니다. 조금 더 초보자 친화적입니다.

Charlie: ML5로 시작하여 기계 학습을 좋아하는지 또는 멋진 애플리케이션에 대해 생각하는지 확인한 다음 ML5에 일부 차단기가 있거나 프레임워크에 원하는 특정 작업이 없는 경우 그런 다음 원하는 경우 TensorFlow JS로 이동할 수 있습니다. 그리고 실제로 자신의 코드를 작성하는 데 관심이 없지만 이미 있는 도구를 사용하려는 경우 Amazon, Google 및 Microsoft에서 이미지 인식 또는 음성 인식을 수행하는 API도 있습니다. 따라서 수행할 수 있는 작업에 더 관심이 있지만 코드를 작성하는 데 너무 많은 시간을 소비하고 싶지 않다면 일부 API를 ping하고 해당 도구를 사용해 볼 수도 있습니다.

드류: 꽤 흥미롭네요. 따라서 브라우저를 사용하여 웹캠이나 마이크 등의 입력을 포착한 다음 Amazon, Microsoft 또는 누구에게나 전송한 다음 힘든 작업을 하도록 내버려 둘 수 있습니까?

찰리: 네.

Drew: 그러면 결과에서 이익을 얻을 수 있습니다.

찰리: 맞아요.

Drew: 아이디어를 시작하기 위한 멋지고 유혹적인 방법인 것 같습니다. 훌륭하게 들리지만 이를 프론트 엔드에서 어떤 문제에 적용할 수 있습니까? 우리는 몇 가지 작은 것에 대해 이야기했지만 이것을 사용할 수 있는 다른 방법이 있습니까?

찰리: 방법은 많습니다. 이미지 분류부터 시작한다면 가능합니다. 웹 또는 휴대전화의 웹캠에서 이미지를 사용할 수 있습니다. 휴대전화에서 웹사이트를 사용하고 사진을 찍고 물체를 인식할 수 있고 둘 중 하나를 수행할 수 있다면... 제가 만든 작은 것은 재활용에 관한 것이었습니다. 노란색 상자가 있고 녹색이 있으며 국가에 따라 다릅니다. 색상이 다르지만 때로는 실제로 물건을 던질 위치를 잘 알지 못하므로 이와 같은 작은 도구를 만들 수 있습니다. 라이브는 앞에 있는 두 개체를 인식한 다음 분류할 수 있습니다. 이것.

Charlie: 그렇지 않으면 올해 초 TensorFlow GS 모델 중 하나를 사용하여 작성된 댓글, GitHub 문제 및 GitHub PR을 살펴보고 분류하고 다음과 같이 말하는 텍스트 분류가 있습니다. "이봐, 아마 이걸 쓰지 말았어야 했어" 또는 "조심해, 이건 좀 독이 돼."라고 말하는 작은 봇이 있습니다. 우리는 이곳이 안전한 공간이 되길 원합니다.”” 이렇게 텍스트 분류를 사용할 수 있습니다.

Charlie: 원하는 경우 소리 분류가 있습니다. Apple이 새 시계인 OS를 출시할 때 흐르는 물 소리를 인식하고 사람들에게 코로나바이러스 대유행으로 20초 동안 손을 씻으라고 알려주는 기능이 있었지만 할 수 있습니다. JavaScript에서도 마찬가지입니다. 그리고 정말 흥미로웠던 점은, 제가 몇몇 비디오를 보면서 "아, 자바스크립트로 어떻게 하는지 알아요."라고 생각했습니다.

Charlie: 그리고 작은 프로토타입을 만들었습니다. 애플워치에서 실행되는지는 모르겠습니다. 아마도. 나는 그것을 가지고 있지 않지만 내 휴대 전화와 노트북에서 실행된다는 것을 알고 있습니다. 그리고 다른 사람들을 위한 아이디어도 시작할 수 있습니다. 제 친구인 Ramon Huidobro가 Twitter에서 @hola_soy_milk를 사용하는 것입니다. 그는 올해 많은 온라인 컨퍼런스에 참석했습니다. 그리고 그의 문제 중 하나는 그가 누군가에게 박수를 치기 위해 박수를 치면 채팅에 박수 이모티콘을 추가할 시간이 없다는 것입니다. 그가 하고 싶었던 것은 박수 소리를 듣는 것이었습니다. 그러면 채팅에서 박수 이모지가 자동으로 전송됩니다.

Charlie: 그리고 일상적인 작업에서 애플리케이션이 정말 더 유용하기를 원한다면 예측 프리페칭을 사용하는 것이 좋습니다. 그것은 또한 웹 사이트의 분석을 보는 프런트 엔드에서 기계 학습을 사용하는 것입니다. 따라서 일반적으로 어떤 페이지를 살펴보고 다음과 같은 작업을 수행합니다. 다음에 방문할 가능성이 가장 높은 페이지를 기준으로 리소스를 미리 가져올 수 있습니다. 그것은 내가 올해 내내 살펴보고 싶었지만 시간이 없었지만 페이지의 성능과 UX를 실제로 향상시킬 수 있는 것입니다. 그리고 필요하지 않은 리소스를 요청하지 않으므로 실제로 개선할 수 있으며 이는 기계 학습의 적용이기도 합니다.

Charlie: 그래서 재미있는 일을 하거나 더 유용한 일을 할 수 있습니다. 하지만 잘못된 응용은 없고 잘못된 응용이 있을 수 있습니다. 다시 말하지만, 정말 시작하는 중이라면 재미있는 것으로 시작하는 것이 나쁠 것이 없습니다. 그러면 직장에서 다음과 같이 할 수 있는 몇 가지 아이디어를 생각해 볼 수 있습니다. 잘.

Drew: 여기에서 정말 유용한 것은 이러한 것들이 가능하다는 것을 아는 것입니다. 그리고 실제로 우리 스스로 할 수 있는 문제를 해결하는 창의적인 방법입니다. 전통적으로 우리는 사용자가 제출한 콘텐츠를 검토하여 무언가를 구축했으며 이는 상당히 원시적이었고 기본적으로 인간이 사물을 보고 결정을 내리도록 해야 했습니다. 하지만 머신 러닝에 액세스할 수 있는 이 예에서 우리는 더 많은 것을 넘겨주고 인간이 예를 들어 설득력 있는 일치가 없는 경우와 같은 극단적인 경우를 보도록 할 수 있습니다.

Drew: 물론 그렇게 될 것입니다. 그런 것을 개발하고 제자리에 배치하는 데는 약간의 시간이 걸리겠지만, 그러면 사람이 수동으로 물건을 확인하지 않아도 되는 비용 절감을 생각하게 됩니다. 기술이 발전함에 따라 이것이 미래에 어떤 용도로 사용된다고 볼 수 있습니까?

Charlie: 제 생각에는 아마도 미래에 모델을 로드할 수 있는 크기가 작아지고 성능이 향상되어 모델이 훈련된 데이터 세트를 개선할 수 있을 것이라고 생각합니다. 더 도움이 되는 도구를 볼 수 있기를 바랍니다. 제 말은, 개인적으로 저는 마이크로컨트롤러에서 실행하여 물건을 만들 수 있는 작은 기계 학습 모델에 관심이 있습니다. 하지만 우리가 프론트 엔드 세계에 더 머물면 트랙 패드나 키보드로 웹을 탐색하는 데 익숙하다고 느끼기 때문에 더 나은 음성 인식을 희망하지만 현재로서는 여전히 예를 들어 음성 인식이 항상 정확하지는 않거나 악센트가 있는 경우 정확하지 않습니다. 그리고 우리가 더 나은 모델을 개발할 때 더 작은 사람들이 성능에 그렇게 나쁜 영향을 미치지 않기 때문에 웹사이트에 추가하는 것을 두려워하지 않기를 바랍니다.

Charlie: 저는 예측 프리페칭과 같은 분야에서 머신 러닝을 사용하여 스펙트럼에서 경험을 개선하는 더 스마트한 웹사이트를 구축할 수 있도록 하는 데 관심이 있습니다. 더 좋습니다. 또한 지속 가능성에 대해 생각한다면 쓸모없는 리소스를 요청하지 않는 것이 웹사이트의 탄소 발자국에도 도움이 된다고 가정해 보겠습니다. 그러나 기계 학습 모델의 탄소 발자국도 있습니다. 별로 좋지 않습니다. 그래서 아마도 이것에 대해 이야기하지 맙시다. 나는 미래를 위해 더 성능이 좋거나 더 작은 모델이 있기를 바라고 사람들이 시도해 볼 가능성이 더 큽니다. , 하지만 보자.

Drew: 기계 학습 프로젝트를 시작하기 전에 알아야 할 알려진 제한 사항과 제약 사항이 있습니까?

찰리: 네. 있습니다. JavaScript로 하든 Python으로 하든 한계가 있다고 생각합니다. 사전 훈련된 모델이 없는 매우 맞춤화된 무언가를 구축하려는 경우 한계 중 하나는 상당한 양의 데이터가 필요할 수 있지만 모든 사람이 가지고 있는 것은 아니라는 것입니다. So if you're doing something on your own as a side project, and you can't find the data set, it would actually take you quite a long time to get one that would allow you to generate good predictions. You can build a small data set, but you will not be able to push it to production or something if you don't actually have a data set that's consistent enough. So I think the amount of data that you need, training the models can take a lot of time.

Charlie: That depends on the amount of data that you feed it, but depending on the application that you want to will build it with, you have to be aware that it can take a lot of time. I remember when I got started and I was doing it in Python and I wanted to… I forgot what I wanted to do, but my model was running for, it was training for eight hours. And at the end it told me that it failed because of something. And I was like, “You're telling me that at the end, after eight hours,” so it can be a bit frustrating and it can still be experimental and you have to be comfortable with it not being a pure science, not everything is always accurate.

Charlie: At the moment, as some of the models are still, they can be a few megabytes, if you are building something that you know, is most likely going to be seen on a mobile screen, you might want to take into consideration that, well, you don't want to load all that data over 4G network. You might want to warn people that they should be on Wi-Fi or the battery use, or the type of phones can't really handle all of this as well. And then more seriously in terms of liability, you do have to understand why your model predicted certain things. And that can be difficult because the model is a black box. It's a function that you don't really know what's inside. You know what it predicted and based on what you're building, if it makes certain decisions about, I don't know, who gets a loan or who goes to prison, based on whatever, you want to be able to explain how you got to that decision.

Charlie: If you decided to use machine learning to kind of abstract some of the work, so it wouldn't be done by people. That can be quite dangerous, so you have to know what you're doing, and in the end, just remember that it's not perfect. I think people sometimes assume that because we talk about artificial intelligence is just as smart as people, but no, it's still computers. It's still data that is given to them and they make up some predictions and somehow we just trust it, which is scary. But yeah, that's some of the limitations.

드류: 네. I guess it may seem like it's intelligent, but it is still artificial. There've been some quite high profile cases in recent times particularly around some of the machine learning stuff with image recognition that have raised issues of bias in machine learning, for example, a model only detecting humans if they have light skin. Are there ethical considerations that we should be making here?

Charlie: To me, that sounds like a really interesting side of machine learning. And that's also why, before I was saying that, remember that it's not perfect. Sometimes I feel like people think that the machine just happens to be right and know all the things by itself, but it's still something that we program. And when an algorithm products or generates a biased result, the algorithm just generated things based on the data that it was given before. So an algorithm itself or a model is not going to know the difference in society between light-skinned people or dark-skinned people. It doesn't know and it doesn't care. The only thing that it knows is that I got given pictures of certain people and I'm just going to generate based on what I know.

Charlie: And the data set that is given to the algorithm is in general generated by us, by people. Maybe it's not the developer using the model, but at some point somebody put together a data set. And I think it's important to remember that we are responsible for making sure that the predictions generated are as fair as possible and as unbiased as possible. And that creates interesting questions then, because then you can go into, “Well, what is fair for people?” or if we think about my example of the GitHub action that I created to look at toxic comments, well, maybe what I think is toxic is not the same thing as what other people think is toxic.

Charlie: It's interesting. There's a really interesting collection of videos by MIT media lab around the ethics and governance of artificial intelligence, and I find that fascinating because it's not about telling people, “Oh, you're a bad person because you used in algorithm that's biased,” or, “You're a bad person because you produced a model that's biased.” Its more about raising certain questions and helping you realize, “Well, actually, maybe I could be better,” because that surface that, “Yes, I forgot to add diverse people to my data set. 내가 고쳐주마.” It's not really about say, “Let's not use that model ever again.” Just retrain it. Realize that, “Oh, I forgot this. I can retrain it and we can make it better.” And that's something that I definitely think is interesting.

Charlie: And you have companies really trying to improve on that. When the issue of Google who was translating certain neutral languages into gendered languages, and all of a sudden engineer was male and cook was female. Now they know they've really reworked on that and it's a lot more unbiased and they use the 'they' pronoun as well. They also really try to make it better, but then you have also weird stuff where I think IBM had created a data set called Diversity in Faces, that was supposed to be one of the very few that I said that actually had a diverse spectrum of people. But when I tried to find it to use it, it's not available anymore. So I'm like, “Oh, you had this good initiative. You try to do better than a lot of other people, and now people are going to actually use it.” I don't know, but I think the question is really fascinating because he can really help us improve. And then we improve the tool as well that we're using.

Drew: I guess it pays just to be really careful to be balanced and be diverse when selecting data for training models. I guess that's what it comes down to, isn't it?

Charlie: Yeah. Well, I mean, you're building a tool for the public, in general, right? If it's a tool that everybody can use, so it should reflect everybody really, or you should be really clear and say, “This tool can only be used by these people because the model was trained that way, but it's not really what we should do.” I understand that sometimes it if you've never thought about it, it can be I don't know, you can see it as a burden. I hate that people would think of it that way, but it's also, if you spent all this time, maybe writing your own algorithm or generating your own model and doing all of this work, you can't tell me that finding a diverse data set is the hardest part. I don't think it would be. So I'm hopeful, and I think as more people raise concerns about this, and I think people are watching this space, which is really good because if companies don't do it, they'll do it if we tell them that it's not right. And if you want the adoption of machine learning models, you have to make sure that everybody can use them.

Drew: Of the various tools that are available for doing machine learning in JavaScript, you've worked a lot with TensorFlow JS and you've written a book about it. Tell us about your book.

Charlie: Yes, I did. I did write a book this year about TensorFlow JS. So to help JavaScript developers learn more about machine learning and understand it better. And I think the main goal of this book was to help people dive into machine learning, but making it less scary, because I know that at first I thought about machine learning as this big thing, completely different from the web development that I would never understand anything about. I didn't think that I would have to write my own algorithms and really understand math. And as I've dived into this over the past two and a half years, I realized that it's not really like that. And I was hoping that writing this book could help people realize as well that they can do it and what can be done.

Charlie: And there's also a few projects that you can really put in practice what you're learning, but it was really aimed at people who haven't really looked into ML yet, or who just are curious to learn more. I'm not really diving into the algorithms like the source code of the algorithms, but it's really more telling people, trying to understand what an algorithm does and which one to use and for what. A bit of what we just talked about, but it's explaining contents in a clear way, so hopefully it's less scary and people want to hopefully dive a bit more into it.

Drew: So it's called Practical Machine Learning In JavaScript and is available from Apress, and we'll link it up in the show notes. So I've been learning all about machine learning today. What have you been learning about lately, Charlie?

Charlie: Let's say a thing that I'm diving into that is related to machine learning or I will use machine learning with it, but it's digital signal processing that I want to use with machine learning. As we've talked about the fact that machine learning needs a lot of data, if you want to build your own models, sometimes you have to filter your data to actually get the right prediction. And if we think about it, let's think about noise canceling headphones. In your day-to-day life, you have a lot of noise around you. Let's say you're trying to watch a video on the train and there's people talking around you, and there's a sound of the train. And what you want to focus on is the sound of the video.

Charlie: With digital signal processing, that would be a little bit like your noise canceling headphones, where there's some noise around that you don't care about. So there's some data that you don't want to listen to, and the noise canceling headphones allow you to focus on the sound coming from the video on your phone, so that you can really truly listen and focus on that. What I'm doing with digital signal processing is that I have a bunch of data from a piece of hardware, like an Arduino, but I know that there's a lot of it that I might not care about. I want to filter out the things that I don't care about, so that then I can feed that to a model and get better predictions about gestures or things like that. So you have your data signal that you can either transform or filter.

Charlie: It's like when you use the web API to get sound from your microphone, you can either see the arrays of numbers on your dev tools, or you can transform it into a spectrogram to see the picture of the sound. And that's a little bit of that. To have a better prediction for gestures based on hardware data, I can transform that signal. I've been wanting to do this for a couple of years, but it's something that I know nothing about. It takes time to learn, but now that I know a bit more about the machine learning side, I can learn the digital processing side and I'm getting there. I like this moment where I'm like, “Oh, I start to get it because I spent all this time on it.” And yeah, that's, that's really interesting. I'm going to have you going a bit.

Drew: Charlie you're such a nerd. If you dear listener would like to hear more from Charlie, you can find her on Twitter, where she's @devdevcharlie and her personal website includes links to lots of our experiments and projects, and it's really worth checking out at charliegerard.dev. Her book Practical Machine Learning In JavaScript is available now, and we'll link to that in the show notes. Thanks for joining us today. Charlie, did you have any parting words?

Charlie: 재미있는 시간을 보내는 것을 잊지 마세요. 우리는 오늘 재미있는 것에 대해 많은 이야기를 했고 그 다음에는 실용적인 것에 대해 이야기했습니다. 하지만 이것에 대해 살펴보고 싶다면 무엇을 만들기로 결정하든 상관없이 즐거운 시간을 갖는 것을 잊지 마십시오.