이번에는 파이토치를 사용해 더 어려운 문제를 해결하겠습니다. 파이토치가 제공하는 신경망을 활용합니다. 보스턴 집값 데이터는 원래 81개의 특징을 고려한 큰 데이터셋입니다. 우리는 사이킷런(scikit-learn)에서 정제한 14개 특징만을 사용합니다. 결과를 예측하는 데 사용되는 데이터 요소를 '특징(feature)'이라고 부릅니다. 모델은 특징에 가중치를 반영해 결과를 도출합니다. 이번에는 집값만을 예측하므로 출력은 하나입니다.
파이토치는 딥러닝에 사용되는 대부분의 신경망을 torch.nn 모듈에 모아놨습니다. 앞에서 딥러닝은 신경망 층을 깊게 쌓아올린다고 말씀드렸는데, 파이토치도 여러 층을 쌓아서 딥러닝 모델을 만듭니다. 층(layer)은 nn.Module 객체를 상속받아 정의되고, 층이 쌓이면 딥러닝 모델이 완성됩니다. 프로그래밍 초보자라면 '객체를 상속받는다'는 말이 지금은 조금 어려울 수 있는데, 'nn.Module의 모든 구성요소를 복사해오는 거다'라고 생각하시면 됩니다. 부모의 재산을 자식이 그대로 물려받는 것처럼요.
이번에 사용할 알고리즘은 선형회귀입니다. 선형회귀는 직선을 그리는 방식으로 미지의 값을 예측하는 가장 간단한 방법입니다. 회귀에 의해 얻은 결과를 실제 데이터와 비교해 오차를 줄여나가는 형식으로 학습합니다. 이때 오차의 제곱에 대한 평균을 취하는 평균 제곱 오차(Mean Square Error, MSE)를 사용합니다. 평균 제곱 오차를 사용하면 작은 오차와 큰 오차를 강하게 대비시킬 수 있어 유용합니다.
▼ 학습 루프

3.1절 '사인 함수 예측하기'에서는 직접 함수를 만들어 변수를 지정해줬지만, 이번에는 파이토치에서 제공하는 함수를 활용하겠습니다. torch.nn.Sequential() 객체에 모듈(여기서는 선형 회귀 모듈)을 집어넣어주면 파이토치가 알아서 순서대로 계산합니다. 선형 회귀 모델이므로 파이토치의 nn.Linear 모듈을 이용하면 됩니다. 다음 그림은 선형회귀에 이용할 다층 신경망, 즉 MLP 모델을 나타낸 그림입니다. MLP 층은 각 층의 뉴런이 다음 층의 모든 뉴런과 연결되어 있기 때문에 전연결층(fully connected layer, FC)이라고도 부릅니다.
▼ 선형회귀 MLP 모델

❶ 먼저 입력층에 입력 데이터가 들어옵니다.
❷ 입력 데이터는 은닉층의 입력으로 들어가 특징으로부터 정보를 추출합니다.