네트워크의 유닛의 일부만 동작하도록하고, 일부는 동작하지 않도록 하는 방법이다.
dropout은 1. 오버피팅을 방지하기 위한 방법 중 하나이며, hidden layer의 일부 유닛을 동작하지 않게 하는 것이다.
hidden layer에 드롭아웃을 확률 p로 적용할 때, hidden 유닛들은 p확률로 제거되는 것이다.
z는 0혹은 1을 가질수 있는 베르누이 분포 랜덤변수 벡터로, 확률적으로 h와 곱해지면서 hidden layer안에 있는 몇개의 노드를 날려버릴 수 있다. 이때 확률은 일반적으로 0.5이지만 하이퍼파라미터로 지정할 수 있다.
dropout = torch.nn.Dropout(p=drop_prob)
model = torch.nn.Sequential(linear1, relu, dropout,
linear2, relu, dropout,
linear3, relu, dropout).to(device)
위 코드처럼 여러 레이어를 쌓으며 그 사이에 dropout을 취해주면서 여러형태의 네트워크를 구성할 수 있고 2. 앙상블 효과도 낼 수 있게 된다.
또 위 그림처럼 뉴런이 어떤 하나의 입력에만 의존할 수 없어지기 때문에, 입력노드들의 3. 가중치를 분산하는 효과를 낼 수 있다.