Every input should have a label, and put labels above the input.
Placeholders are problematic—both as makeshift labels and as a means of storing additional hint text. Instead put hint text below the label and above the input.
Don’t mark required fields, mark optional ones. Or better yet avoid optional questions by using a branching question.
The password field should us a hint text pattern to describe the requirements of the password.
To reduce typos, allow the user to reveal their password. This eliminates the need for an additional ‘Confirm password’ field which doubles the effort and degrades the user experience.