# data[].attributes.headline
예측결과: 박지영,서희선 (박지영)

# data[].attributes.subject
예측결과: 박지영,서희선 (박지영)

# data[].attributes.body
99%의 확률로 개와 고양이를 분류해 낼 것이다

# data[].attributes.headline
키워드- 박지영,서희선 (박지영)

# data[].attributes.subject
키워드- 박지영,서희선 (박지영)

# data[].attributes.body
전이학습, 웹 기반 도구(박지영)

# data[].attributes.headline
우리가 한 실험(개,고양이구분) 티처블머신의 성공률을 이항분포로 구한 뒤, 그래프 변환

# data[].attributes.subject
우리가 한 실험(개,고양이구분) 티처블머신의 성공률을 이항분포로 구한 뒤, 그래프 변환

# data[].attributes.body
https://homepage.stat.uiowa.edu/~mbognar/applets/bin.html
이항분포를 그래프로 변환시켜주는 그래프를 사용했다.

# data[].attributes.headline
참고문헌-작성자: 양찬우

# data[].attributes.subject
참고문헌-작성자: 양찬우

# data[].attributes.body
조사 내용 : 티처블 머신은 구글에서 제공하는 머신러닝 학습 도구이다. 티처블 머신은 일반인들도 쉽게 인공지능을 구현 할수 있다는 장점과 빠른 속도로 학습하고 데이터의 양이 충분하지 않아도 원하는 결과를 얻을 수 있는 장점을 가지고 있다, 티처블 머신은 학습 데이터를 mobileNet으로 사전 훈련 모델을 생성하고, 이 모델의 마지막 레이어만 수정해 전이 학습을 진행하는 방식으로 구동된다. 티처블 머신으로 할 수 있는 가장 간단한 실험은 개와 고양이 구분하기 동작 인식하기 등등 이 있다.

# data[].attributes.attachment_link.readable_text
1-1. 개념

Teachable Machine

Train a computer to recognize your own images, sounds, & poses. A fast, easy way to create machine learning models for your sites, apps, and more - no expertise or coding required.

teachablemachine.withgoogle.com

Teachable Machine은 나처럼 머신러닝의 '머'자도 모르는 사람도 쉽게 인공지능을 구현할 수 있는 서비스 이다.

대체 어느 회사에서 이런 서비스를 개발했을까 했더니 구글이었다. (갓구글... 당신은 도덕책...)

코드 한 줄 작성할 필요 없이 알아서 모델을 생성해준다.

게다가 Teachable Machine은 굉장히 빠른 속도로 학습하고 데이터의 양이 충분하지 않아도 원하는 결과를 얻을 수 있다 는 장점이 있다.

이게 가능한 이유를 바로 다음 목차에서 알아보자

(나는 그런거 궁금하지 않고 사용법을 알려줘! 라면... [목차 2]로 도망가면 된다)

1-2. 사용된 기술

티쳐블 머신은 대량의 학습 데이터를 MobileNet으로 사전 훈련 모델을 생성하고,

이 모델의 마지막 일부 레이어만 수정해 전이 학습을 진행하는 방식을 사용한다.

롸?

말이 너무 어려우니 비전공자도 알아들을 수 있도록 쉽게 말해보자.

사실, 인공지능을 학습시키려면 고성능의 컴퓨터가 필요하다.

위 사진은 알파고를 학습시키기 위해 사용된 컴퓨터이다.

21세기에 이렇게 무지막지하게 큰 컴퓨터가 웬말..?

바둑을 두기 위해 사용되는 컴퓨터만 해도 이 정도인데 자동차나 스마트폰 같은 환경에서 퍼포먼스를 낸다는 건 꿈도 꾸지 못할 일이다.

그래서 나온 것이 바로 MobileNet 이다.

인공지능에 대해서 자세히 설명하자면 정말 끝도 없기 때문에..

컴퓨터 성능이 제한되거나 배터리 퍼포먼스가 중요한 곳에서 사용하기 위해 설계된 CCN구조 가 MobileNet이라는 것만

알아두고 넘어가자.

아무튼!

Teachable Machine은 MobileNet을 사용하기 때문에 스마트폰에서도 사용할 수 있는 것 이다.

또한 티쳐블 머신은 전이 학습 기술을 사용한다.

사전에 이미 학습되어 있는 모델에 사용자가 추가한 데이터 일부를 학습시켜 원하는 모델을 만드는 기술 이다.

쉽게 말하면 구글이 이미 만들어 놓은 모델이 있고 우리는 거기에 숟가락만 얻는 (...) 느낌이다.

이 기술을 사용하면 사용자는 대량의 데이터도, 아주 긴 학습시간도 필요 없다. 구글이 이미 학습시켜놨으니까!

그렇기 때문에 전이 학습은 방대한 데이터가 없어도 우수한 결과를 얻기 위해 사용되고

또한, 데이터의 양이 부족한 개발도상국을 위해서도 쓰이는 기술이라고 한다.

1-3. 어떤 프로젝트를 만들 수 있을까?

Tiny Sorter

Meet Tiny Sorter, a fun starter project that teaches you about machine learning and physical computing - together, in a hands-on DIY way. See how well you've trained your model by dropping in cereal and seeing if it goes into the right bucket. Align the

experiments.withgoogle.com

티쳐블 머신에서 몇 가지 서비스를 소개하고 있다.

우선 시리얼과 마시멜로우를 구분하는 귀염뽀짝한 기계를 만들기도 하고

Teachable Snake by Vince MingPu Shao - Experiments with Google

Since 2009, coders have created thousands of amazing experiments using Chrome, Android, AI, WebVR, AR and more. We're showcasing projects here, along with helpful tools and resources, to inspire others to create new experiments.

experiments.withgoogle.com

화살표 모양을 인식해서 움직이는 스네이크 게임(?)도 만들고

얼굴 동작을 인식해 의사소통을 하는 프로그램을 만들기도 한다.

또, 인터넷에 올라와 있는 토이 프로젝트로는

마스크 썼는지 안 썼는지 구분하는 프로그램,

닮은 연예인 찾기 프로그램,

가위 바위 보 인식하는 프로그램 등 여러 분야에 쓰이고 있다.

나는 팀원들이랑 수어(수화) 동작을 인식하는 프로그램을 만들었는데

실제 상용제품에서 쓰기에는 다소 부족한 부분이 있지만

토이 프로젝트로 쓰기에는 괜찮은 결과를 보여준다고 생각한다.

2. 사용법

2-1. 사이트 접속

우선 사이트에 들어가서 시작하기를 눌러주자.

사물을 인식하고 싶다면 이미지 프로젝트를

음성을 인식하고 싶다면 오디오 프로젝트를

동작을 인식하고 싶다면 포즈 프로젝트를 선택하면 된다.

컴퓨터나 스마트폰에서 사용할 거면(일반적인 경우) 표준 이미지 모델 선택하면 된다.

2-2. 샘플 생성

이제 이런 화면이 보일 것이다.

Class 1의 웹캠 버튼을 클릭해서 카메라를 켜주자.

카메라가 켜졌다.

쁘이 '^' V

한 손으로는 길게 눌러서 녹화하기 버튼을 누르면서

다른 한 손으로는 인식하고 싶은 동작을 카메라로 비춰준다.

스마트폰으로 연사 찍듯이 이미지 샘플들이 좌자자자자자작 찍힐 것이다.

이때 가만히 있는 게 아니라 이리저리 움직여도 보고 살짝 손도 굽혀보면서

내가 어떤 동작까지 브이로 인식할 건지 샘플을 만드는 것 이다.

(이 샘플들로 조금 있다가 학습을 시킬 거임)

클래스 이름을 수정해두는 게 아무래도 보기 좋을 것이다.

난 브이랑 주먹으로 바꾸었다.

그리고 더 추가하고 싶은 클래스가 있으면 클래스 추가를 눌러서 추가하면 된다.

2-3. 학습

원하는 클래스를 다 만들고 샘플을 다 준비했다면 이제 학습을 시키면 된다.

버튼 하나만 누르면 뚝딱... 세상에 😲

2-4. 테스트

학습이 완료되면 위 사진처럼 캠으로 어떤 동작을 하면

그게 어떤 클래스와 가장 유사한지 퍼센트로 나타낸다.

위 사진에서는 엄지 척! 하는 동작이 히읗일 확률이 100%라고 알려주고 있다.

손동작에 따라 실시간으로 확률이 샤샤샥 바뀐다.

테스트해본 결과가 만족스럽다면 다음 단계로 넘어가면 된다.

2-5. 모델 저장

모델 내보내기를 클릭해주자

웹에서 사용할 거라면 Tensorflow.js를

앱에서 사용할 거라면 Tensorflow Lite 탭을 클릭하고

모델 다운로드 버튼을 클릭하면 파일이 저장된다.

학습 데이터 양이 많다거나 epoch가 많으면 파일 다운로드 창이 뜨는데 시간이 꽤 걸리니 기다려야 한다.

여기서부터는 AI에 흥미가 더 있어서 읽어보고 싶다거나
인식률이 낮아서 어떻게 해야 할지 모르겠는 분만 읽으세요.
매우 복잡하니... ☠️

3. 인식률이 낮다면...

3-1. 학습 설정

[목차 2-2] 단계에서 고급을 클릭하면 이와 같은 설정들이 나온다.

에포크, 배치 크기, 학습률을 조절할 수 있는데 각 설정이 무엇을 의미하는지는 우측에 있는 물음표에 커서를 대면 설명이 나온다.

문제는 저 값을 얼마큼 조절해야 인식률을 높일 수 있느냐인데

안타깝게도 이 질문에 정답은 없다.

엥? 학습률을 높이면 좋은 거 아니에요?라고 생각할 수 있지만. 아니다.

엥? 학습을 많이 하면 인식률이 올라가겠죠. 블로그 주인장 뭘 모르네 ㅋㅋㄹㅃㅃ라고 생각할 수 있지만 아니다.

자, 여기에 그래프가 총 3개가 있다.

그래프에는 O와 X가 무작위로 들어가 있는데

우리는 인공지능을 학습시켜 O와 X를 분리할 수 있는 가장 적절한 선, 즉 결정 경계(선)이라고 하는 놈을 찾아낼 것 이다.

그래프 1은 학습이 덜 된 상태이다.

선이 굉장히 심플하며 O와 X를 대충 구분할 수 있긴 하지만

구분되지 않는 O와 X들이 몇몇 보인다.

그래프 3은 학습이 너무 많이 된 상태이다.

선이 아주 꼬불꼬불 후루루짭짭 맛좋은라면 마냥 꼬여있다.

"선을 기준으로 O와 X를 확실히 나누고 있는데 뭐가 문제임?" 이렇게 생각할 수도 있다.

그렇다. 지금 그래프 3은 O와 X를 100%의 확률로 구분하고 있다.

지금 저 데이터를 주고 나서 구분하라고 했을 때는 그렇다.

근데 만약 다른 데이터를 주면? 어쩌면 그래프 1보다 더 좋지 않은 결과를 보여줄 수도 있다.

쉽게 말하면 대학교에서 시험을 보려고 족보를 달달 외웠다고 하자.

근데 시험이 족보랑 완전 똑같이 나왔네? 그럼 100점 맞는 건 당연하다.

근데 시험이 족보랑 다르게 나왔다? 그러면 와장창 틀리게 되는 것이다.

그래프 2를 보자.

학습을 너무 안 하지도 않고 너무 많이 하지도 않은 가장 이상적인 선을 보여주고 있다.

즉, 우리는 설정 값을 조금씩 변경해가며 가장 이상적인 결정 경계(선)를 찾아야 한다.

그리고 여기에 정답은 없다.

일일이 값을 변경해가며 가장 적절한 설정 값을 찾아서 우수한 결과를 도출해야 하는 게 이쪽 분야의 일이다...

(AI 전공자님들 파이팅...)

3-2. 입력 데이터 확인

티쳐블 머신이 알아서 뚝딱뚝딱 학습시키고 만들어서 우리는 모르지만

사실 학습 단계에는 전처리라는 과정이 있다.

그렇다면 무슨 처리를 한다는 것일까?

예를 들어 숫자 글씨가 데이터로 들어온다고 해보자.

누군가는 기울어지게 쓸 것이고, 누군가는 대빵 크게, 누군가는 엄청 작게 쓸 수도 있다.

그렇다면 과연 이 데이터들을 분석하고 비교하는 것이 가능할까? 힘들 것이다.

그래서 이 데이터들의 크기를 비슷하게 만든다든지, 각도를 비슷하게 만든다든지 등의 처리가 필요하다.

자, 그래서 이걸 왜 설명했느냐

티쳐블 머신이 사실 이 전처리 과정을 얼마나 잘해주는지는 잘 모르겠다. 검색해봐도 안 나오고...

그렇다면 애초에 우리가 분석하고 비교하기 좋은 데이터를 넣어주는 편이 인식률 향상에 도움이 될 것이다.

(다음 목차에서 설명하겠지만 항상 도움이 되는 것은 아니다. 상황을 봐가며 해야함)

예를 들어 데이터가 10억 개가 있다고 하자.

이 데이터를 전부 다 분석하는 것이 가능할까?

아마 알파고도 혀를 내두르고 갈 것이다. (아닌가... 되나...? 암튼)

그래서 필요한 게 바로 샘플링이다.

와닿지 않을 테니 실생활에 빗대어 이해해보자.

우리는 선거철이 되면 겁나 귀찮은 여론조사 전화가 온다.

과연 이 사람들은 전국에 있는 모든 대한민국 사람들에게 전화를 걸어 데이터를 수집하고 선거 결과를 예측하는 것일까?

Nope! 일부 사람들을 조사해 결과를 예측한다.

자, 근데 샘플링한 데이터로 결과를 예측할 때 중요한 사실이 있다.

이 데이터가 모집단을 대변할 수 있는 데이터인가?

만약 특정 지역 사람들에게만 여론조사를 하면 결과를 제대로 예측할 수 있을까? 그렇지 않다.

그렇기 때문에 샘플링을 어떻게 하느냐도 결과에 중요한 영향을 미친다.

인식률이 낮다면 샘플링이 제대로 되었는지를 확인해보자.

3-3. Data Augmentation

데이터 증강이라고 불리는 놈이다.

퍼포먼스를 높이고 과적합 문제를 해결하기 위한 목적 으로 사용된다.

개발자가 준비한 데이터를 기울이고, 뒤집고, 자르면서 어느 정도 노이즈가 있는 데이터들을 만들어 낸다.

그리고 기존에 준비한 데이터와 변형시킨 데이터를 같이 학습시키는 방법이다.

"아니 [목차 3-2]에서는 노이즈를 없애기 위해 전처리를 한다면서 이번엔 왜 노이즈를 만드는 거임??"

공부를 하다가 이런 의문이 생겨 주변에 인공지능을 전공한 친구들에게 자문을 구했다.

결론은 케이스 바이 케이스!

일단 프로젝트마다 다르다.

배경이 많이 들어가는 이미지를 인식한다고 하면 일부러 노이즈를 줘서 인식률을 높이기도 하고

깔끔한 환경에서 인식한다고 하면 노이즈 없는 데이터가 인식률을 높이는데 도움이 된다.

그리고 노이즈를 주는 정도도 케이스 바이 케이스이다.

햄스터 사진을 기울여보자. 우린 이걸 햄스터 사진이라 할 수 있을까? 음.. 있겠지

그럼 추가로 사진을 뒤집고 비틀어보자. 햄스터 사진인가? 음... 애매하지만... 맞을지도..?

그럼 추가로 색을 변형시키고 네모 도형을 넣어서 일부를 가려보자. 여전히 햄스터 사진인가? 음....?

이렇듯 노이즈를 주는 적당한 정도를 알아내는 것도 필요하다.

즉, 전처리는 노이즈를 없애고 Data Augmentation은 노이즈를 만들어 내는데

가장 최적의 결과를 얻기 위한 적당한 정도를 알아내기 위해 수없이 많은 테스트를 거쳐야 한다.

음, 그리고 Data Augmentation은 보유 중인 데이터 개수가 적을 때 데이터 수를 늘리는 역할도 한다.

이는 [목차 3-1]에서 설명한 과적합을 해결하는 데 도움을 주기도 한다.

분량 조절 실패로

생성한 모델 파일을 앱에서 쓰는 방법은

다음 포스팅에서... 😓

💡 느낀 점

인공지능은 정말 빡센 학문인 것 같다. 함부로 발 들이지 않길 잘했다...

사실 단순히 사용법만 배울 거면 10분도 안 걸리는데 그 안에 숨은 의미를 이해하는 데 시간이 오래 걸리는 것 같다.

친구가 말해준 것처럼 AI는 데이터 셋을 구하고 전처리하는 과정의 비중이 굉장히 큰 것 같다. 그 뒤로는 테스트 또 테스트의 반복...

Teachable Machine에 30개의 클래스, 각 1000장의 사진을 넣어서 학습을 시켜봤는데 브라우저가 굉장히 버거워하고 강제 종료될락 말락 하는 것 보니 티쳐블머신은 아직까지는 간단한 분류 프로그램을 제작하는 정도로 적당하지 싶다.

# data[].attributes.attachment_link.description
1. Teachable Machine이란? 1-1. 개념 1-2. 사용된 기술 1-3. 어떤 프로젝트를 만들 수 있을까? 2. 사용법 2-1. 사이트 접속 2-2. 샘플 생성 2-3. 학습 2-4. 테스트 2-5. 모델 저장 3. 인식률이 낮다면... 3-1. 학습 설정 3-2. 입력 데이터 확인 3-3. Data Augmentation 1. Teachable Machine 1-1.

# data[].attributes.headline
탐구방법- (박지영,서희선) 작성자:박지영

# data[].attributes.subject
탐구방법- (박지영,서희선) 작성자:박지영

# data[].attributes.body
티처블머신 웹을 통해 개와 고양이의 사진을 학습시킨 뒤 학습된 프로그램을 통해 개와 고양이를 분류해 냄. 또한, 정확도를 높이기 위한 방법을 생각해본다.

# data[].attributes.body
50번 시도 내에 원하는 동영상이 나올 것이다

# data[].attributes.body
학습기반 데이터에 따라 "협업 필터링" 컨텐츠 기반 필터링

# data[].attributes.headline
참고문헌-작성자: 양찬우

# data[].attributes.subject
참고문헌-작성자: 양찬우

# data[].attributes.body
기초적인 알고리즘에 대한 이해와 도움을 받기 위해서 참고 했다.
알고리즘은 문제를 해결하는 단계적인 방법이다.
즉, 알고리즘은 문제를 해결하는 다양한 단계적인 방법들을 통칭해 부르는 말이다.
예를 들면 전화번호부에서 홍길동이라는 사람의 연락처를 찾는다고 했을때, 전화번호부에서 홍길동을 찾는게 문제고, 이 문제를 해결하기 위해 한 페이지씩 넘겨 홍길동이 있는지 확인하는게 알고리즘이다.

# data[].attributes.attachment_link.readable_text
1. 알고리즘이란 무엇일까?
여러분 혹시 알고리즘이 무슨 뜻인지 정확히 알고 계신가요? 요즘은 어디를 가도 이 알고리즘이라는 단어를 쉽게 들어볼 수 있는데요. 근데 실제로 이 알고리즘이 무엇인지, 그리고 이 알고리즘은 대체 어떤 원리로 작동하는지에 대해 알고 계신 분들은 생각보다 많지 않으실 것 같습니다. 그래서 준비했습니다. 오늘은 이 알고리즘이 뭔지에 대해 누구나 이해하기 쉽게 한 번 설명드리겠습니다.

우선 알고리즘이 뭔지에 대해 알아보려고 하는데요. 하버드 대학교 데이비드 말란 교수의 말에 따르면 알고리즘은 그저 문제를 해결하는 단계적인 방법에 불과하다고 합니다. 쉽게 말해 문제가 주어지면 그 문제를 해결하기 위해 여러 가지 방법을 사용하게 되는데, 이때 문제를 해결하는 방법이 바로 알고리즘입니다.
알고리즘이란 문제를 해결하는 단계적인 방법이다.
이걸 정말 쉽게 설명드리자면, 만약 제가 수원에서 강남까지 가야 하는 상황이라고 가정했을 때, 저는 버스를 탈 수도 있고, 지하철을 탈 수도 있고, 아니면 택시를 타고 갈 수도 있는데요. 심지어 조금 오래 걸리겠지만 걸어서 강남까지 갈 수도 있습니다.

여기서 우리에게 주어진 문제는 수원부터 강남까지 간다는 것인데요. 이 문제를 해결하기 위해 앞서 말씀드린 것처럼 우리는 다양한 방법을 활용할 수 있습니다. 그리고 이때 활용되는 모든 방법들을 우리는 알고리즘이라고 부르는 것이죠.

근데 알고리즘 같은 경우에도 좋은 알고리즘이 있고, 안 좋은 알고리즘도 있다고 하는데요. 예를 들어, 제가 택시를 타고 강남에 가게 되면 다른 방법들보다 조금 더 빨리 갈 수 있을 텐데요. 그럼 택시를 타는 알고리즘은 다른 알고리즘에 비해 더 좋은 알고리즘이라고 볼 수 있는 것입니다.

물론 요금이 많이 든다는 게 단점이긴 한데, 이걸 컴퓨터에 비유하자면 메모리를 많이 차지한다고 볼 수 있습니다. 어쨌든 단순히 걸리는 시간만 측정한다면, 택시를 타고 가는 게 가장 좋은 알고리즘이라고 볼 수 있습니다. 반대로 걸어가는 알고리즘 같은 경우에는 문제를 해결할 수는 있지만, 그 시간이 너무나도 오래 걸리기 때문에 딱히 좋은 알고리즘이라고는 볼 수 없을 텐데요. 이런 식으로 작용하는 게 바로 알고리즘입니다.
문제를 얼마나 더 효율적으로 해결하는지에 따라 알고리즘의 효용성이 나뉘게 된다. - 한 줄 요약 : 문제를 해결하는 다양한 단계적인 방법들을 알고리즘이라고 부른다. 2. 알고리즘 이해하기
이제 알고리즘의 원리에 대해 어느 정도 이해가 되셨나요? 그렇다면 이제부터는 조금 더 알고리즘다운 예시를 한 번 들어보겠습니다. 여러분들에게 전화번호부가 있다고 한 번 가정해볼건데요. 전화번호부 안에는 엄청나게 많은 이름과 전화번호가 적혀있습니다. 그리고 이 전화번호부는 가나다 순서대로 이름이 정렬되어 있는데요.

이제 이 수많은 사람들 가운데 내가 원하는 사람의 연락처를 찾아낼 수 있는 알고리즘을 한 번 만들어 보겠습니다. 마크라는 이름을 한 번 찾아볼건데요. 이 전화번호부를 한 페이지씩 넘겨가며 마크를 한 번 찾아보겠습니다.

만약 첫 페이지를 넘겼는데 마크가 없으면 어떻게 할까요? 그럼 다음 페이지를 확인해보겠죠? 근데 만약 다음 페이지에도 마크가 없다면, 또 그다음 페이지를 확인할 텐데요. 이렇게 한 페이지씩 넘기는 과정도 바로 알고리즘입니다. 이 방법을 사용하면 시간이 오래 걸릴지는 몰라도, 결국 마크라는 이름을 찾을 수 있기 때문인데요.
여기서 마크를 찾는 것이 문제이고, 마크를 찾는 방법이 알고리즘이다.
다시 한 번 정리해보자면 전화번호부에서 마크의 연락처를 찾는 게 주어진 문제이고, 이 문제를 해결하기 위해 한 페이지씩 넘겨 마크가 있는지 확인하는 것이 바로 알고리즘인데요. 하지만 앞서 말했듯이 한 페이지씩 넘겨서 마크를 찾는다면 여기에 소요되는 시간은 진짜 오래 걸릴 것입니다. 예를 들어, 여러분이 핸드폰 연락처를 켜서 친구의 이름을 검색했는데, 검색 결과가 한 30분 뒤에 나온다면 어떤 생각이 드실 것 같나요? 뭐 이런 폰이 다 있지 라고 생각하실 텐데요.

이처럼 한 페이지씩 넘겨 확인하는 알고리즘을 사용한다면, 이건 마치 수원에서 강남까지 걸어간다는 것이나 마찬가지입니다. 그렇다면 이 알고리즘을 어떻게 효율적으로 바꿀 수 있을까요? 만약 한 페이지가 아니라 두 페이지씩 넘겨보면 어떨까요? 그럼 속도가 두 배로 빨라지지 않을까요?

물론 이렇게 하면 첫 번째 알고리즘보다는 빨라지겠지만, 그래도 여전히 그렇게 빠른 속도는 아닐 것 같습니다. 근데 여기서 질문이 생길 수도 있는데요. 만약 두 장씩 넘기다가 마크가 있는 페이지를 그냥 지나쳐버리면 어쩌지? 라고 생각하실 수도 있는데, 이런 문제 같은 경우에는 알고리즘을 구성하는 코딩으로 이 문제를 해결할 수 있습니다. 마크라는 이름이 안 나왔는데 '마'에 해당하는 부분이 끝난다면 다시 되돌아서 확인해라 이런 식으로 코딩을 짤 수 있는데요.
한 페이지가 아니라 두 페이지를 넘기는 방식으로 알고리즘을 수정할 수 있다.
어쨌든 오늘은 이런 디테일적인 부분 말고, 정말 알고리즘이 어떤 식으로 작동되는지에 대해 조금 더 집중해서 한 번 알아보겠습니다. 그럼 다시 알고리즘으로 돌아와서, 아까 말한 두 번째 알고리즘을 사용하면 속도가 두 배 정도 빨라지긴 하지만 그래도 여전히 엄청나게 빠르지는 않을 텐데요. 그렇다면 이제 가장 효율적인 알고리즘을 한 번 구성해보겠습니다.

아까 이름이 가나다 순서대로 정렬되어 있다고 했잖아요? 그러니까 적당히 중간쯤부터 시작하는 게 빠를 텐데요. 예를 들어, 페이지의 중간을 폈는데 'ㅇ'이 나왔다고 가정하면, 마크는 'ㅁ'으로 시작하니까 'ㅇ'보다 앞쪽에 있겠죠? 가나다 순서이니까요. 그럼 저는 페이지를 한 번 폈을 뿐인데, 문제를 절반으로 줄일 수 있게 되었습니다.

'ㅁ'이 'ㅇ'보다 앞에 있으니까 뒤에 있는 절반의 페이지는 그냥 쓰레기통에 버리면 되는 것이죠. 전화번호부가 총 1,000페이지라고 가정한다면, 이 전화번호부는 단 한 번의 실행 만에 500페이지로 줄어들게 되는 것인데요. 그럼 이제 이 방법을 계속해서 진행하게 된다면 어떻게 될까요?

다시 500페이지의 절반을 펴서 해당 페이지의 자음이 어디인지를 확인한 뒤 나머지 절반을 버리게 되면 이제는 250페이지만 남아있게 될 텐데요. 그렇게 되면 단 두 단계 만에 1,000페이지에서 250페이지로 그 페이지 수가 줄어들게 된 것입니다.

그리고 이 과정을 계속해서 반복하다 보면 결국 한 페이지만 남게 될 텐데요. 그럼 그 페이지에는 마크라는 이름이 있거나 혹은 없을 것입니다. 만약 마지막 페이지에도 마크가 없으면 이 전화번호부에는 마크라는 이름 자체가 없는 것이기 때문이죠.

만약 마크가 있다면 저는 마크에게 전화를 걸면 되고, 반대로 마크가 없다면 저는 이 탐색과정을 그만두면 됩니다. 이런 과정이 바로 알고리즘인데요. 이렇게 효율적인 알고리즘을 활용하면 정답을 훨씬 더 빨리 찾을 수 있는 것입니다.
효율적인 알고리즘을 통해 정답을 훨씬 더 빨리 찾을 수 있다.
여러분도 생각해보시면 비슷한 프로그램인데도, 어떤 프로그램은 진짜 빨리 돌아가는 반면, 다른 프로그램은 천천히 돌아가고 중간중간 렉이 걸리기도 하는데요. 이게 바로 알고리즘의 차이입니다. 한쪽은 더 효율적인 알고리즘을 통해 문제를 해결한 것이고, 다른 한쪽은 조금 부족한 알고리즘을 사용한 것이죠.

알고리즘은 전혀 어려운 게 아닙니다. 문제가 있고 그 문제를 풀어 원하는 답을 도출하기 위해, 그 문제를 효율적으로 푸는 과정이 바로 알고리즘인데요. 여기서 잘 짜여진 알고리즘 같은 경우에는 다른 알고리즘에 비해 같은 문제를 풀어도 훨씬 더 빠르고 효율적으로 문제를 풀어내는 것이죠.
- 한 줄 요약 : 같은 문제를 풀어도 알고리즘의 구성방식에 따라 기능성의 차이가 존재한다. 3. 알고리즘의 실질적인 예시
그럼 이제 이 알고리즘에 대해 조금 더 자세하게 한 번 알아보겠습니다. 아까의 예시와 같이 전화번호부에서 마크라는 이름을 찾아내는 알고리즘을 만들어 볼 건데요. 이번에는 진짜 컴퓨터에서 쓰는 형식을 사용해 알고리즘을 한 번 만들어 보겠습니다. 물론 이해하기 쉽게 컴퓨터 언어가 아니라 한글을 사용해 볼건데요. 그럼 이렇게 구현할 수 있을 것 같습니다.

1단계, 전화번호부를 집어 든다

2단계, 전화번호부의 중간을 편다

3단계, 그 페이지를 살펴본다

4단계, 마크가 그 페이지에 있으면

5단계, 마크에게 전화를 건다

6단계, 만약 마크가 더 앞쪽 페이지에 있다면

7단계, 책 앞쪽의 중간을 펴서 살펴본다

8단계, 다시 3단계로 돌아간다

(여기서 3단계로 다시 돌아간다는 건, 앞서 말했던 "3단계 그 페이지를 살펴본다"라는 단계로 돌아가서 차례대로 다시 단계를 밟아간다는 뜻인데요. 근데 만약 앞쪽 페이지에 없다면 6단계는 아예 성립 자체가 불가능합니다. 그럼 이제 6단계를 건너뛰고 그다음 만약 단계로 이동하게 됩니다.)

9단계, 만약 마크가 더 뒤쪽 페이지에 있다면

10단계, 책 뒤쪽의 중간을 펴서 살펴본다

11단계, 다시 3단계로 돌아간다

(그리고 여기서 6단계도 해당하지 않고, 그다음에 나왔던 9단계도 해당하지 않는다면, 그다음 만약 단계로 넘어가게 됩니다.)

12단계, 만약 모든 상황에 맞지 않는다면

13단계, 이 탐색 행위를 종료한다

이런 식으로 알고리즘을 만들어낼 수 있습니다. 물론 앞서 말했듯이, 조금 더 쉬운 이해를 위해 우리가 사용하는 언어를 가지고 알고리즘을 구성해봤는데요. 이제 이 알고리즘을 컴퓨터의 언어로 변환만 한다면, 마크를 검색하는 빠른 알고리즘이 탄생하게 되는 것입니다.
해당 알고리즘의 방식을 컴퓨터의 언어로만 변환한다면 알고리즘이 탄생하게 된다.
이처럼 모든 알고리즘은 사전에 짜여진 특정 패턴을 가지고 작동하고 있는데요. 유튜브를 예로 들어 설명드리자면, 만약 사용자가 영상을 클릭하자마자 유튜브를 종료했다면, 해당 유튜버의 영상은 더이상 추천하지 않습니다. 혹은 영상을 클릭하고 오랫동안 시청했다면, 해당 유튜버의 영상을 추천 영상으로 띄우는 방식으로 알고리즘이 구성되어 있는 것입니다.

물론 실제 알고리즘은 이것보다 훨씬 더 복잡하고 정교하게 짜여져 있겠지만, 기본 방식은 이런 식으로 돌아가고 있습니다. 알고리즘은 어려운 게 아닙니다. 단순히 문제를 해결하는 단계적인 방법이 바로 알고리즘입니다.
- 한 줄 요약 : 알고리즘은 단순히 문제를 해결하는 단계적인 방법이다.
모두를 위한 컴퓨터 과학 (CS50 2019) - David J. Malan

* 이메일 : marksknowledge@gmail.com

# data[].attributes.attachment_link.title
진짜 너무 쉬운 알고리즘 원리

# data[].attributes.attachment_link.description
비전공자도 이해하는 알고리즘 기초 개념 | 동영상으로도 보러오세요 ^0^ https://youtu.be/bARLa_4dSN4 1. 알고리즘이란 무엇일까? 여러분 혹시 알고리즘이 무슨 뜻인지 정확히 알고 계신가요? 요즘은 어디를 가도 이 알고리즘이라는 단어를 쉽게 들어볼 수 있는데요. 근데 실제로 이 알고리즘이 무엇인지, 그리고 이 알고리즘은 대체 어떤 원리로 작동하는지에 대해 알고 계신 분들은 생

# data[].attributes.headline
탐구방법-(박지영,이준선,양찬우,서희선) 작성자: 서희선

# data[].attributes.subject
탐구방법-(박지영,이준선,양찬우,서희선) 작성자: 서희선

# data[].attributes.body
한 동영상을 정한 뒤, 그 동영상과 관련된 키워드 등을 검색해 유튜브에서 알고리즘을 이용해 방대한 데이터의 공간 안에서 찾아낸다. 실험 데이터를 기반으로 확률을 그래프화 해 시각화 시킬 것이다. 또한, 정확도를 높이기 위한 방법을 생각해본다.

# data[].attributes.body
조사 내용 : 유튜브 추천 알고리즘의 목표 는 사람들이 마음에 드는 동영상을 잘 찾아주고 더 많이 시청하도록 해서 유튜브가 성장하는 것이다.
또한 알고리즘의 3가지의 영상 추천원리가 있는데, 첫번째는 개인 사용자의 시청 이력 두번째는 채널 영상의 실적 세번째로는 계절성 요인을 통해 개인적으로 맞춤 추천한다.아무튼 알고리즘의 가장 핵심적인 요인으로 작용하는것은 바로 데이터이다. 사용자의 데이터를 수집 및 분석하여, 그에 맞는 영상을 띄워주는게 알고리즘의 대략적인 원리이다.

# data[].attributes.body
https://www.kci.go.kr/kciportal/ci/sereArticleSearch/ciSereArtiView.kci?sereArticleSearchBean.artiId=ART001990971

# data[].attributes.attachment_link.title
사용자의 소셜 카테고리를 이용한 유튜브동영상 추천 알고리즘

# data[].attributes.attachment_link.description
The YouTube Video Recommendation Algorithm using Users' Social Category - social category;recommendation algorithm;social relationship;social networking service

# data[].attributes.headline
예측결과:(양찬우, 이준선) 

# data[].attributes.subject
예측결과:(양찬우, 이준선) 

# data[].attributes.body
이항분포 프로그램을 사용해 정확도를 분석할 것이다. (40개 정도 정확히 대답할 것으로 추정됨)

# data[].attributes.headline
키워드-(이준선, 양찬우)

# data[].attributes.subject
키워드-(이준선, 양찬우)

# data[].attributes.body
딥러닝, 자연어 처리, 기계학습, 사물인터넷

# data[].attributes.headline
탐구방법-(양찬우, 이준선) 작성자-서희선

# data[].attributes.subject
탐구방법-(양찬우, 이준선) 작성자-서희선

# data[].attributes.body
빅스비에게 50개의 질문을 던지고, 적절한 대답을 하는 확률을 파악한다. 조사한 자료를 바탕으로 binomial calculation 구글 프로그램을 이용해 성공률, 시행횟수를 적은 후 정확도를 분석한다. 또한, 정확도를 높이기 위한 방법을 생각해본다.

# data[].attributes.body
핸드폰 속 인공지능인 빅스비는 사용자가 호출 버튼을 눌러 음성 명령을 내리면, 빅스비가 그에 맞는 내용을 중앙서버로 보낸다 그후 지침을 전달하고 명령을 이행하는 총 4단계(간단히)로 구동되고 있다. 빅스비의 작동원리를 알아보기 위해서 자료를 참고했다.

# data[].attributes.body
https://nous-temperature.tistory.com/701

# data[].attributes.attachment_link.readable_text
모두 삼성 스마트폰으로 매일 아침 4 식구가 빅스비를 찾습니다.

바쁜 아침 출근 시간에 시간을 옷을 입으면서, 시간을 물어보거나, 우산을 가져가야 하는지, 또는 옷을 두껍게 입어야 하는지, 얇게 입어야 하는지를 알아보기 위해 위 두 마디는 매일 아침에 우리집에서 일어나는 풍경 중의 하나입니다.

저는 여기에 하나 더 추가하는 경우가 많습니다. 근방 둔 스마트폰이 어디 있는지 알아보기 위해, "하이 빅스비, 어디 있니?"라고 물어보고, "저, 여기 있어요."라고 스마트폰이 이야기를 합니다.

저희 집 스마트폰은 4개인데, 제가 어디 있는지 물어보면, 항상 제 전화기만 반응을 합니다. 다른 전화기는 제 목소리가 입력되어 있지 않기 때문에 반응을 하지 않는 것이지요.

삼성 빅스비 같은 AI 음성 프로그램은 어떻게 가족들 간의 목소리도 구분해서 서로 다르게 반응하는 걸까요?

저는 이쪽 분야의 전공자도 아니고, 더군다나 관련된 기술자가 아니기에 자세한 것은 알지 못합니다. 하지만, 학교 때 배운 음운론에 관한 어설픈 지식을 가지고 있어서 아주 피상적인 원리는 대강 이해를 하고 있습니다.

https://nous-temperature.tistory.com/237

자음과 모음 (consonant and vowel) - 탄설음화 (flapping) #152

이번 수능 어휘 학습은 교육과정에 제시되지 않은 어휘 2개를 준비했습니다. 영어 알파벳 26자는 보통 5개의 모음(vowel)과 21개의 자음(consonant)으로 이루어져 있습니다. (w, y는 반모음이라고 부르

nous-temperature.tistory.com

더불어 "주파수와 음소"와 관련이 있다는 것을요.

우리가 말을 할 때, 소리는 공기를 매개로 해서 전달됩니다. 각각의 음성은 서로 다른 주파수나 파형을 가지면서 다른 사람의 귀에 전달되고, 그게 무슨 말인지 이해를 하게 됩니다.

빅스비 같은 인공지능 기계는 사람과 다르게 사람의 목소리 신호를 주파수나 목소리가 가지는 파형 스펙트럼으로 바꾼 후, 이 음성을 음소 단위로 분류해서 사람의 말을 인식합니다. 그런데, 사람마다 목소리가 다르기 때문에 저장된 음성과 비교하여 서로 다른 사람을 구별하는 것입니다. 이는 다른 말로 하면, 사람마다 목소리의 주파수와 파형 등은 사람의 지문처럼 독특성을 지니고 있다는 말이 됩니다.

음운학이나 음성학의 개념을 약간이라도 찾아본다면, "음성"과 "음소"는 본질적으로 큰 차이가 납니다. "음성"은 우리가 말할 때 나는 물리적인 소리이며 "음소"는 그 음성을 듣고 청자나 화자가 인식하는 소리입니다.

예를 들면, "불, 풀, 뿔" 이 세 음성은 우리나라 말에서는 분명하게 구별되는 말입니다. 그래서, 'ㅂ, ㅍ, ㅃ'은 우리말에서 서로 다른 음소가 되지만, 영어에서는 그렇지 않습니다. (여기서 흔히 오해하고 있는 것이 있는데, 우리는 "불"을 "bul"이 아닌 "pul"로 발음(=음성)합니다.) 이 말을 영어 화자가 들으면 똑같은 말로 인식하기 때문에 'ㅂ, ㅍ, ㅃ'는 영어 화자 입장에서는 음소가 아닙니다. 우리가 서로 다른 의미를 가진 right와 light를 발음할 때, "r과 "l"로 구별하지 못하고 "ㄹ"사용하는 것과 같은 이치입니다.

사람마다 음성의 주파수가 모두 다른 데, 어떻게 유튜브 등에서 자막 버튼을 누르면 해당 말이 텍스트로 변환되는 것일까요?

그것은 음소나 음성의 특정한 주파수 범위 내에서 같은 음소나 음성으로 인식하고 발화한다는 것을 알 수 있습니다. 여러 음소나 음성 등을 연구한 논문들을 읽어보면, 예를 들어, "ㄴ"과 "ㅂ"은 거의 모든 사람들은 음의 높낮이는 다르더라도 특정 주파수 범위를 가진다는 것을 알 수 있습니다. 그래서 인공지능뿐만 아니라 특정 주파수 범위에 있는 목소리를 어떤 음성인지를 인식할 수 있다는 것입니다. 특히, ㄴ, ㅂ은 주파수 범위가 확연하게 차이가 나는 발음 중의 하나이긴 합니다.

"하이 빅스비, 오늘 기분 어때?"라고 물었더니, 오늘은 빅스비가 "구름 한 점 없이 맑은 기분은 유지하고 있어요."라고 말합니다. 물어보는 말에 따라 답변이 항상 똑같은 것이 아닌데, 빅스비가 울적한 제 마음을 아는지 마음 풀라고 하는 것 같습니다.

이는 많은 사람들의 음성 정보를 받으면 받을수록 몇 년 전의 "알파고"처럼 여러 가지 상황에 따라 학습하기 때문일 것입니다.

여기에 어떤 말을 하는 상황 등에 따라서 의미가 변할 수도 있다는 것을 배우거나 입력해야 할 것입니다. 어떤 외국인이 송아지 모습을 보고 "머리에 풀난 송아지가 나무를 들이받았다."라고 한다면 우리는 외국인이 발음한 "풀"을 "뿔"로 인식할 수도 있을 것입니다. "풀난"이라는 발음을 AI가 인식했을 때도, "머리", "송아지", "들이받았다" 등과 함께 합쳐진 말은 "풀"이 아닌 "뿔"이라는 것을 입력된 데이터를 많이 쌓는다면 잘못 발음한 것도 바르게 인식할지 모릅니다.

그냥 그렇다는 이야기입니다. 비교적 높은 주파수 영역을 나타내는 "ㅂ"과 낮은 주파수 영역을 가지는 "ㄴ"의 유무를 꼭 따져봐야 하는 것인지는 판단하기 나름이 아닐 것이라고 느끼는 이유이기도 합니다.

# data[].attributes.attachment_link.title
빅스비, 어떻게 음성을 알아듣나? AI 음성 인식 원리

# data[].attributes.attachment_link.description
우리 집에는 서로 다른 스마트폰이 4대가 있습니다. 모두 삼성 스마트폰으로 매일 아침 4 식구가 빅스비를 찾습니다. "하이 빅스비, 오늘 날씨는?" "하이 빅스비, 지금 몇 시니?" 바쁜 아침 출근 시간에 시간을 옷을 입으면서, 시간을 물어보거나, 우산을 가져가야 하는지, 또는 옷을 두껍게 입어야 하는지, 얇게 입어야 하는지를 알아보기 위해 위 두 마디는 매일 아침에 우리집에서 일어나는 풍경 중의 하나입니다.

# data[].attributes.body
http://wiki.hash.kr/index.php/%EB%B9%85%EC%8A%A4%EB%B9%84

# data[].attributes.body
"유튜브 알고리즘" 사람들이 흔히 말하는 유튜브 AI인 ‘유튜브 봇’이 시청자들에게 알맞은 영상을 추천해 주는 것 입니다.
유튜브 알고리즘은
시청자가 오래 시청한 영상
시청자가 클릭을 많이한 콘텐츠
좋아요,댓글이 많은 콘텐츠
관심 없음 의견이 적은 콘텐츠를 주로 추천해 주고
본문 해시태그를 어떻게 작성하는지 얼마나 콘텐츠와 연관이 있는지에 따라 구글과 마찬가지로 검색어
와 관련이 높은 영상을 상단에 노출시키려 합니다.

# data[].attributes.attachment_link.title
떡상 하고 싶나요? 유튜브 알고리즘에게 간택 받는 3가지 방법 - 어센트 코리아

# data[].attributes.attachment_link.description
안녕하세요, 어센트코리아의 부드러운 강점 발견자 에디터 부강발 입니다. Youtube Algorithm 사람들이 흔히 말하는 유튜브 AI인 '유튜브 봇'이 시청자들에게 알맞은 영상을 추천해 주는 것 입니다. 조회수가 갑자기 올라간 유튜브 콘텐츠들을 보고 유튜브 알고리즘의 간택을 받았다고 하는데요, 간택을 받은 동영상은 추천 동영상에 떠서 소위 말하는 조회수가 떡상을 했다고 합니다.

# data[].attributes.body
https://youtu.be/z3hNBhvkHG0

# data[].attributes.attachment_link.authors[].name
안될공학 - IT 테크 신기술

# data[].attributes.attachment_link.title
AI 비서부터 인공지능 스피커까지! 사람 말을 알아듣는 음성인식 기술 원리!

# data[].attributes.headline
유튜브가 딥러닝을 도입한 방식

# data[].attributes.subject
유튜브가 딥러닝을 도입한 방식

# data[].attributes.body
http://cloudinsight.net/ai/%EC%9C%A0%ED%8A%9C%EB%B8%8C%EA%B0%80-%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%9D%84-%EB%8F%84%EC%9E%85%ED%95%9C-%EB%B0%A9%EC%8B%9D-1/

# data[].attributes.attachment_link.title
유튜브가 딥러닝을 도입한 방식 (1) - 클라우드 인사이트

# data[].attributes.attachment_link.description
가장 큰 영상 플랫폼인 유튜브에 구글은 딥러닝을 어떻게 도입하고 활용하고 있는지 살펴본다.

# data[].attributes.body
전이학습의 원리(https://kr.mathworks.com/discovery/transfer-learning.html) 전이학습이란?(https://dacon.io/forum/405988)
원리2(https://blog.naver.com/dilector/222568650278)

# data[].attributes.attachment_link.readable_text
안녕하세요.

데이크루 1기로 활동하고 있는 '동화책'입니다.📚🤓

오늘은 전이학습에 대한 이론 학습을 주제로 이야기를 해보려고 합니다.

지난주에 제가 '소규모 데이터셋으로 심층신경망 학습하기 (feat.Keras)' [1~3탄]을 통해서 전이 학습(transfer learning)에 대한 실습을 진행해보았는데요, 이론적인 내용이 부족했던 것 같아 공부한 내용을 함께 공유해보려고 합니다.

이 글을 먼저 천천히 읽어보시고 실습을 진행해보시면 좋을 것 같네요.

1. 전이 학습(Transfer Learning)이란?

위키 백과에서는 '한 분야의 문제를 해결하기 위해서 얻은 지식과 정보를 다른 문제를 푸는데 사용하는 방식'으로 정의하고 있는데요

이를 딥러닝의 분야에서는 '이미지 분류' 문제를 해결하는데 사용했던 네트워크(DNN;Deep Neural Network)를 다른 데이터셋 혹은 다른 문제(task)에 적용시켜 푸는 것을 의미합니다. 특히나 기계의 시각적 이해를 목표로 하는 컴퓨터 비전의 영역에서 전이 학습으로 수행된 모델들이 높은 성능을 보이고 있어 가장 많이 사용되는 방법 중에 하나입니다. 전이학습을 수행하지 않은 모델들보다 비교적 빠르고 정확한 정확도를 달성할 수 있는 것이죠. 어떻게 이런 것들이 가능할까요?

바로 네트워크가 다양한 이미지의 보편적인 특징 혹은 피처(Feature)들을 학습 했기 때문입니다. 일반적으로 네트워크가 깊어질수록 서로 다른 종류의 피처들을 학습한다고 알려져 있는데요 낮은 층에서 학습되는 피처를 low-level features, 깊은 층에서 학습되는 피처들은 high level features라고 부릅니다. low-level feature의 예로는 이미지의 색이나 경계(edge) 등을 말할 수 있고 high level features는 이보다 더 심화된 객체의 패턴이나 형태를 의미합니다. 그림 1을 보시면 각각의 단계에서 이미지의 특징들을 추출하는 필터를 시각화한 그림입니다. 단계별로 서로 다른 형태를 띄고 있음을 알 수 있습니다. low-level feature의 필터의 경우 색의 변화나 경계의 방향 등을 추출한다고 유추할 수 있고 더 올라가서 high-level feature는 동그라미가 반복되는 패턴이나 새의 부리 등의 이미지를 분류하는데 있어서 주요한 특징들을 학습한다고 말할 수 있겠습니다.

그림1. multi-level-features [출처 : Kaggle]

네트워크가 이러한 특징을 학습하기 위해서는 대량의 데이터셋이 필요한데 가장 대표적으로 ImageNet을 들 수 있습니다. ImageNet은 2010년~2017년까지 매해 열린 대회 ImageNet Large-Scale Visual Recognition (ILSVRC)을 위한 데이터셋으로 자동차나 고양이를 포함한 1000개의 클래스, 총 1400만개의 이미지로 구성되어 있습니다. 해당 데이터셋을 가지고 이미지 분류를 수행한 모델들은 매년 뛰어난 성능을 보여주고 있는데 2015년 이후에는 사람보다 뛰어난 정확도를 가진 모델이 등장하였습니다. 참고로 Russakovsky et al 에 따르면 사람의 이미지 분류 오류는 5.1%에 달합니다.

그림 2. ILSVRC [출처 : ResearchGate]

2012년 AlexNet 이후에 VGG, GoogleNet, ResNet 등 주요 CNN 구조들은 전이 학습을 수행하는데 네트워크의 기저(base 또는 backbone)으로 사용되고 있습니다. 논문을 살펴보면 ResNet을 기반으로 한 여러 모델을 찾아보실 수 있으실 겁니다. ImageNet으로 학습시킨 CNN 구조는 정말 많이 사용되기 때문에 pytorch나 tensorflow 같은 딥러닝 프레임워크에서 API 저장되어 있어 간편하게 불러와서 사용하실 수 있습니다. 이렇게 구현할 수 있는 모델의 목록은 공식 문서( tensorflow, keras, pytorch) 등을 통해 확인하실 수 있습니다. 주요 CNN 구조인 GoogleNet과 ResNet 에 대해서는 장어님이 토크를 올려주셨네요. 중요한 구조이니만큼 꼭 게시글을 확인해보시면 좋을 것 같습니다.

2. 사용방법

전이학습은 실제로 어떻게 이루어질까요?

전이학습을 위해서는 ImageNet과 같은 대량의 데이터셋으로 이미 학습이 되어있는 모델을 사용합니다. 이를 '사전에 학습된 모델' 혹은 'pretrained model'이라고 부릅니다. 데이콘 대회에 참여하시면서 규정사항에 pretrained model을 사용할 수 있다/없다 등으로 접해본 용어일 수도 있겠네요.

몇가지 경우에 대해서 pretrained 모델 외에 학습시키는 레이어의 양이 달라질 수 있습니다. 그림 3을 참고해주세요.

만약 ImageNet과 비슷하지만 소량의 데이터셋을 가지고 있다면 ImageNet으로 학습시킨 CNN을 구조를 그대로 두고 뒷단에 분류를 위해 새로운 완전연결레이어(FC;Fully Connected Layer)를 붙여서 학습시키면 됩니다. 만약 ImageNet과 비슷하지만 더 많은 데이터셋을 가지고 있다면 뒷단에 여러 FC레이어를 묶어서 학습시켜도 좋습니다.

만약 내가 가진 데이터셋이 ImageNet과 다른 경우에는 어떨까요? 데이터가 많은 경우에 뒷단의 여러 FC 레이어를 묶어서 학습시키는 것이 충분할 것입니다. 하지만 데이터가 적은 경우엔 pre-training이 효과적이지 않을 수 있습니다. 데이터 증식으로 데이터의 양을 늘려서 전체 네트워크를 학습시키는 등 다른 방법을 생각해야합니다.

그림 3. pre-training [출처: Kaggle]

3. 전이학습, 실제로 효과적인 것 맞나?

전이학습, 이론적으로는 알겠으나 실제로 효과가 있는 것이 맞나? 나는 그냥 기본 모델에서 학습시키면 되는데?라고 생각하실 수도 있습니다. 이에 대한 답으로 2018년 FAIR(Facebook AI Research) 논문에서 실험을 통해 '전이학습이 학습 속도 면에서 효과가 있다'라는 것을 밝혀냅니다. 동일한 조건에서 바닥부터 훈련시키는 것(train from the scratch)이 사전 학습된 모델을 사용하는 것보다 2~3배의 시간이 더 걸린다는 것을 보여주고 있습니다. 그림 4에서 랜덤으로 모델을 초기화를 시키는 것보다 사전 학습된 모델의 초기값을 사용하였을 때 더 빠르게 높은 정확도에 도달한다는 것을 보여주고 있습니다. 더 궁금하신 분들은 논문을 읽어보셔도 좋겠네요.

그림 4. Rethinking ImageNet Pre-training [출처 : arxiv]

마무리

오늘은 전이학습과 사전 학습된 모델에 대해서 정리해보았습니다.

더 궁금한 사항이나 피드백 있으시면 언제나 편하게 댓글 달아주세요. 🤗

긴 글 읽어주셔서 감사합니다.

참고 문헌

# data[].attributes.attachment_link.description
안녕하세요. 데이크루 1기로 활동하고 있는 '동화책'입니다.📚🤓 오늘은 전이학습에 대한 이론 학습을 주제로 이야기를 해보려고 합니다. 지난주에 제가 '소규모 데이터셋으로 심층신경망 학습하기 (feat.Keras)' [1~3탄]을 통해서 전이 학습(transfer learning)에 대한 실습을 진행해보았는데요, 이론적인 내용이 부족했던 것 같아 공부한 내용을 함께 공유해보려고 합니다. 이 글을 먼저 천천히 읽어보시고 실습을 진행해보시면 좋을 것 같네요.

# data[].attributes.body
https://journal-home.s3.ap-northeast-2.amazonaws.com/site/2022s/abs/0566.pdf