RyanKor / 2021-google-ml-bootcamp

Google Machine Learning Bootcamp 2021
13 stars 0 forks source link

[Interview] 하루에 5개씩 답변 준비하는 데이터 사이언티스트 면접 질문지 모음 #28

Closed RyanKor closed 2 years ago

RyanKor commented 2 years ago

--> 질문지 원본 레포

Contents

공통 질문

목차로 이동

프로젝트

목차로 이동

통계 및 수학

목차로 이동

분석 일반

목차로 이동

머신러닝

목차로 이동

딥러닝

딥러닝 일반

목차로 이동

컴퓨터 비전

목차로 이동

자연어 처리

목차로 이동

강화학습

목차로 이동

GAN

목차로 이동

추천 시스템

목차로 이동

데이터베이스

목차로 이동

데이터 시각화

목차로 이동

시스템 엔지니어링

목차로 이동

분산처리

목차로 이동

웹 아키텍쳐

목차로 이동

서비스 구현

목차로 이동

대 고객 사이드

목차로 이동

개인정보

목차로 이동

Reference

RyanKor commented 2 years ago

2021.10.01

질문지 1

크롤러를 파이썬으로 구현할 때 BeautifulSoup과 Selenium의 장단점은 무엇일까요?

Selenium은 기본적으로 크롤러 목적이 아니라 웹에서 버튼 클릭이나 스크롤 조작, 로그인 등 웹 브라우저 등을 통해 자동화 테스트에 사용하는 툴입니다.

때문에 셀레니움을 사용하면 웹 페이지에서 javascript 렌더링을 통해 생성되는 데이터들을 크롤링해오기 용이합니다.

인터넷 브라우저를 통해 크롤링을 하는 개념이라, (JS로 렌더링되는 것을 가져오기 때문에) 실제 보여지는 웹페이지의 전부를 가져올 수 있는 것이 장점이고, 디버깅하는 것이 상대적으로 직관적입니다.

하지만 웹 브라우저를 실제로 실행시키는 방법이기 때문에 속도도 많이 느리고, (실제로 단순 웹 페이지를 셀레니움을 통해 띄우는 작업 자체가 매우 느림) 메모리도 상대적으로 많이 차지합니다. (크롬이 본래 실행되면 메모리 자체를 많이 잡아먹는 것을 감안하면 이해하기가 쉽습니다)

BeautifulSoup는 서버에서 HTML, XML 등으로부터 정보를 요청받아 사용하기 때문에 서버사이드 렌더링을 사용하지 않는 SPA 사이트나, javascipt 렌더링을 필요로 하는 사이트들은 크롤링하기 어렵습니다.

실제로 작년 베트남 보건국의 코로나 정보를 실시간으로 가져와 실시간 크롤링하는 간단 프로젝트를 진행했는데, BeautifulSoup를 사용하는 프로젝트는 Angular.js로 빌드되어 있는 보건국 정보를 가져오지 못했습니다.

질문지 2

R의 결과물을 python으로 만든 대시보드에 넣고 싶다면 어떤 방법들이 가능할까요?

결과물을 실시간으로 받아야하는지 (대시보드에 실시간 정보 반영), 정기적으로 일정 간격을 두고 넣는지(시간 간격을 두고 정보 업데이트), 또는 단발성으로 넣는 상황인지에 따라 다르겠지만, 다른 프로그래밍 언어들이 서로 정보를 주고받을 때 많이 사용하는 JSON 포맷을 받아와 대시보드에 정보를 업데이트해서 사용하는 방식을 먼저 얘기할 수 있겠습니다.

(일반적으로 업무용으로 다른 개발자님들과의 해당 결과물을 기반으로 소통이 필요한 상황이 발생할 수 있기 때문에 클라우드에 배포해서 작업 문서에 배포한 경로의 URI를 기록해놓으면 업무 효율성에 도움이 될 것 같습니다)

이 경우, R에서 만든 결과물을 클라우드 상에 배포해서 JSON 파일 포맷이 담긴 오브젝트 스토리지에 객체 아이디로 접근하는 것도 한 가지 방법이 될 수 있고, REST API 규칙에 따라 별도의 접근 경로를 생성해서 접근하는 방식도 가능할 것입니다.

회사에서 정한 규칙에 따라 접근하는 방식은 달라질 수 있고, R과 파이썬은 공통적으로 CSV 파일을 받아 데이터 분석 작업을 수행하는 것이 가능하기 때문에 R의 결과물을 CSV 파일로 변환해서 이 정보를 대시보드에 업로드하는 것도 방법이 될 수 있을 것입니다.

질문지 3

하나의 IP에서 여러 도메인의 HTTPS 서버를 운영할 수 있을까요? 안된다면 왜인가요? 또 이걸 해결하는 방법이 있는데 그건 뭘까요?

기본적으로 하나의 IP에서 여러 도메인의 HTTPS 서버를 매핑하는 것도 가능하고, 그 반대인 하나의 HTTPS 서버에 여러개의 IP를 매핑하는 것도 가능한 것으로 알고 있습니다. (IP의 1:N 또는 N:1 매핑)

그러나 대부분의 서비스에서 후자를 선택하는 것으로 알고 있고, 그 사실은 nslookup이라는 name server 를 확인하는 명령어를 터미널에 입력하면 일정 간격으로 하나의 도메인에 연결된 IP 주소가 꾸준히 변경되는 것을 볼 수 있습니다.

또한 이러한 엔드 포인트를 IP가 아닌 도메인을 사용하는 이유는 사람들이 접속해서 사용하려는 서비스가 무엇인지 더 직관적으로 이해할 수 있으며 사용자로부터 IP 주소를 은폐하는 것이 쉬워집니다.

하나의 IP에서 여러 도메인의 HTTPS 서버를 매핑하는 상황을 사용하지 않는 가장 큰 이유는 여러대의 HTTPS 서버에서 IP에 과부하가 걸릴 정도로 많은 양의 트래픽이 쏟아지면, 이를 하나의 IP로 감당하기가 어렵고 무엇보다 여러 도메인이 하나의 IP를 계속 점유하고 있으면 한정된 자원의 IP를 유동적으로 사용하기 어렵다는 단점이 존재합니다.

따라서 서비스의 발전이 하나의 HTTPS 서버에 여러 IP가 매핑되는 방식으로 발전했으며 HTTPS 서버에 트래픽이 몰리면 이를 여러 IP가 분산 처리하는 방식이 현재 웹 아키텍처에 자리잡은 것으로 이해하고 있습니다.

질문지 4

구글의 BigQuery, AWS의 Redshift는 기존 RDB와 무슨 차이가 있을까요? 왜 빠를까요?

기존의 RDB에서 대량의 데이터를 처리할 때 병목 현상(Bottle Neck)이 발생하는 부분은 디스크의 I/O (디스크가 데이터를 읽어들이는 부분)이며 이를 해결하기 위해 고속으로 데이터를 처리하기 위한 아키텍처로 분산 파일 시스템 (Distributed File System)이 고안되었습니다.

여러대의 디스크에 분산해서 저장하고 각 디스크에서 동시에 데이터를 읽어들이면 고속으로 대량의 데이터 처리를 진행할 수 있습니다.

AWS Redshift는 이러한 기존 RDB의 문제를 보완해서 출시된 분산 병렬 RDB이며, 기존 RDB와의 호환성을 갖고 있어 (예를 들어, PostgreSQL 등) 기존 RDB 클라이언트 (MySQL Workbench, psql 등)으로 접속할 수 있는 장점이 있습니다.

단점은 성능 튜닝이나 비용 감소를 위해 최적의 노드 수와 스펙을 예측해서 인스턴스를 실행하고 종료해야하는데 굉장히 전문적인 지식이 필요해 이를 전문적으로 관리할 수 있는 인재가 필요합니다.

마지막으로 빅쿼리는 redshift와 거의 비슷하지만, 인스턴스 노드를 직접 관리할 필요가 없으며, 읽어들인 데이터 양에 대해 비용을 청구합니다.

질문지 5

One Hot 인코딩에 대해 설명해주세요

원-핫 인코딩은 자연어 처리를 위해 문자를 숫자로 바꾸는 기법 중 하나로 단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식입니다.

이렇게 표현된 벡터를 원-핫 벡터(One-Hot vector)라고 하며

  1. 각 단어에 고유한 인덱스를 부여하고 (정수로 표현)
  2. 표현하고 싶은 단어의 인덱스의 위치에 1을 부여하고, 다른 단어의 인덱스의 위치에는 0을 부여하는 방식으로 진행합니다.

처음 배울 때 자연어 부분을 학습하면서 접했지만, 이미지 등의 라벨링 작업을 진행할 때도 종종 활용되는 것을 볼 수 있고 케라스와 사이킷런에도 관련 모듈이 있어 간단하게 활용해 본 경험이 있습니다.

RyanKor commented 2 years ago

2021.10.02

질문지 1

L1, L2 정규화에 대해 설명해주세요

L1, L2 규제 또는 정규화는 가중치의 값이 커지지 않도록 제한하는 기법입니다.

가중치를 적절하게 규제하면 성능이 올라가는데, 이는 모델이 몇 개의 데이터에 집착해서 새로운 데이터에 적응하지 못하는 상황을 막아 모델이 일반화 되기 쉽게끔 조절하기 때문입니다.

L1 규제는 다음과 같이 표현하고, 가중치의 크기에 상관없이 미분했을 때 최적화 시점에 상수 값을 빼기 때문에 불필요한 가중치를 0으로 만들 수 있어 중요한 가중치만을 취합하는 모델에 적합합니다.

image

반대로 L2 규제는 L1 규제의 제곱 값의 합을 제곱근 처리해주며, 미분 했을 때 가중치 값이 포함되어 가중치를 완전히 0으로 만들지 않습니다.

즉, 가중치를 0으로 만들어 불필요한 특성을 제외해 모델의 복잡도를 떨어뜨리는 L1 규제의 특성을 보완해 사용할 수 있는 특징을 갖고 있습니다.

image

질문지 2

Spark이 Hadoop보다 빠른 이유를 I/O 최적화 관점에서 생각해봅시다.

Hadoop을 사용하면 분산형 파일 시스템인 Map Reduce 방식을 이용한 분산 실행을 처리하고, 데이터를 단계적 처리 절차를 밟으면서 work flow를 구성하는데 이 과정에서 Disk I/O가 반복 작업으로 실행되면서 매우 느려집니다.

Spark는 여기서 데이터를 단계적 처리 절차를 반복적으로 실행해주기보다 In-Memory 방식으로 모든 데이터 운영을 실시간에 가깝게 처리해주면서 최대 100배까지 네트워크와 Disk I/O 속도 면에서 Hadoop보다 빠른 연산을 보여준다고 알고 있습니다. 그러나 hadoop의 경우 분산 데이터 인프라스트럭처로써 대량의 데이터를 서버 클러스터 내의 여러 노드에 분산시키는 역할을 담당한다면, Spark는 이러한 분산형 데이터 컬렉션 상부에서 동작하는 데이터 프로세싱 툴이며, 분산형 스토리지로서 역할은 수행하지 않습니다.

질문지 3

파이차트는 왜 구릴까요? 언제 구린가요? 안구릴때는 언제인가요?

학교에서 데이터 과학 수업을 수강할 때도 그랬고, 대시보드 설계와 데이터 시각화라는 책에도 언급되어 있는데 파이차트는 전달하고자 하는 데이터의 시각적 모호함 때문에 잘 사용되지 않는다는 것으로 알고 있습니다.

파이차트에서 표현하고자 하는 데이터들의 크기가 비슷할 때, 데이터 수치를 명확하게 포함시키지 못할 경우 각 파이에 대한 명문화된 설명이 함께 포함되어 있지 않으면 시각화에 치중해 잘못된 정보를 제공할 수도 있는 것이 단점으로 꼽을 수 있습니다.

이 단점을 보완해서 파이 차트에 명확한 수치를 포함시켜주면, 충분한 시각화 자료로 활용할 수 있을 것으로 보입니다.

질문지 4

딥러닝은 무엇인가요? 딥러닝과 머신러닝의 차이는?

딥러닝은 머신러닝에 포함되는 기술 중 하나로 인공 신경망이라는 알고리즘을 골자로 만들어진 기계의 데이터 학습 방법입니다.

다만, 딥러닝은 더 복잡한 문제를 해결하기 위해 인공 신경망을 다양하게 쌓아갈 수 있으며 사람의 뇌에 있는 뉴런처럼 자극을 받으면 다음 뉴런으로 자극을 전달하는 과정과 비슷해 이와 같은 이름이 붙었습니다.

머신러닝에서 세부적인 기술 분야 중 하나로 딥러닝이 존재하는 것이며 데이터의 규칙을 스스로 찾아가는 과정을 학습하는 것이 머신러닝이라 받아들이면 될 것 같습니다.

질문지 5

Cross Validation은 무엇이고 어떻게 해야하나요?

전체 데이터가 많지 않고, 검증 데이터 세트를 분리하느라 훈련 데이터가 줄어들어 모델을 훈련시키는 데이터가 부족한 상황이 있습니다.

이러한 경우, 훈련 세트를 "폴드"라는 작은 데이터 단위로 나누고 각 작은 덩어리를 한 번의 검증데이터로 사용하고 나머지 데이터를 훈련용 데이터로 활용하는 것이 가능합니다.

이렇게 활용하면 기존의 훈련 데이터 보다 더 많은 데이터로 훈련이 가능하며, 저의 경우 사이킷런의 K-Fold 모듈과 cross_validation 모듈을 사용해서 간단한 모델을 구현한 경험이 있습니다.

프로그래머스에서 제공하는 미술 작품 분류하기 과제가 그 예시인데 이미지 분류 모델을 만들기 위해 주어진 데이터가 1698장 밖에 안되서 K-Fold를 사용해 더 많은 데이터로의 훈련을 고려하고 적용한 상황이었습니다.

질문지 6

네트워크 관계를 시각화해야 할 경우 어떻게 해야할까요?

1. IF 언급한 네트워크 시각화가 클라우드 상의 가상 머신들의 IP 상태 (Public / Private), 가상 라우터 & 스위치 등을 언급하는 것이라면

제가 오픈스택이라는 인프라 구축 오픈 소스 프로젝트를 참여할 때, 오픈스택에서는 배포한 서비스에서 네트워크 토폴로지라는 인스턴스간의 연결 상태를 표기하는 시각화 페이지를 별도로 제공했습니다.

네트워크에 대해 많은 것을 다룬 것은 아니지만 가상 라우터와 가상 스위치, 그리고 인스턴스에 할당된 공인 & 사설 IP 등의 연결관계를 표현할 때 토폴로지를 사용했는데 시각화에 이러한 토폴로지를 활용하면 네트워크 간의 관계를 명확히 이해하는데 도움이 될 것 같습니다.

2. IF 인터넷 네트워크 망이 아니라 데이터를 네트워크 그래프 형태로 표기하고 싶은 것이라면

데이터를 노드와 엣지 형태로 구성하기 위해 R, Python 등에서는 이러한 그래프 시각화를 위해 Grephi, Network X와 같은 시각화 모듈을 제공하는 것으로 알고 있습니다.

어떤 데이터의 네트워크 관계 시각화를 표기하는지에 대해 구체적인 질문이 더 필요하겠지만, 노드와 엣지를 기반으로 각 노드 간의 관계성은 어느 정도로 강한지, 그리고 어떤 카테고리 등에 속하는지를 종합적으로 판단해 시각화할 필요성이 있습니다.

질문지 7

PostgreSQL의 장점은 무엇일까요?

MySQL 등에 비해 표준 SQL 문법을 잘 지키는 것으로 알려져 있고, SQL With 구문 등 분석에 필수적으로 필요한 문법 등이 모두 구현되어 있습니다.

빅쿼리나 Redshift 만큼 큰 데이터를 다루기에는 상대적으로 어렵지만 사용된지 오래된 만큼 안정성이 보장되고 확장 기능이 많아 사용자가 편리하게 사용할 수 있는 것으로 알려져 있습니다. 또한 오픈 소스 프로젝트이기 때문에 상용 서비스로 사용할 때 기업 입장에서 유료 DBMS에 지불해야하는 라이센스 비용을 아낄 수 있기 때문에 상업적인 지원도 뛰어나며, 커뮤니티 등에 잘 정리된 문서가 많아 편리성이 좋은 것으로 알고 있습니다.

질문지 8

왜 갑자기 딥러닝이 부흥했을까요?

딥러닝 기술이 한 번에 등장한 것으로 보일 수 있지만, 저는 딥러닝이 부흥했던 순간을 생생하게 기억하던 것이 2016년 알파고와 이세돌의 대국을 군대에서 봤고, 이 때 전 세계 사람들에 알려지면서 라는 것을 알고 있습니다.

무엇보다 앞선 딥러닝이 무엇이냐는 질문에 대한 답변으로 보다 복잡한 문제를 해결하는 알고리즘이라 얘기했습니다.

딥러닝은 이미지, 음성, 텍스트 등에 대한 인지 등에 대한 우리의 일상 생활에 자리 잡은 일들에서 문제를 해결할 수 있을 것이란 기대감, 그리고 빅데이터 시대에서 쏟아지는 데이터를 종합 & 분석하면서 학습에 이용할 수 있다는 전망으로 급격히 발전하는 것으로 알고 있습니다.

질문지 9

missing value가 있을 경우 채워야 할까요? 그 이유는 무엇인가요?

주어진 데이터셋에 missing value(이하 누락값)이 있다면 적절한 값으로 채워주는 것이 중요합니다.

그 이유는 캐글 등의 데이터 경진대회에서 제공하는 데이터 셋에 많은 경우 이러한 누락 값이 있는 것을 볼 수 있는데, 이는 모델을 만드는 과정에서 모델에 제대로 된 학습을 진행하는데 방해하는 요소가 될 수 있을 뿐더러 데이터를 시각화해서 데이터 탐색을 진행하는 과정에서도 사람에게 잘못된 정보를 제공할 수 있기 때문입니다.

이 누락 값을 채우는 것은 방법은 데이터의 특성에 따라 다르겠지만, 특정 값이나 평균, 중앙값, 횟수 등으로 채우는 것을 할 수 있으며 문자 등으로 치환하고 그 문자를 라벨링을 위해 숫자로 변경하는 작업 등도 포함이 될 것으로 보입니다.

질문지 10

평균(mean)과 중앙값(median)중에 어떤 케이스에서 뭐를 써야할까요?

주어진 데이터를 KDE나 히스토그램 등으로 시각화 했을 때 대칭을 이룬다면 (skewed 되어 있지 않다면) 그 데이터를 대표하는 값으로 평균 값을 사용하는 게 좋을 수 있습니다.

그러나 현실의 많은 상황에서 데이터가 대칭을 이루는 경우는 찾기 힘들고, 이 때 평균과 중앙값을 구하면 차이가 많이 나는 것을 볼 수 있습니다.

평균과 중앙값 모두 데이터의 중심이 되는 위치를 찾기 위한 목적으로 활용되지만 한쪽으로 치우처진 극단적인 값이 많은 경우 중앙값을, 전체 데이터의 균등한 분포가 되어 있는 경우 평균을 사용한다고 이해하면 좋을 것 같습니다.

RyanKor commented 2 years ago

2021.10.03

질문지 1

트래픽이 몰리는 상황입니다. AWS의 ELB 세팅을 위해서 웹서버는 어떤 요건을 가져야 쉽게 autoscale가능할까요?

일반적으로 ELB를 사용해서 배포하면 autoscaling이 자동으로 함께 설정되는 것으로 알고 있습니다.

아래와 같은 ELB 구조를 볼 때, auto scaling 구조 밖에서 로드 밸런서가 설정되어 있어야 각 인스턴스로 원활하게 트래픽이 분산되어 서버 운영이 될 수 있을 것으로 보입니다.

image

질문지 2

히스토그램의 가장 큰 문제는 무엇인가요?

대량의 데이터를 한 번에 보여줄 수 있기 때문에 데이터의 전반적인 추세에 대한 시각화 정보를 제공하는 것은 뛰어나지만, 이는 반대로 말하면 데이터의 세부 정보에 대해서는 정확한 정보를 제공하지 못한다는 것을 의미합니다.

또한 연속적인 데이터일 때 데이터의 전반적인 정보를 제공하는 것이 가능하며, 두개의 데이터를 두고 비교하는 것에 사용하기에는 적절하지 못합니다.

질문지 3

RNN에 대해 설명해주세요

질문지 4

Cost Function과 Activation Function은 무엇인가요?

비용함수란 실제 목표값과 모델의 결과로 만들어진 예측값의 오차를 산출하는 함수이며, Activation Function란 어떠한 신호를 입력받아 이를 적절한 처리를 하여 출력해주는 함수입니다. 이를 통해 출력된 신호가 다음 단계에서 활성화 되는지를 결정하는 용도로 사용됩니다.

질문지 5

알고있는 Activation Function에 대해 알려주세요. (Sigmoid, ReLU, LeakyReLU, Tanh 등)

질문지 6

Local Minima와 Global Minima에 대해 설명해주세요.

Local Minima는 경사하강법을 사용할 때 경사도가 0이지만 최소점은 아닌 지점을 의미하고(즉, 그래프 상에 최소 지점은 따로 있음), Global Minima는 경사하강법을 사용할 때 경사도가 0이고 최소점인 지점을 의미합니다.

질문지 7

Residual Network는 왜 잘될까요? Ensemble과 관련되어 있을까요?

질문지 8

Fully Connected Layer의 기능은 무엇인가요?

입력층과 은닉층, 은닉층과 출력층이 모두 연결되어 있기 때문에 완전 연결 신경망이라고도 하며 가장 기본적인 신경망이라고 구글링을 하면 언급되어 있습니다.

뉴런들이 빠짐없이 연결되어 있으며, 이는 데이터 흐름이 순환되는 순환신경망(RNN), 정방향으로 흐르지만 뉴런들이 완전히 연결되어 있지 않은 합성곱 신경망 등과 분리되는 특징을 갖고 있습니다.

이를 CNN에 활용하게 된다면, 결과 값이 나오는 부분을 직렬화시켜 데이터의 비선형적인 feature들을 비용을 감소하는 방식으로 연결한다는 특징을 갖고 있습니다.

질문지 9 (통계 내용이라 이해 못하는 개념들이 좀 있다)

요즘같은 빅데이터(?)시대에는 정규성 테스트가 의미 없다는 주장이 있습니다. 맞을까요?

통계에서는 모집단에 대해 실질적인 전수조사가 어려워 표본을 추출하여 표분 집단의 모수적 특징을 통해 모집단의 모수적 특징을 파악하는데요.

이때, 많은 통계적 추론들이 모집단의 데이터가 정규분포를 따른다고 가정하기 때문에 정규성 검정을 통해 정규분포를 따르는지 확인해야합니다

그러나, 데이터가 많게 되면 충분한 수의 샘플을 뽑을 수 있고, 이때 중심극한 정리에 따라 표본 평균들의 분포가 정규 분포를 따르기 때문에 정규성 검정을 생각할 수 있게 되기 때문에 마냥 의미가 없다고 보기에는 무리가 있을 것 같습니다.

질문지 10

Gradient Descent에 대해서 쉽게 설명한다면?

딥러닝을 학습하면서 Gradient Descent에 대해 여러 기법이 언급되고, 한국어로 번역하면 경사 하강법이라고 할 수 있는데요.

기본적으로는 모델의 학습을 최적화하기 위해 학습의 손실이 최소화되는 지점을 찾는 것이고(즉, 학습의 최적화 지점을 찾는 것), 함수의 기울기를 구하고 경사의 절댓값이 낮은 쪽으로 계속 이동시켜 극값에 이를 때까지 반복시키는 작업입니다.

정확성을 위해서 극값으로 이동함에 있어 매우 많은 단계를 거쳐야하며, 주어진 함수에서의 곡률(== 경사)에 따라서 거의 같은 위치에서 시작했음에도 불구하고 완전히 다른 결과로 이어질 수 있습니다.

RyanKor commented 2 years ago

데이터 포맷 (다음 날 인터뷰 질문 작성용)

2021.10.04

질문지 1

요즘 Sigmoid 보다 ReLU를 많이 쓰는데 그 이유는?

Sigmoid 함수를 활성 함수로 사용할 경우, 출력되는 활성화 값이 0이 아닌 일정한 값 (0.1, 0.003 등)이 나오는데 값이 아무리 작더라도 가중치와 곱셈을 진행할 경우 그 연산이 딥러닝에 적용할 경우, 레이어가 늘어날 때마다 연산 횟수는 기하급수적으로 증가하고, 활성화 값은 0에 가까워지면서 업데이트 되는 값의 연산이 매우 복잡해지게 됩니다.

이러한 문제를 relu함수를 도입하면 많은 부분 해결할 수 있으며 0보다 작은 값은 모두 0으로 출력하면서 딥러닝에서 연산을 복잡하게 만드는 것을 해소할 수 있으며, sigmoid 함수보다 비용이 저렴다하는 특징을 갖습니다.

마지막으로 relu 함수는 비선형적인 특징을 갖는데, 데이터의 복잡도가 높아지고 차원이 높아지게 되면 데이터의 분포는 단순히 선형 형태가 아닌 비 선형 형태(Non-Linearity)를 가지게 되면서 relu함수가 상대적으로 네트워크의 표현력을 잘 반영한다는 것을 보여줍니다.

질문지 2

Validation 세트가 따로 있는 이유는?

테스트 세트로 모델을 튜닝하는 경우, 테스트 세트에서만 성능이 좋아진다는 단점 때문에 실전에서 사용하기 어렵고 이를 비유하자면 "수험생에게 정답을 주고 문제를 풀라고 하는 상황" 과 동일합니다.

결과적으로 모델의 일반화 성능을 저하시키며 모델의 성능 점수 측정을 목표로 사용하기 위한 데이터 셋을 훈련 데이터에서 분류하는데 이것이 검증 데이터 입니다.

질문지 3

Back Propagation에 대해서 쉽게 설명 한다면?

역전파란 말 그대로 역 방향으로 값을 전달하는 방법인데요, 이는 딥러닝에서 입력층에 대해 원하는 값이 출력되도록 개개의 가중치를 조정하는 방법으로 사용되며, 속도는 느리지만 안정적인 결과를 얻을 수 있는 장점이 있어 기계 학습에 널리 사용되고 있습니다.

질문지 4

SGD에서 Stochastic의 의미는?

SGD에서 Stochastic의 의미는 "확률적"으로 해석할 수 있으며, 추출한 데이터 한 개에 대해 기울기를 계산하고 경사 하강법을 적용하는 기법을 의미합니다.

전체 데이터를 사용하는 것이 아니라, 랜덤하게 추출한 일부 데이터를 사용하는 것이기 때문에 학습 중간 과정에서 결과의 진폭이 크고 불안정하며, 속도가 매우 빠르다.

예를 들어, 데이터 샘플이 365개이고 epoch이 100회라고 한다면, 확률적 경사 하강법은 각 데이터 샘플 한 개에 대해 기울기를 계산하므로 총 36500회의 가중치 업데이트가 진행되게 됩니다.

질문지 5

Dropout의 효과는?

Dropout이란 네트워크의 유닛의 일부만 동작하고 일부는 동작하지 않도록 하는 방법으로 모델이 훈련용 데이터에 과적합되는 상황을 방지하기 위한 기법으로 사용됩니다.

네트워크를 학습하는 동안 랜덤하게 일부 뉴런이 동작하는 것을 생략해버리면 뉴런의 조합만큼 지수 함수적으로 다양한 모델을 학습시키는 것과 같은 효과를 가져올 수 있습니다.

RyanKor commented 2 years ago

2021.10.05

질문지 1

오버피팅일 경우 어떻게 대처해야 할까요?

학습 데이터에 모델이 오버피팅되는 상황은 모델의 성능을 떨어트리는 주요 이슈로써 모델이 과적합되면 훈련 데이터에 대한 정확도는 높을지라도, 새로운 데이터, 즉, 검증 데이터나 테스트 데이터에 대해서는 제대로 동작하지 않을 것입니다.

이는 모델이 학습 데이터를 불필요할정도로 과하게 암기하여 훈련 데이터에 포함된 노이즈까지 학습한 상태라고 봐야하는데요.

이를 해결하기 위해 4가지 방법을 일반적으로 적용한다고 배웠습니다.

  1. Data Augmentation
  2. 모델의 복잡도 줄이기
  3. 가중치 규제 적용
  4. 드롭아웃

가중치를 규제하는 L1, L2 규제 방법과 드롭아웃은 위의 면접 질문들에서 답변했기 때문에 패스하고, 모델의 복잡도는 은닉층의 수나 매개변수의 수 등이 영향을 줄 수 있기 때문에 은닉층의 갯수를 줄여주는 것도 하나의 방법이 될 수 있습니다.

그리고 데이터가 적어서 몇 몇 샘플 데이터의 특징에 과하게 학습이 된 경우, 의도적으로 기존 데이터를 수정하거나 추가할 수 있는데 이 기법이 data augmentation이라고 할 수 있겠습니다.

질문지 2

하이퍼 파라미터는 무엇인가요?

모델을 튜닝하는데 있어서 사용자가 직접 설정하는 값들로 optimizer의 learning rate나 손실함수, 미니 배치의 크기나 epoch, 그리고 가중치 초기화 등을 언급할 수 있고 그 외에도 모델링을하는데 사용자가 직접 설정하는 모든 것들을 지칭한다고 볼 수 있을 것 같습니다.

질문지 3

Weight Initialization 방법에 대해 말해주세요. 그리고 무엇을 많이 사용하나요?

가중치를 초기화한다는 것은 모델이 학습을 잘 할 수 있도록 학습이 시작하는 지점을 사용자가 지정해주는 것을 의미합니다.

이 때, 가중치를 초기화하는 방법은 0으로 모두 초기화시키는 방법도 있지만, 이는 역전파를 적용하면 가중치가 모두 같은 값으로 변경되기 때문에 여러개의 노드로 신경망을 구축하는 것의 의미가 사라집니다 (1로 초기화하는 경우도 마찬가지)

이를 위해 코세라 학습을 할 때 랜덤, xavier 또는 he 가중치 초기화라는 것을 배웠는데 아직 어떤 가중치 초기화 방법을 많이 사용해 본 것은 아니지만 보편적으로 he 초기화가 많이 쓰이는데 relu 활성함수를 보편적으로 많이 채택하는 최근 모델링 특성을 반영한 것으로 보이고 은닉층의 깊이가 커지더라도 활성화 값이 일정하게 유지되는 특성 때문에 많이 사용되는 것으로 보입니다.

질문지 4

Apache Beam에 대해 아시나요? 기존 하둡과 어떤 차이가 있을까요?

GCP 데이터 엔지니어 자격증을 학습하면서 아파치 빔에 대해 간략하게 설명을 들었습니다.

데이터 파이프라인용 오픈소스 프로그래밍 모델로 대량의 이미지를 동적으로 더 빨리 처리해주기 위해 cloud dataflow에 적용된 프로젝트로 알고 있습니다.

image

아파치 빔과 하둡 모두 맵 리듀스를 사용한다는 점에서는 공통점이 있을 수 있지만, 아파치 빔은 배치나 실시간성에 상관없이 여러 데이터 엔진을 단일한 API로 쓰게 하고, 단일 코드와 클러스터를 기반으로 운영하게 함으로써 개발자의 생산성을 높여주는 특성을 갖고 있고, 하둡은 데이터의 분산 처리 인프라스트럭처로 이해하는 방향이 차이가 있는 것으로 보입니다.

질문지 5

Back Propagation은 몇줄인가?

아래의 코드와 같이 다중 신경망의 오차 역전파를 간단하게 코딩해본다면 하나의 함수로 6줄 정도로 코딩이 가능할 것으로 보입니다.

    def backprop(self, x, err):

        m = len(x)

        dw = np.dot(self.a.T, err) / m # 활성 함수 결과값을 반영한 가중치 미분값 도출

        db = np.sum(err) / m # 절편 미분값 도출

        err_to_hidden = np.dot(err, self.w.T) * self.a * (1 - self.a) # 은닉층의 오차율 계산

        return dw, db
RyanKor commented 2 years ago

데이터 포맷 (다음 날 인터뷰 질문 작성용)

2021.10.

질문지 1

질문지 2

질문지 3

질문지 4

질문지 5